51单片机中C语言奇偶校验位如何设置?

51单片机中C语言奇偶校验位如何设置?,第1张

在51单片机中,只要将一个值传送给累加器,这个数的奇偶校验值就会影响P。一般而言,在串行通讯中为确保传输数的准确,用到校验位的情况比较多。以下是程序代码:

#include

main()

{

char dat

TMOD=0x20

TH1=0xfd

TL1=0xfd

TR1=1

SCON=0xd0

while(1)

{

dat++

ACC=dat

TB8=P //校验位送第九数据位TB8

SBUF=ACC

while(TI==0)

TI=0

}

}

设置为奇校验,先看发送方将要发送的一帧数据中有几个1,如果是偶数个1则校验位置1,保证1的个数是奇数。如果是奇数就置0。保证是奇数后发送给接收方,接受方此时要检查发送的数据位是否有误,它检查的方法就是看接受的数据里1的个数,如果发现1的个数是偶数,再看看发送来的校验位是1且模式是奇校验,偶数+1=奇数,判断数据是正确。

例:发送的数据位是01111 0000 ,使校验位置1,让1 有5个(奇数)。

发送到接受方,接受方检查数据位正确性,发现1有4个(偶数),再看校验位是1,4+1=5(奇数)。判断数据正确

设置为偶校验,先看发送方将要发送的一帧数据中有几个1,如果是奇数个1则校验位置1,如果是偶数就置0。保证1的个数是偶数。保证是偶数后发送给接收方,接受方此时要检查发送的数据位是否有误,它检查的方法就是看接受的数据里1的个数,如果发现1的个数是奇数,再看看发送来的校验位是1且模式是偶校验,奇数+1=偶数,判断数据是正确。

例:发送的数据位是01111 1000 ,使校验位置1,让1 有6个(偶数)。

发送到接受方,接受方检查数据位正确性,发现1有5个(奇数),再看校验位是1,5+1=6(偶数)。判断数据正确

设置为1校验,校验位始终为1,接收方接收到数据发现检验位为1就判断数据正确,这种方法简陋。

设置为0校验,校验位始终为0,接收方接收到数据发现检验位为0就判断数据正确,这种方法简陋。

小结:通常用奇偶校验,本质就是判断数据位中1个数+校验位 = 奇数/偶数的方法。

也存在弊端比如用奇校验发送的是0111 0001 ,校验位是1。但到接收方变成1110 0001 ,接受也判断正确,但数据并不相同。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7780680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存