51单片机串口7位偶校验

本文详细介绍了如何处理7位数据位加偶校验的情况,包括初始化、数据处理和发送。通过提供代码示例,展示了如何计算并添加校验位,以确保数据传输的准确性。

写在前面,常见的情况

1、8位不加校验无无需特殊处理。

1、如果是8位加校验比较简单,直接对第九为寄存器赋值(校验结果)即可。注意初始化是需要初始化为9位数据位

2、如果是7位数据位不加校验,则只需要最高位保持为0即可。

本文处理不常用的7位数据位加偶校验,(奇校验同理)

 

思路

先说思路,所谓的7位加偶校验,与8位不校验的不同点是最高位bit7 发送的是校验位。因此只需要对普通的无检验方式的数据最高位bit7进行计算,然后发送即可。

步骤,

1、初始化,初始化部分可以直接使用8位无检验方式进行初始化。直接复制以前的8位无检验代码即可。

2、数据处理,对bit7进行计算,计算出相应的输出结果。代码如下

void TX1_7BitEven(u8 dat)
{
	uint8 xdata i;
	uint8 tmp = 1;
	uint8 xdata cont = 0;
	for( i = 0; i < 8; i++ ){
		if( (tmp<<i) & dat )
			cont++;
	}
	if (cont % 2){
		TX1_write2buff(dat+0x80);
	}else{
		TX1_write2buff(dat);
	}
}

 

3、数据发送、直接使用原有的数据发送函数即可。


void TX1_write2buff(u8 dat)	//写入发送缓冲,指针+1
{

}

4、调用例程

//3A 32 45 30 33 30 30 30 41 30 30 30 31 39 34 0D 0A
            TX1_7BitEven(0x3A);
            TX1_7BitEven(0x32);
            TX1_7BitEven(0x45);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x33);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x41);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x30);
            TX1_7BitEven(0x31);
            TX1_7BitEven(0x39);
            TX1_7BitEven(0x34);
            TX1_7BitEven(0x0D);
            TX1_7BitEven(0x0A);	

 

特此强调,初始化使用普通的初始化即可。  因为实际应用不方便发表完整代码,请理解,如果有疑问可以留言,看到后会及时回答。

防止忘记  BY:anlog

2020年10月13日 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值