51与PC通信协议设计及实现(六):关于串口校验以及串口数据捕获

本文串口内容为转载:源地址

那么用C语言怎么来处理单片机收发的偶校验问题呢?直接使用项目中的要求:波特率:9600,偶检验,停止位1,数据位8。

现在开始:单片机的奇偶校验使用串口工作方式2或者3,在有于波特率要求9600,所以使用串口方式3,这些设置自己查资料解决。

偶校验:就是发送的8个数据位的1的个数为偶数时,TB8=0;为奇数时,TB8=1;

奇校验:与偶校验相反的TB8。

先讲发送字节时的偶校验:

先看下汇编的解决方案是什么:

1 MOV A,@R0
2
3 MOV C,P
4
5 MOV TB8,C
6
7 MOV SBUF,@R0

再看下C语言的解决方案:

 1 void chk_even(uchar dat)//要发送的数据位dat
2
3 {
4
5 ACC=dat;
6
7 TB8=P;
8
9 SBUF=dat;
10
11 while(TI==0);
12
13 TI=0;
14
15 }

奇校验位:

void chk_even(uchar dat)//要发送的数据位dat

{

ACC=dat;

TB8=(~P);

SBUF=dat;

while(TI==0);

TI=0;

}

关于C语言的接受数据偶校验如下:

void chk_even(uchar dat)//要接收的数据位dat

{

   while(RI==0);

    RI=0;

    dat=SBUF;

    ACC=dat;

    if(RB8==P)   chk_flag=0;

    else    chk_flag=1;

    }

关于上位机的串口数据捕获

原文地址:https://www.cnblogs.com/ikesee/p/2410939.html