找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1081|回复: 0
打印 上一主题 下一主题
收起左侧

2051单片机+485通讯+PELCO-D协议 数据传输残缺

[复制链接]
跳转到指定楼层
楼主
ID:735148 发表于 2020-5-9 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /************************************
  2.                         UART串口中断
  3. ************************************/
  4. void UART_Interrupt (void) interrupt  4
  5. {
  6.         if(RI)  //接收字节
  7.         {
  8.                 RI = 0;
  9.                 if(datebuf_i<sizeof(DateBuf))  //DateBuf是用来存储接收到的信息的数组。长度可随协议手动更改
  10.                 {
  11.                         DateBuf[ datebuf_i++ ] =SBUF; //将接收缓冲区的信息按位写入到数组中
  12.                 }
  13.                

  14.                 DelayXs(2);
  15.         }
  16.         if(TI)
  17.         {

  18.                 TI = 0;
  19.         }

  20. }
复制代码
这是中断接收部分的代码。已经确定和排除的是波特率没有问题。硬件系统没有问题。
  1. unsigned char  Date_TF(unsigned char * buf)
  2. {
  3.         int a;
  4.         u8 a1;
  5.         u8 b;
  6.         u8 i=0 ;
  7.         u8 date_tf;
  8.         if(buf[0] ==0xff)
  9.         {
  10.                 if(buf[1] == 0x01)
  11.                 {
  12.                         if(buf[2] == 0x00)
  13.                         {
  14.                                 
  15.                                 if(buf[3] == 0x00)
  16.                                 {
  17.                                         if(buf[4] == 0x00)
  18.                                         {
  19.                                                 if(buf[5] == 0x00)
  20.                                                 {
  21.                                                         if(buf[6] == 0x00)
  22.                                                         {
  23.                                                                 relay_zheng();
  24.                                                         }                                                        
  25.                                                 }                                       
  26.                                         }
  27.                                 }
  28.                         }
  29.                         
  30. //                        b = buf[6];
  31. //                        
  32. //                        for( i=1;i<5;i++ )
  33. //                        {
  34. //                                a1=buf[i];
  35. //                                a +=a1;
  36. //                        }               
  37. //                        if(a == b)
  38. //                        {        
  39. //                                tf = 1;
  40. //                                relay_stop();//测试
  41. //                        }
  42.                 }
  43.         }
  44.         return date_tf;
  45. }
复制代码
这是发现问题后一步步检测出来的接收到的信息。只有前两个是正确的。后面的都是错误的。
另外,再中断接收函数中,必须放延时函数,要不然就什么都接收不到?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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