串口多机通讯,上位机如何设置串口9位数据位/TB8
先贴一下多机通讯的定义:
主机要发送一数据块给某一从机时,它先发送一个地址字节,称为地址帧,它的第9位是“1”,此时各从机的串行口接收到第9 位(RB8) 都为1,则置中断标志RI 为“1”,这样使每一台从机都检查一下所接收的地址是否与本机相符。若为本机地址,则清除SM2,而其余从机保持SM2=1状态。接下来主机发送数据,称为数据帧,它的第9 位为“0”,各从机接收到的RB8 为“0”。因此,只有与主机联系上的从机(此时SM2=0) 才会置中断标志RI 为“1”,接收主机的数据,从而实现与主机的通信。其余从机则因为SM2=1,且第9 位RB8=0,不满足数据接收条件,从机不会发生中断,而将所接收的数据丢弃。–百度百科。
问题描述:
常用的串口数据位设置只有5~8位,但对于多机通讯要求9位数据位,即要求通过设置第九位TB8(百科上是RB8)区分地址与数据的发送。而PC设置串口没有9位数据位,则要通过设置校验位来让从机区分,检验方式设置MARKPARITY(校验位置1,等同于TB8置1)时发送从机地址,检验方式改为设置SPACEPARITY(校验位置0,等同于TB8置0)发送指令及数据。
一般8位数据位的串口发送的数据格式是:1位起始位,8位数据位,1位校验位,1位停止位。从机读取到TB8正好也就是读取到校验位,也就是将校验位当作第九位数据位处理。于是解决了数据位没有9位的问题。
@Dr.koh
//用QT写的代码,样式样式
//设置串口校验方式为MARK
port->setParity(QSerialPort::MarkParity);
while(port->parity() == QSerialPort