找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机串口通信超时处理

[复制链接]
跳转到指定楼层
楼主
ID:508562 发表于 2020-3-26 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在在做一个状态机控制器,想让控制器能够通过发送下位机的独立地址然后在接收下位机返回的地址来判断下位机是否在线。用while(!TI);来等待发送完毕和while(!RI);等待接收完毕,如果在发送和接收过程中一直没发送或接收完数据那不就一直在死循环里出不来了么,该如何做这里的超时处理,让超过一段时间发送中断标志位没置1就手动置1,退出循环进入下一个字节发送?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:367369 发表于 2020-3-26 15:53 | 只看该作者
写一个定时器;时间设置为你所需要的超时时间;设置定时器中断优先级高于串口中断;在定时器中断服务函数中清除标志位TI和RI;
回复

使用道具 举报

板凳
ID:389856 发表于 2020-3-26 17:43 | 只看该作者
接收到数据的时候会进入中断,这个时候再开始计时就可以了。等待发送完没有必要吧,发送完直接返回程序就可以了
回复

使用道具 举报

地板
ID:508562 发表于 2020-3-27 10:44 | 只看该作者
game灬boy 发表于 2020-3-26 15:53
写一个定时器;时间设置为你所需要的超时时间;设置定时器中断优先级高于串口中断;在定时器中断服务函数中 ...

不行,我主机并没有在中断函数中实现发送的
回复

使用道具 举报

5#
ID:508562 发表于 2020-3-27 10:46 | 只看该作者
墨栀 发表于 2020-3-26 17:43
接收到数据的时候会进入中断,这个时候再开始计时就可以了。等待发送完没有必要吧,发送完直接返回程序就可 ...

主要是要对下位机寻址等待呼应,要是呼叫的下位机网络断了,那就卡死在那一直等待对方应答了,应为是用的
while(!TI);来判断TI是否置1的
回复

使用道具 举报

6#
ID:47286 发表于 2020-3-27 12:53 | 只看该作者
server T0()
回复

使用道具 举报

7#
ID:47286 发表于 2020-3-27 12:55 | 只看该作者
设置一个计数器并设定最大值 每次呼叫从机时计数器清零 然后查询计数器变化 如果限定值内收到从机应答 计数器清零 如果计数器超时 则从机不存在
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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