如何编写自己的串口通讯协议
所谓的串口通信协议,其实,就是串口通信时,相互的一种联系方式。 至于内容完全可以根据自己的需要来制定。包括:首先确定波特率,是否有奇偶校验,一般都不用,比较麻烦,但可以加一个字节的校验和或校验字。其次,多机通信时,要确定每个机器的地址,双机通信就不用了。然后是联系方式,即通信时,是否用握手信息,互相交换联系信号,为了加密,还可以交换密码。 最简单的就是:发一帧数据时用几个字节,带不带校验和,起始字节是什么,结束字节是什么,关键的命令字是什么,数据字节是什么。命令字表示什么动作,数据表示状态。反正都是自己确定的,怎么编写协议都 行的。
下面以一个例程来做说明: ARDUINO 代码复制打印 int incomingByte = 0;// 接收到的 data byteString inputString = ""; // 用来储存接收到的内容boolean newLineReceived = false; // 前一次数据结束标志 void setup() {Serial.begin(9600); //设定通讯端口及速率}void loop() { if (newLineReceived) { Serial.print(inputString);// 这里只是简单的将它打出来了,你可以根据自己的要求来用你接收到的数据...... inputString = ""; // clear the string newLineReceived = false; ........//其他你的程序 }} //serialEvent()是IDE1.0及以后版本新增的功能,不清楚为什么大部份人不愿意用,这个可是相当于中断功能一样的啊! void serialEvent(){while (Serial.available()) {incomingByte = Serial.read();//一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包inputString += (char) incomingByte; // 全双工串口可以不用在下面加延时,半双工则要加的//// 下面就是所谓的通讯协议了,如果接收到了换行符号,本例是定义了这次串口通讯数据接收结束// // 其他的你还可以加一些规则,比如数据包起始位,规定一个数据包就是以FF为开头的,如果不是就不接收// // 也可以加上数据校验位,同样在这里做一个校验判断,如果不符合,则将数据包丢掉,再通过一个标志位写个值,// //在主程序里面让发送方重发(主程序里面都写一条IF就行了)//if (incomingByte == 'n') { newLineReceived = true; }}}

单线通讯:通讯协议如图所示,根据协议写一段数据发送和接收程序。
1)需要一个串口通信用软件,比如Commix软件。2)需要有PC机与外部设备通信的数据线(两头都是母接口的9针RS232口),并连接好PC机和外部设备。3)需要有与外部设备的通信协议和指令,设置好PC机的COM口号,波特率,数据位,检验位等参数,打开串口后,按通信协议规约的指令在窗口输入指令,点发送。如果对就能从接收数据窗接收外部设备返回的数据。

有哪位大哥能给我讲讲MODBUS通讯协议,不知道应该怎么写,网上搜来的资料看了有点懵,(
MODBUS 组成: 站号 功能码 寄存器起始地址 寄存器数量 CRC (共8个字节)例: 01 01 00 01 00 04 CRCH CRCL01: 从站站号为101:读线圈00 01:从寄存器1开始读00 04: 读4个线圈CRCH CRCL:CRC校验字节具体的请参考附件!
百度文库 里有 很多 modbus 文档 搜来看看

如何编写自己的串口通讯协议
下面以一个例程来做说明: ARDUINO 代码复制打印 int incomingByte = 0;// 接收到的 data byteString inputString = ""; // 用来储存接收到的内容boolean newLineReceived = false; // 前一次数据结束标志 void setup() {Serial.begin(9600); //设定通讯端口及速率}void loop() { if (newLineReceived) { Serial.print(inputString);// 这里只是简单的将它打出来了,你可以根据自己的要求来用你接收到的数据...... inputString = ""; // clear the string newLineReceived = false; ........//其他你的程序 }} //serialEvent()是IDE1.0及以后版本新增的功能,不清楚为什么大部份人不愿意用,这个可是相当于中断功能一样的啊! void serialEvent(){while (Serial.available()) {incomingByte = Serial.read();//一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包inputString += (char) incomingByte; // 全双工串口可以不用在下面加延时,半双工则要加的//// 下面就是所谓的通讯协议了,如果接收到了换行符号,本例是定义了这次串口通讯数据接收结束// // 其他的你还可以加一些规则,比如数据包起始位,规定一个数据包就是以FF为开头的,如果不是就不接收// // 也可以加上数据校验位,同样在这里做一个校验判断,如果不符合,则将数据包丢掉,再通过一个标志位写个值,// //在主程序里面让发送方重发(主程序里面都写一条IF就行了)//if (incomingByte == 'n') { newLineReceived = true; }}}
多看看modbus 协议的文档

51单片机485通讯协议怎么写 有代码最好
所谓通讯协议只是一种约定,如果都是 自己做的系统,只要自己定制一个就可以了, 如果与 其它 系统 通讯 ,则需要 知道 其通讯协议内容,如 一个简单的 通讯协议 控制指令发送01H代表 打开开关发送02H代表 关闭开关则 发送端 发了 01H接收端 收到 01H 就控制打开开关发送端 发了 02H接收端 收到 02H 就控制关闭开关这感觉很简单,在实际应用中 要 考虑 正确性 需要验证, 如红外遥控器指令码与反码接收端判断 指令码与反码比较是否正确。
具体的程序代码 要结合你自己的实际情况编写如需要每次读写多少数据 数据是什么类型的

本文由 在线网速测试 整理编辑,转载请注明出处。