多机通讯设置TB8

在串口多机通讯中,通过设置第9位TB8区分地址和数据帧。上位机在PC串口没有9位数据位选项时,利用MARKPARITY(TB8=1,地址)和SPACEPARITY(TB8=0,数据)作为校验位来模拟9位数据位。8位数据位的串口数据格式结合校验位实现了TB8的功能,使得从机能够正确识别地址和数据。注意不正确设置可能导致地址校验错误,以及在PC到FPGA转换时注意波特率的一致性。
摘要由CSDN通过智能技术生成

串口多机通讯,上位机如何设置串口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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值