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;
}
关于上位机的串口数据捕获