#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
就这些。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)