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

}

}

//奇偶校验

//data       要校验的数据起始地址

//length    数据长度,多少字节

//sum        校验码

//mode     校验方式,true:奇校验,false : 偶校验

//返回值     true: 校验成功 false:校验失败

bool CheckSum(char *data,int length,char sum , bool mode)

{

    char tmp=0

    

    for(int i=0i<lengthi++)

    {

        tmp+=*data

        data++

    }

    

    if(mode)

    {

        if(tmp+sum == 1)

        {

            return true

        }

        else

        {

             return false       

        }

    }

    else

    {

        if(tmp+sum == 0)

        {

             return true

        }

        else

        {

              return false       

        }

    }

}

呵呵,在这两条指令的前后,你各忽略了一条指令。请看下列程序及说明:

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

MOVC,P

MOVTB8,C校验位送到TB8

MOVSBUF,A发送数据,以及P

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

MOVC,P

CPLC

MOVTB8,C校验位送到TB8

就这些。


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

原文地址: http://outofmemory.cn/yw/11553187.html

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

发表评论

登录后才能评论

评论列表(0条)

保存