关于51单片机多机通讯问题求高手
我在做单片机多机通讯试验中,遇到下面代码不解,求高手指点aa=SBUF;/*接收状态*/if((aa&0x08)==0x08){TB8=1;err();}/*若命令未被接...
我在做单片机多机通讯试验中,遇到下面代码不解,求高手指点
aa=SBUF; /* 接收状态 */
if((aa&0x08)= =0x08) {TB8=1; err( );} /* 若命令未被接收,发复位信号 */
请问为什么是if((aa&0x08)= =0x08)来判断命令是否被接受,求高手指点!!
aa&0x08不明白为什么是这样,0x08是怎么来的???,因为如果正确接受,从机回00h, 展开
aa=SBUF; /* 接收状态 */
if((aa&0x08)= =0x08) {TB8=1; err( );} /* 若命令未被接收,发复位信号 */
请问为什么是if((aa&0x08)= =0x08)来判断命令是否被接受,求高手指点!!
aa&0x08不明白为什么是这样,0x08是怎么来的???,因为如果正确接受,从机回00h, 展开
6个回答
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
单片机串口通信数据丢失的原因可能如下:1. 按键通过串口发送对应命令,第一次按按键串口发送的指令正确且能把数据正确的显示出来,在第二次按按键串口发送的指令出现丢失的状况,可能是因为串口通信的波特率设置不正确。2. 如果单片机和外部设备的波特...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
展开全部
看样子,这段代码不是你亲自写的啊。你需要索要开发人员的相关串口通信协议。
我猜这个通信协议约定:首个字节表示命令,命令字(字节)的第4位固定为1。所以在接收程序的开始,就立即判断此位。只有正确时,才RB8=0,开始接收后续数据。否则,直接广播err命令。
我猜这个通信协议约定:首个字节表示命令,命令字(字节)的第4位固定为1。所以在接收程序的开始,就立即判断此位。只有正确时,才RB8=0,开始接收后续数据。否则,直接广播err命令。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该说这个是一个类似握手协议,一般的串口收发硬件上是不可靠,为了保证可靠性,利用软件来完成,例如:可以增加标志位,告诉你什么是数据的开始,什么是数据的结束。 也可以使用握手,只有当成功接受或者发送时返回一个标志位。
这里应该是双方规定的一个值,或者用的另外一个模块(例如gsm)返回的标志位。
这里应该是双方规定的一个值,或者用的另外一个模块(例如gsm)返回的标志位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
aa是一个标志位, 是程序在接收的地方赋值了的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要完成的程序才能回到你的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意,收到的第九位数据没有存储在SBUF寄存器,而是在SCON里面的RB8位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询