标题: 关于51单片机串口通信超时处理 [打印本页]

作者: tomli561    时间: 2020-3-26 15:31
标题: 关于51单片机串口通信超时处理
现在在做一个状态机控制器,想让控制器能够通过发送下位机的独立地址然后在接收下位机返回的地址来判断下位机是否在线。用while(!TI);来等待发送完毕和while(!RI);等待接收完毕,如果在发送和接收过程中一直没发送或接收完数据那不就一直在死循环里出不来了么,该如何做这里的超时处理,让超过一段时间发送中断标志位没置1就手动置1,退出循环进入下一个字节发送?

作者: game灬boy    时间: 2020-3-26 15:53
写一个定时器;时间设置为你所需要的超时时间;设置定时器中断优先级高于串口中断;在定时器中断服务函数中清除标志位TI和RI;
作者: 墨栀    时间: 2020-3-26 17:43
接收到数据的时候会进入中断,这个时候再开始计时就可以了。等待发送完没有必要吧,发送完直接返回程序就可以了
作者: tomli561    时间: 2020-3-27 10:44
game灬boy 发表于 2020-3-26 15:53
写一个定时器;时间设置为你所需要的超时时间;设置定时器中断优先级高于串口中断;在定时器中断服务函数中 ...

不行,我主机并没有在中断函数中实现发送的
作者: tomli561    时间: 2020-3-27 10:46
墨栀 发表于 2020-3-26 17:43
接收到数据的时候会进入中断,这个时候再开始计时就可以了。等待发送完没有必要吧,发送完直接返回程序就可 ...

主要是要对下位机寻址等待呼应,要是呼叫的下位机网络断了,那就卡死在那一直等待对方应答了,应为是用的
while(!TI);来判断TI是否置1的
作者: dzbj    时间: 2020-3-27 12:53
server T0()
作者: dzbj    时间: 2020-3-27 12:55
设置一个计数器并设定最大值 每次呼叫从机时计数器清零 然后查询计数器变化 如果限定值内收到从机应答 计数器清零 如果计数器超时 则从机不存在




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1