[PIC®/AVR®/dsPIC®产品] 关于Pic16f886串口接收的问题!!

[复制链接]
 楼主| 涵潇舒雅 发表于 2013-9-11 12:02 | 显示全部楼层 |阅读模式
本帖最后由 涵潇舒雅 于 2013-9-11 13:56 编辑

由于开发板还没有到,我用的是isis仿真器,我的发送没有问题,能够发送数据,其实到底有没有发送我也不确定,只是能够进入中断,
这是发送的中断函数
  1. void interrupt isr()
  2. {
  3.         if(RBIE==1&&RBIF==1)
  4.         {
  5.                 while(RB4);      //只有当按钮被释放时才往下执行
  6.                 a=1;
  7.                 set_led(0);
  8.                 PORTB=PORTB;
  9.                 RBIF=0;
  10.         }
  11.         if(TXIE==1&&TXIF==1)
  12.         {
  13.                 set_led(2);
  14.                 TXIF=0;
  15.         }
  16. }

关于接收的串口的配置
  1. void init_RC()
  2. {
  3.         SPEN=1;//串口使能位
  4.         SYNC=0;//选择异步模式
  5.         BRGH=1;//高速
  6.         SPBRG=0X19;//设置波特率
  7.         RX9=0;//允许接收8位数据
  8.         SREN=0;//异步模式无效
  9.         TXIE=0;//关闭发送中断
  10.         TXEN=1;//允许发送?好像只有这样才能打开串口
  11.         CREN=1;//使SCI工作在接收器方式
  12.         RCIF=0;
  13.         RCIE=1;//使能接受中断
  14. }


下面是我的主函数
  1. void main()
  2. {
  3.         TRISA=0;//A设置为输出
  4.         init_RC();
  5.         PIR1=0;//清空所有标志位
  6.         PEIE=1;
  7.         GIE=1;
  8.         set_led(3);
  9.         while(1)
  10.         {
  11.                 if(payload==1)
  12.                 {
  13.                         set_led(3);
  14.                         payload=0;
  15.                 }
  16.         }
  17. }
  18. void interrupt isr()
  19. {
  20.         set_led(3);
  21.         if(RCIE==1&&RCIF==1)
  22.         {
  23.                 payload=receive_byte();
  24.                 set_led(3);
  25.                 RCIF=0;
  26.         }
  27. }


不知道问题出在那里?不知道是仿真器的问题还是我自己代码的问题,求指教
小白变大白 发表于 2013-9-11 12:17 | 显示全部楼层
我最近也是用的这个~~
你程序不完整
RCIF和TXIF都是只读的
中断里最好不要调用其它函数
可能还有其它问题吧~
NE5532 发表于 2013-9-11 13:07 | 显示全部楼层
拿到开发板再弄实际的也不迟,仿真和实际可能有差异,现在硬着弄,会挫伤自己的积极性。
yewuyi 发表于 2013-9-11 13:40 | 显示全部楼层
在中断函数中,中断标志位和中断容许位要一起判断中断源,否则一不注意就掉坑里了。。。

例如:if(TXIE&&TXIF){}

 楼主| 涵潇舒雅 发表于 2013-9-11 13:45 | 显示全部楼层
yewuyi 发表于 2013-9-11 13:40
在中断函数中,中断标志位和中断容许位要一起判断中断源,否则一不注意就掉坑里了。。。

例如:if(TXIE&&T ...

的确是,我本想只要进入中断就点亮led,但是就是进不去!!有可能是仿真器的原因吧!我的配置应该没有问题吧!
 楼主| 涵潇舒雅 发表于 2013-9-11 13:46 | 显示全部楼层
NE5532 发表于 2013-9-11 13:07
拿到开发板再弄实际的也不迟,仿真和实际可能有差异,现在硬着弄,会挫伤自己的积极性。 ...

的确是这么回事,感觉找不到突破口了啊!失落啊
 楼主| 涵潇舒雅 发表于 2013-9-11 13:47 | 显示全部楼层
本帖最后由 涵潇舒雅 于 2013-9-11 13:54 编辑
小白变大白 发表于 2013-9-11 12:17
我最近也是用的这个~~
你程序不完整
RCIF和TXIF都是只读的
  1. #include<pic.h>  //<***.h>是调用标准头文件
  2. #include "delay.h"// "***.h"是调用非标准头文件
  3. #include "uart.h"
  4. uchar PORTB_TEMP,a=0,payload;
  5. void init()
  6. {
  7.         RA0=0;
  8.         RA1=0;
  9.         TRISA=0;

  10.         //配置RB4为上升沿中断
  11.         RB4=0;
  12.         TRISB4=1;
  13.         ANSELH=0;
  14.         RBPU=0;//上升沿触发
  15.         WPUB4=1;
  16.         IOCB4=1;
  17.         RBIE=1;
  18.         PORTB=PORTB;
  19.         RBIF=0;
  20. }
  21. void main()
  22. {
  23.         TRISA=0;//A设置为输出
  24.         init_RC();
  25.         PIR1=0;//清空所有标志位
  26.         PEIE=1;
  27.         GIE=1;
  28.         set_led(3);
  29.         while(1)
  30.         {
  31.                 if(payload==1)
  32.                 {
  33.                         set_led(3);
  34.                         payload=0;
  35.                 }
  36.         }
  37. }
  38. void interrupt isr()
  39. {
  40.         set_led(3);
  41.         if(RCIF==1&&RCIE==1)
  42.         {
  43.                 payload=receive_byte();
  44.                 set_led(3);
  45.                 RCIF=0;
  46.         }
  47. }
yewuyi 发表于 2013-9-11 13:50 | 显示全部楼层
涵潇舒雅 发表于 2013-9-11 13:47

再重复提示你一次,在中断函数中,应该结合中断容许位和中断标志位一起判断中断源,例如:if(TXIE&&TXIF){}


请将中断函数中的各个中断源函数首先按照这个方式改掉再说。。。
 楼主| 涵潇舒雅 发表于 2013-9-11 13:57 | 显示全部楼层
yewuyi 发表于 2013-9-11 13:50
再重复提示你一次,在中断函数中,应该结合中断容许位和中断标志位一起判断中断源,例如:if(TXIE&&TXIF) ...

恩,现在已经改掉了!!!其他配置有问题吗?
yewuyi 发表于 2013-9-11 15:12 | 显示全部楼层
涵潇舒雅 发表于 2013-9-11 13:57
恩,现在已经改掉了!!!其他配置有问题吗?

其他没看
兰天白云 发表于 2013-9-11 16:24 | 显示全部楼层
isis仿真器是什么?通讯测试最好有硬件,外加一个示波器,看波形是最爽的
 楼主| 涵潇舒雅 发表于 2013-9-12 13:46 | 显示全部楼层
兰天白云 发表于 2013-9-11 16:24
isis仿真器是什么?通讯测试最好有硬件,外加一个示波器,看波形是最爽的

就是因为没有硬件,我才用的仿真器 泡一泡程序 试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

164

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部