STC12单片机串口3模式,加奇偶校验
本帖最后由 ——白起—— 于 2018-2-28 16:48 编辑/*********************************************************************************
* 函数名 :InitUART_0
* 功能 :初始化串口0
* 说明 :
* 入参 :
* 返回 :
* 设计 :武安君 时间 :
**********************************************************************************/
void InitUART_0(void)
{
#defineBPS_4800 0XF4
#defineBPS_9600 0XFA
#defineBPS_19200 0XFD
TMOD |= 0x20; // 定时器1方式 2
SCON= 0xD0; // 串口工作 方式 3
TH1 = BPS_9600;// 定时器1初值
TL1 = TH1; // -----------
PCON= 0x00; // 波特率加倍,00:不加倍 80:加倍
ES = 1; // 串口收发使能
TR1 = 1; // 开启定时器1
}
uint8_tDD_2[] = "123456789\r\n";
for (i = 0; i < sizeof(DD_1); i++)
{
ACC = DD_1;
TB8 = P;
SBUF = DD_1;
while(!TI);
TI = 0;
}
设置串口为模式3 8位数据1位校验for循环不断发送,但是调串口猎人的奇校验、偶校验、无校验。都没有出现乱码。这个TB8到底怎么用,求大神指点
TB8在方式2或方式3,是发射的第9位数据,作为奇偶校验位或地址帧/数据帧的标志位。
根你的接到要怎么处理有关,你的那个软件只负责收,我想TB8并没有理会。 有没有那位攻城狮指点一下
还真没用过奇偶校验的 kankan 一样的问题,按网上查到的方法,SBUF = ACC(STC的官方例程也是这么写的),但是收到的数据只有第一个字节正确,后面的字节全是0x80。于是改为SBUF = dat;这次收到的数据正常了,但是跟LZ一样的问题,不管接收的时候选择什么校验方式,无论奇、偶、MARK、SPACE都能正常接收,只有设为无校验的时候才会收到乱码。以为是串口调试助手的问题,于是换了很多种串口调试助手,全这样。难道这些串口调试助手全都没有处理第9位数据吗? 岛上称霸 发表于 2023-3-20 09:43
我之前也试过其实很多串口助手都不会去处理第九位数据的,实际上在通信的时候,你用示波器抓一下数据,能 ...
嗯,第九位数据确实存在,如果我在调试软件上设置为8位数据,无校验,收到的就会是乱码。但如果设为除了无校验以外的其他任何校验方式,收发数据都完全正常。也就是第九位数据虽然串口进行了收发,但软件这块并没有对第九位数据按要求进行验证。串口硬件这块,对于第九位数据,也没有做任何处理,这就导致了第九位数据完全成了摆设。只是感觉奇怪,似乎所有的串口收发软件全是这样处理的。
另外,今天我使用CH32V103C8T6的USART1进行了一下验证,USART1设置为9位数据,ODD校验,进行通讯测试的时候,也是同样的现象,只有在我把串口调试软件的校验方式设为无校验的时候才会出错。其他无论设为哪种校验方式,均可以正常收发。
页:
[1]