新闻  |   论坛  |   博客  |   在线研讨会
关于单片机串口通信的奇偶校验(C语言的解决方案)
luker | 2016-02-04 12:42:39    阅读:7424   发布文章

最近做了一个项目,是关于51单片机与计算机之间的通信问题,上位机来控制下位机。 
在通信中要求单字节偶校验,很少碰到在这里校验的,一般都是帧校验就可以了,但是为了提高精度,就加了偶校验。那么用C语言怎么来处理单片机收发的偶校验问题呢?直接使用项目中的要求:波特率:9600,偶检验,停止位1,数据位8。 
现在开始:单片机的奇偶校验使用串口工作方式2或者3,在有于波特率要求9600,所以使用串口方式3,这些设置自己查资料解决。 
偶校验:就是发送的8个数据位的1的个数为偶数时,TB8=0;为奇数时,TB8=1; 奇校验:与偶校验相反的TB8。 先讲发送字节时的偶校验: 先看下汇编的解决方案是什么: MOV A,@R0 MOV C,P MOV TB8,C MOV SBUF,@R0 
再看下C语言的解决方案: 
void chk_even(uchar dat)//要发送的数据位dat { ACC=dat; TB8=P; SBUF=dat; while(TI==0); TI=0; 


这只是发送的一个字节的偶校验 ,接收时的为RB8位,学过的同学应该能看懂,要是还是感觉吃力的话,就继续查资料。(程序中去掉了注释,请大家自己理解,加深印象。) 
关于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; }

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客