请教一个问题,如何判断串口一条命令的结束

[复制链接]
1990|9
 楼主| yzcook 发表于 2019-3-28 14:17 | 显示全部楼层 |阅读模式
PC通过串口助手发送命令给51单片机,由于命令没有固定的结束符,长度也不固定。
如何判断一条命令接收完成。
麻烦各位解答
ayb_ice 发表于 2019-3-28 15:27 | 显示全部楼层
这当然需要协议,
比如一段时间无数据表示结束了或者通过协议长度来判断
李不走寻常路 发表于 2019-3-28 15:31 | 显示全部楼层
按照你的描述,应该用帧空闲来判断,即一段时间(比如20MS)不来数据,则判断一帧数据结束了。
 楼主| yzcook 发表于 2019-3-28 15:41 | 显示全部楼层
李不走寻常路 发表于 2019-3-28 15:31
按照你的描述,应该用帧空闲来判断,即一段时间(比如20MS)不来数据,则判断一帧数据结束了。 ...

9600波特率下,我觉得确定不了这个时间段的长短,因为数据的长度不一定 可能一条命令就  四五个数据,也有可能几十个数据,如果设定的时间长了,也会影响单片机的反应吧。。
hobbye501 发表于 2019-3-28 15:57 | 显示全部楼层
可以用标准的MODBUS  超时就结束了
arm86 发表于 2019-3-28 16:06 | 显示全部楼层
yzcook 发表于 2019-3-28 15:41
9600波特率下,我觉得确定不了这个时间段的长短,因为数据的长度不一定 可能一条命令就  四五个数据,也 ...

这和数据长度无关的。
每收到一个字节的数据之后,更新等待时间为 0,然后重新计时。
 楼主| yzcook 发表于 2019-3-28 16:38 | 显示全部楼层
arm86 发表于 2019-3-28 16:06
这和数据长度无关的。
每收到一个字节的数据之后,更新等待时间为 0,然后重新计时。 ...

你好,感谢回复,麻烦在请教下,在20ms后 “不来数据” 这个要怎么判断呢。是判断SBUF 这个寄存器吗。如果是的话 应该给SBUF 怎样的判断呢?麻烦了
ayb_ice 发表于 2019-3-28 17:03 | 显示全部楼层
yzcook 发表于 2019-3-28 16:38
你好,感谢回复,麻烦在请教下,在20ms后 “不来数据” 这个要怎么判断呢。是判断SBUF 这个寄存器吗。如 ...

搞个变量,每1ms加1,有数据来清零,判断大于20ms则数据包结束
李不走寻常路 发表于 2019-4-2 08:26 | 显示全部楼层
arm86 发表于 2019-3-28 16:06
这和数据长度无关的。
每收到一个字节的数据之后,更新等待时间为 0,然后重新计时。 ...

这位仁兄所言甚是
xcvista 发表于 2019-4-2 13:02 来自手机 | 显示全部楼层
我建议同时允许超时命令结束和命令分隔符。超时命令结束适合于串口助手超级终端一类人工操作的场合,命令结束符适合于机器对机器通讯增加吞吐量(上位机软件只要发一个命令结束字符,无需等待就可以接着发下一个命令。)对于人工为主的场合,可以用回车符作为命令结束符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部