单线数据7位modbus协议M16实现原理

来源:互联网 发布:加湿器品牌推荐知乎 编辑:程序博客网 时间:2024/04/28 17:56

起因

由于普通UART口需占两个IO,且大部分片子自带的UART是不支持7位数据的通讯方式

实现原因:

    工业应用中有应用模块为单线的MODBUS的总线通信方式,数据大概结构为 
地址命令数据长度数据较验和

通常在最未还添加回车(16进制0x0D 0x0A)来表示数据传输结束


实现目标:

1. 单线通信

2.2400bps, 7, E, 1。2400波特率,7位数据位,偶较验,1位停止位


实现方法:

一、先说串口通信的相关内容

2400的波特率也就是1/2400=417us,也就是每417us发送一个数据,这里所指的数据如下

数据1数据2数据3数据4数据5数据6数据7校验位停止位也就第次发9位的数据,当然还得在头尾加上启始位和终止位


二、再说在M16上如何实现。

modbus通信和串口通信是一样的,只是定义了数据结构能够应用于许多场合,甚至是网络(可以参考下介绍modbus的书籍)

用一个定时器来产生417us和625us的延时。

417us用于发送时决定波特率,625us用于接收时等待一个启始位加半个终止位。至于发送数据就和模拟串口相同。

具体实现可以参考模拟串口的实现。


三、校验和的计算可以参考我的上一篇文章

C#实现modbus基于ASCII的LRC校验


四、调试

硬件的调试可以用示波器结合串口工具观察