6247|4

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

PIC16f877a 串口程序问题 [复制链接]

各位老师好,我是惠州的小肖。^_^平时有空就搞一下单片机。。对单片机这一块我就一菜鸟。。这不我照着李学海老师的书上我测试了一串口通信程序。李学海老师写的串口程序是用的汇编语言。。我试着把这程序用C语言改写。。可就是不能实现同样的功能(不可以进入中断程序)。。附件有ASM和C写的。ASM写的可以通过。在硬件上测试也通过了。。。C语言改写的编译通过,但硬件上测试通不过。好苦恼,几天晚上都睡不着。。试了很多次都发现不了问题,您们帮我看看好吗?(我用的是MPLAB IDE V8.10和PIC  C Compiler,程序实现的的功能是通过超级终端显示键盘输入的键值)。。谢啦!!

VAL_US   equ  .249
VAL_MS  equ   .200
;***********************************
STATUS   equ   3h
Z        equ   2h
INTCON   equ   0bh
PORTC    equ   07h
TRISC    equ     87h
TRISD    equ     88h
PORTD    equ   08h
RP0      equ   5h
PIR1     equ   0ch
PIE1     equ    8ch
RCSTA    equ    18h
TXSTA    equ    98h
SPBRG    equ    99h
RCREG    equ    1ah
TXREG    equ    19h
GIE      equ     7
PEIE     equ     6
RCIF     equ       5
RCIE     equ     5
;**************************************
count    equ     0x70
count_ms equ   0x71
;**************************************

  ORG   0X0000
GOTO   Startup
  ORG    0x0004
;**************************************
BTFSS   PIR1, RCIF
GOTO    Err_Exit
MOVF   RCREG, 0
MOVWF  TXREG
Err_Exit   retfie
;**************************************
Startup  
       bsf   STATUS,RP0
       clrf   TRISD
       bsf  TRISC,6
       bsf   TRISC,7
       movlw  .12
       movwf  SPBRG
       movlw  b'00100100'
       movwf   TXSTA
       bsf       PIE1, RCIE
       bcf      STATUS, RP0
       movlw b'10010000
       movwf  RCSTA
       bsf         INTCON,GIE
        bsf        INTCON, PEIE
;**************************************
     main  clrwdt
           incf    PORTD,f
           call    delay_ms
           call    delay_ms
           goto    main
;**************************************
delay_ms:
                  movlw       VAL_MS
                  movwf       count_ms
loop_ms           call        delay_us
                  decfsz      count_ms,f
                  goto        loop_ms
                  return
;**************************************
  delay_us:
                nop
                movlw    VAL_US
                movwf    count
loop_us         nop
                decfsz   count,f
                goto     loop_us
                return
                end
;**************************************






#device PIC16F877A
#fuses  NOWDT, PUT,XT, BROWNOUT, NOLVP, NOPROTECT, NOCPD, NOWRT, NODEBUG
#id CHECKSUM
#device icd=true
#include "pic16F87.h"

#use delay (clock = 4000000)
//--------------------------------------------------------------

void  Initial_USART(void)
  {
     TRISC=0xc0;
     TRISD=0;
     SPBRG=0x0c;
     TXSTA=0X24;
     RCIE=1;
     RCSTA=0X90;
     GIE=1;
     PEIE=1;
     PORTD=0;
   }


void main()
{

  Initial_USART();
   while(1)
     {
       restart_wdt();
       PORTD++;
       delay_ms(1000);
      
     }
   
}


#INT_RDA
     void serial_isr()
     
    {   
         if(RCIF==1)
             TXREG=RCREG;
         else
           TXREG=RCREG;

    }
   

   






   




               
   

最新回复

无语了。。。。。。。  详情 回复 发表于 2009-11-3 18:23
点赞 关注
 

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
学习
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在上班,没有时间看完你的程序,太长了
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
1. 汇编中断服务代码:
   BTFSS  PIR1, RCIF  
   GOTO    Err_Exit
   MOVF  RCREG, 0
   MOVWF  TXREG
   
   Err_Exit  retfie
2。C中断服务代码
    if(RCIF==1)
      TXREG=RCREG;
    else
      //TXREG=RCREG;
您要仔细阅读汇编代码,领会其实际操作本质,然后在写C代码。
   注意:维护别人的代码需要勇气,维护自己的代码需要智慧。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
无语了。。。。。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表