写在前面,常见的情况
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日
本文详细介绍了如何处理7位数据位加偶校验的情况,包括初始化、数据处理和发送。通过提供代码示例,展示了如何计算并添加校验位,以确保数据传输的准确性。

3271

被折叠的 条评论
为什么被折叠?



