vb与单片机通讯问题

用vb编写上位机软件与下位机单片机串口多机通讯。单片机的P0口接8个继电器,P1;P2口是按键输入口,上位机要实时显示下位机的P0;P1;P2口状态,并且上位机还要控制下位机的P0口的8个继电器。我的想法是这样的:上位机vb中用一个定时器,每隔一段时间就发送一次数据给下位机,数据格式是:01010000 00000001 00000000 共3个字节,第一个字节的高4位为通讯开始的标识,低四位用于奇偶校验(不知道这样做奇偶校验行不),第二字节为命令位,单片机通过此数据位来执行不同的过程,第三字节为数据位,就是单片机要执行的数据。第四字节为地址位,就是下位机的地址。单片机接收完这3个字节程序后先检测第一字节的高4位是否满足通讯开始标识,满足就继续下一步,然后对数据进行奇偶校验与第一字节的第四位奇偶校验位比较,如果数据正确继续下一步,比较地址位,如果地址是本机地址继续下一步,分析命令位,根据命令来执行数据或上传P0'P1'P2口状态给上位机。上位机vb接收到下位机的数据后进行校验和显示处理。我的这种构思想法是否可行?还有我的奇偶校验方法是否可行?我没有用到TB8 RB8,而是把奇偶校验当做一个字节数据发给单片机的,不是通过TB8 RB8来发送奇偶校验的。
01010000 00000001 00000000 00000000共四个字节。不是三个字节

可以做到,我觉得,如果你有了想法在有条件的情况下,先做,遇到问题在想去问别人。在自己做的过程中可以学到很多经验,从来得到更适合自己的方法。
1,奇偶校验方法,建议使用TB8,RB8,如果你要放到字节里,也不是不可以,但在计算的时候,不能计算奇偶校验位本身。这样做的画可以考虑真个数据包一起效验。
2,建议通讯地址放在通讯开始标识后面,这样从机反映会可以做快些。
3,不管多简单的协议,建议都有,开始标志,地址,命令,长度,数据,效验,结束标志。
哪怕是一个数据位都可以,这样,比较有调理点,会减少很多数据误传的问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-28
个人建议,你这样的做法我不太同意,你要发送控制指令最好弄个协议什么的,就是说上位机发送FF 01 03 04 FF做为同步码 01为地址码 03 为控制指令 04为前三个数加起来求余码,这样防止发错数的时候乱控,上位机要及时获取下位机的数据那就加个定时器,过一段时候给下位机一个指令让下位机把P0 P1 P2 的状态发到上位机来。这样我觉的好一点,你的那种做法不太好
相似回答