高诉你我的方法 应该算第二种加第三种吧;
我一般一组数据是这么定义的%01#WD0000+异或和校验+回车
%是起始附说明一组数据开始
01是站号;就是比如你用485多机通信时可以用
WD是命令;执行什么命令;
异或和:校验,防止传错;
回车:结束符,一组数据结束;
1.就是先建一个缓冲器Buffer[];多大看你接受的一组数据最大多大;
2.在串口中断中一帧一帧的接受;Buffer[i++]=SBUF;
3.如果Buffer[0]='%',则接着往下收;否则i清零;
4.如果Buffer[i]=回车,说明结束了;把Buffer[]拷贝给INBuffer[];
5.这里一定要清空Buffer,不然会溢出;
6.给个接收一组数据完成标志;当外面的UART接收处理子程序收到,则进行分割处理
7.千万别把分割处理回复放在中断中,不然可能会影响你的发送和接收,中断要短小精悍!!!
用我的方法去做吧,肯定对,做过很多次了
至于发送一组会的吧,不多说了
记住还要加输入数据异或和检验,错误则丢弃那组数据!
输出数据加异或和;切记
做工控要想到方方面面,不能认为单片机不会出错···
就这样吧,希望对你有帮组,不懂留言 |