通讯协议怎么写( 四 )


最简单的就是:发一帧数据时用几个字节,带不带校验和,起始字节是什么,结束字节是什么,关键的命令字是什么,数据字节是什么 。命令字表示什么动作,数据表示状态 。
反正都是自己确定的,怎么编写协议都 行的 。
6. 如何编写自己的串口通讯协议 下面以一个例程来做说明:
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; } }}