1单片机的多机通讯一般是主机和下位机都是用单片机。通讯模式为主机发送查询命令给下位机,目标下位机返回预期的数据。发送数据时,tb8置1,发送地址字节,然后,置tb8为0,发送剩余的数据。准备接收时,置sm2 =1,当有数据接收时,如果rb8=1,说明收到的字节是地址,(从机)应该把该字节与自己的地址对比,如果一致,则置sm2=0,准备接收随后的数据字节,否则,继续保持sm2=1。
2 针对主机为pc机的情况,没有tb8这样的称呼,但是可以使用串口的奇偶校验位代替,即parity=mark,表示tb8=1,parity=space,表示tb8=0。
举例:PC机发送 48 02 55 01 48 d4 //48 设备地址,02 数据长度, 55 01 指定的控制数据,48 d4 crc16校验
返回:48 06 01 00 00 00 00 00 22 4c
串口参数设置校验位MARKPARITY,发送第一个字节: 地址01;延时5ms, 然后串口参数设置校验位SPACEPARITY,发送后续字节;
写串口的核心部分代码如下(本代码使用同步方式读写串口,难度不大,大牛勿喷。其它的部分请参考网络解释)
BYTE cSend[6];
cSend[0] = 0x48;