打印
[AVR单片机]

串口协议解析

[复制链接]
6417|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ic_ic|  楼主 | 2008-3-1 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在使用AVR单片机做一个串口的产品,主要做协议解析,通信协议大概有10条,组成为:包头(2个字节)+命令(2-5个字节)+数据(1-16个字节)+包尾(2个字节)
最小的包7个字节,最大包25字节,通信波特率38400,
现在初步设想的解析方法为:串口中断中执行(解析包头+解析包尾),收到一个完整的包后置标志位,主程序中在判断具体的包中的命令和数据,不知这样是否合理,大虾指点!!  
如果整个包的解析否放在中断中,中断服务程序可能过大,我怕中断时间过长,处理不过来。。。。

相关帖子

沙发
zhiwei| | 2008-3-1 23:01 | 只看该作者

中断和处理程序配合

接收中断执行帧头判断(帧同步)和数据接收。帧结束由应用程序超时来判断。

使用特权

评论回复
板凳
jy6715| | 2008-3-4 08:24 | 只看该作者

如果是对多机的

应该是:包头(两字节)-设备地址(两字节)-命令字(两字节)-文本长度(一字节)-文本内容(N字节)-校验和(三字节)-包尾。不知LZ使用什么型号的AVR,感觉你的波特率太高了点!

使用特权

评论回复
地板
真水无香| | 2008-3-5 09:11 | 只看该作者

请教楼上一个问题

如果 校验和的内容 跟 包尾 内容的相同的话 
您的接收端如何处理的?会不会接收错误呢?

使用特权

评论回复
5
dai_weis| | 2008-3-5 13:06 | 只看该作者

不知道你的串口通讯是仅仅限于AVR之间还是其他

要是仅仅AVR的话可以用9位通讯,第九位是标志位,第九位置1则表示报文开始,后面跟着其他内容,例如地址,长度,校验值等

使用特权

评论回复
6
end2000| | 2008-3-5 20:39 | 只看该作者

不要在串口中断去解析包

不要在串口中断去解析包,让它接收数据即可。把收到的(好的)数据放在一个缓存中,在主程序中用状态机来处理这个字符流。或者你看看OSI/ISO模型自己琢磨。

使用特权

评论回复
7
mohanwei| | 2008-3-5 21:15 | 只看该作者

如果数据帧采用转义机制确保包头包尾的唯一性

可以而且应该在串口中断里判断一下。

使用特权

评论回复
8
john_light| | 2008-3-6 08:18 | 只看该作者

中断服务中使用 状态机 收/发

主程序 对接收到的 完整包 进行 分析 并 生成回应包。

使用特权

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

本版积分规则

5

主题

76

帖子

0

粉丝