搜索
bottom↓
回复: 1

串口无法连续接收数据

[复制链接]

出0入4汤圆

发表于 2018-10-9 19:43:45 | 显示全部楼层 |阅读模式
本帖最后由 luybpotter 于 2018-10-9 20:08 编辑
  1. void init_Ser() {
  2.     TXSEL = 0;
  3.     RXSEL = 0; //TX:RB6引脚 RX:RB7引脚
  4.     SYNC = 0; //选择异步通信模式
  5.     BRGH = 0; //选择高速波特率发生模式
  6.     BRG16=0;
  7.     SPEN = 1; //串行通信端口打开
  8.     TXEN = 1; //允许发送数据
  9.     SPBRGL = 51; //设置波特率为9600,32M, 低速模式 //51为9600波特率 12为38400波特率
  10.     TX9=0;RX9=0;//发送和接收都是8位数据模式
  11.     CREN=1;                //开启异步通信的接收功能
  12.     SCKP=0;     //未反相的数据 发送
  13. }
  14. /***********************************************************************
  15.         函数原型:void interrupt usart(void)
  16.         功    能:首先检测发送来的数据是不是数据接收的起始数据(0x00),如果
  17.                           接收到起始位,开始将数据保存到数组中,数据接收的停止数据(
  18.                           0xff),为了有效数据(0xff)的传输,定义至少传输5个字节的数据
  19. *************************************************************************/
  20. void interrupt usart(void)
  21. {
  22.         if(RCIF)                                                                 //判断是否为串口接收中断
  23.         {
  24.                 uchar        recdata;
  25.                 recdata = RCREG;
  26.                 RCIE=0;                                                                //未接收完之前关闭接收中断,停止接收,防止冲突
  27.                 if(start)                                                        //如果数据收到数据接收起始位,开始接收数据,存进数组
  28.                 {
  29.                         num++;                                                        //接收的数据加1       
  30.                         if((recdata==end_dat)&&(num>=5))//如果接收的数据是数据接收标志,停止接收num>=5是由于保证
  31.                                                                                         //数据最少是3位有效的数据
  32.                         {
  33.                                 uartdata[num-1] = recdata;        //将最后接收到的数据接收结束数据edd_dat存到数组
  34.                                 start = 0;                                        //数据接收停止
  35.                                 rec_flag = 1;                                //数据接收完毕标志位
  36.                                 datanum=num;
  37.                                 num = 0;                                        //将数据接收个数清零,为了下次数据接收       
  38.                                 goto uart_end;                                //数据接收结束,重新开放接收中断
  39.                         }
  40.                         if(num<10)                                                //只要数据在接收有效范围内,在此定义最多一次传送10个数据,可更改
  41.                         {       
  42.                                 uartdata[num-1] = recdata;        //将接收的数据存放到数组中
  43.                         }
  44.                 }
  45.                 else
  46.                 {
  47.                         if(recdata == start_dat)                //如果接收的数据是接收起始数据
  48.                         {        K1 = ~ K1;                                                       
  49.                                 start = 1;                                        //开启数据接收标志start
  50.                                 num = 1;                                        //计算接收数据的个数
  51.                                 uartdata[0] = recdata;                //将起始数据存放到数组中
  52.                         }
  53.                 }
  54.              if(OERR)//OERR为1表示有溢出错误位,将CREN清零可以将其清零
  55.      {
  56.                  
  57.       CREN=0;
  58.       CREN=1;
  59.      }
  60.         uart_end:
  61.                 RCIE = 1;                                                        //数据接收完毕,再次开放接收中断
  62.         //}

  63.         }
复制代码

接收中断如上,首次字符串能接收,第二次无论发什么字符串或者字符,都不进入中断
but,一旦配合发送的话,就能多次接收,是什么情况?配置错误?
通过调试发现,无法连续进入接收中断。是配置出问题了?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入475汤圆

发表于 2018-10-9 23:54:40 来自手机 | 显示全部楼层
能调试的话直接看寄存器,接收标志有没有?中断标志有没有,中断使能生效没,简单的事情哈。不能调试就用另外的输出把那些寄存器不停的打印出来看
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 13:59

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

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