void crc16_check(void) //
{
unsigned int i,j=1,data3=0x10,data4=0x08,buffl=0xff,buffh=0xff;
unsigned int data1,data2,da_buff,bit_count=64,num0=0x8;
da_buff=rece_data[0];
for(i=bit_count;i>0x00;i--) //
{
data2=0;
data1=0;
if(buffh&0x80)
data1=data1|0x01;
if(num0==0)
{
da_buff=rece_data[j++];
num0=0x08;
}
if(da_buff&0x80)
{
da_buff=da_buff<<1;
num0--;
data2=data2|0x01;
}
else
{
da_buff=da_buff<<1;
num0--;
data2=data2&0xfe;
}
data1=data1^data2; //異或
if(data1&0x01)
{
buffl=buffl^data3;
buffh=buffh^data4;
}
buffh=buffh<<1;
if(buffl&0x80)
buffh=0x01|buffh;
buffl=buffl<<1;
buffl=buffl|data1;
buffh=buffh&0x00ff;
buffl=buffl&0x00ff;
} //校驗完畢
} |