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

}

}

MOV A,#待发数据 数据进了A,即刻生成校验位P

MOV C,P

MOV TB8, C 校验位送到TB8

MOV SBUF, A 发送数据,以及P

上述写法,是偶校验。奇校验,需要增加一条取反指令,如下:

MOV C,P

CPL C

MOV TB8, C 校验位送到TB8

A列为15位公民身份号码,B列{=IF(OR(A3="",LEN(A3)<>15),"",LEFT(A3,6)&"19"&MID(A3,7,6)&RIGHT(A3,3)&LOOKUP(MOD(SUM(MID(LEFT(A3,6)&"19"&MID(A3,7,6)&RIGHT(A3,3),ROW(INDIRECT("$1:$17")),1)*MOD(2^(18-ROW(INDIRECT("$1:$17"))),11)),11),{0,1,2,3,4,5,6,7,8,9,10},{1,0,"X",9,8,7,6,5,4,3,2}))}(数组公式)。你试一下!此公式目前对1900年1月1日出生的人正确,对18??年出生的不对。


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

原文地址:https://54852.com/yw/12198501.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存