搜索
bottom↓
回复: 12

PIC16F690 串口通信问题,拜托各位帮忙,将完整C程序附上,能发不能收!!!!【恢复】

[复制链接]

出0入0汤圆

发表于 2009-1-16 16:12:50 | 显示全部楼层 |阅读模式
 串口通信,与PC机通信,可以发送但是不能接收,以下是我的程序,请指教啊!!!! 

   void interrupt ISrR(void) 

  { 

    if(RCIF&&RCIE) //判断是否为串口接收中断 

     { 

        RCIF=0; 

        PORTC_2=!PORTC_2;   //指示灯的作用,发现只能进一次中断,在上电的时候 

        if(OERR)  

         {                

              CREN=0;CREN=1; 

            } 

         

     } 

  }  

void main(void) 

{   

   unsigned char j; 

   SPBRG=25;   //波特率设为9600 

   TXSTA=0x24;//使能发送 

   RCSTA=0x90;// 使能接收 

   RCIF=0;    //清零外部中断  

   GIE=1;     //开放全局中断 

   PEIE=1;    //使能外设中断 

   TRISC=0x00;//将PORC定为输出 

   TRISB=0x20;//将PORB RXD 设为输入口,TXD 设为输出口 

   PORTC_2=0; 

   PORTC_4=1; //485通信片选,发送使能                            

      for(j=0;j<3;j++) 

          { 

          TXREG=0x69; 

          while(!TRMT);//如果发送在正在进行,那么等待 

         } 

  PORTC_4=0; //485通信片选,接收发送使能  

  RCIE=1;    //使能接收中断 

  while(1); //等待接收中断  

 } 

出0入0汤圆

 楼主| 发表于 2009-1-19 07:57:52 | 显示全部楼层
谢谢楼上,我试试看啊~~~

出0入0汤圆

发表于 2009-1-18 13:09:48 | 显示全部楼层
9615是可以的。看看还有没有什么改关掉的寄存器没关,比如AD,比较器,IO一定要设置成数字IO。中断里面注意读走RXREG,不管你怎么处理。

出0入0汤圆

 楼主| 发表于 2009-1-16 16:22:09 | 显示全部楼层
具体问题说明:

    小弟用的是4M晶振,9600波特率,实际波特率9615,不知道有没有关系,还有 接收中断    在上电时会进入,之后再也不会进入中断,请各位高手指教,非常感谢!

出0入0汤圆

发表于 2010-12-13 14:42:41 | 显示全部楼层
加下以下两句:
    ANSEL  = 0x00;
    ANSELH = 0x00;

出0入0汤圆

发表于 2010-12-22 22:58:59 | 显示全部楼层
哥们,从中断返回之前别忘了使能全局中断。

出0入0汤圆

发表于 2011-1-15 13:58:56 | 显示全部楼层
TRISB=0x20;//将PORB RXD 设为输入口,TXD 设为输出口
这句也不对,手册上说RXD与TXD都要设置成输入的

出0入0汤圆

发表于 2011-10-10 20:14:25 | 显示全部楼层
进入中断后必须将RXREG寄存器的值读出,下一次接收中断才能进去.

出0入0汤圆

发表于 2011-10-10 20:29:14 | 显示全部楼层
回复【7楼】zhu555
-----------------------------------------------------------------------

正解

出0入0汤圆

发表于 2011-10-11 09:52:00 | 显示全部楼层
运行后,检查中断标志是否有效!

出0入0汤圆

发表于 2012-11-9 14:54:30 | 显示全部楼层
在690的数据手册中提到这个:If the RX/DT pin is shared with an analog peripheral the analog I/O.function must be disabled by clearing the corresponding ANSEL bit.
所以楼上那位大哥是正解。

出0入0汤圆

发表于 2012-11-9 14:59:54 | 显示全部楼层
我也是被这个问题受困很久,看到radarOV123 的
加下以下两句:
    ANSEL  = 0x00;
    ANSELH = 0x00;
后立刻见效。再回头看690的datasheet,结果人家是提到这点的。看来看书不能马虎。

出0入0汤圆

发表于 2014-10-24 21:27:57 | 显示全部楼层
怎么代码前面那么多东西
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 14:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表