打印

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

[复制链接]
1409|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yzcook|  楼主 | 2019-3-28 14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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波特率下,我觉得确定不了这个时间段的长短,因为数据的长度不一定 可能一条命令就  四五个数据,也有可能几十个数据,如果设定的时间长了,也会影响单片机的反应吧。。

使用特权

评论回复
5
hobbye501| | 2019-3-28 15:57 | 只看该作者
可以用标准的MODBUS  超时就结束了

使用特权

评论回复
6
arm86| | 2019-3-28 16:06 | 只看该作者
yzcook 发表于 2019-3-28 15:41
9600波特率下,我觉得确定不了这个时间段的长短,因为数据的长度不一定 可能一条命令就  四五个数据,也 ...

这和数据长度无关的。
每收到一个字节的数据之后,更新等待时间为 0,然后重新计时。

使用特权

评论回复
7
yzcook|  楼主 | 2019-3-28 16:38 | 只看该作者
arm86 发表于 2019-3-28 16:06
这和数据长度无关的。
每收到一个字节的数据之后,更新等待时间为 0,然后重新计时。 ...

你好,感谢回复,麻烦在请教下,在20ms后 “不来数据” 这个要怎么判断呢。是判断SBUF 这个寄存器吗。如果是的话 应该给SBUF 怎样的判断呢?麻烦了

使用特权

评论回复
8
ayb_ice| | 2019-3-28 17:03 | 只看该作者
yzcook 发表于 2019-3-28 16:38
你好,感谢回复,麻烦在请教下,在20ms后 “不来数据” 这个要怎么判断呢。是判断SBUF 这个寄存器吗。如 ...

搞个变量,每1ms加1,有数据来清零,判断大于20ms则数据包结束

使用特权

评论回复
9
李不走寻常路| | 2019-4-2 08:26 | 只看该作者
arm86 发表于 2019-3-28 16:06
这和数据长度无关的。
每收到一个字节的数据之后,更新等待时间为 0,然后重新计时。 ...

这位仁兄所言甚是

使用特权

评论回复
10
xcvista| | 2019-4-2 13:02 | 只看该作者
我建议同时允许超时命令结束和命令分隔符。超时命令结束适合于串口助手超级终端一类人工操作的场合,命令结束符适合于机器对机器通讯增加吞吐量(上位机软件只要发一个命令结束字符,无需等待就可以接着发下一个命令。)对于人工为主的场合,可以用回车符作为命令结束符。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝