自己编写了一个程序,想生成多项式是8005和A001的表格,8005的好像搞定了,但是A001的怎么都没有弄出来,我的算法是参考网上的一点资料,过程如下:
1.预置1个16位的寄存器(下称CRC寄存器),初试化其内容为十六进制数0xFFFF;
2.把第一个待计算的数据即通讯信息帧的首字节与CRC寄存器的低8位相异或,把结果放回CRC寄存器;
3.把CRC寄存器的内容右移一位用0填补最高位即进行逻辑移位处理并检查右移后的移出位;
4.如果移出位为0重复第3步即再次右移一位,如果移出位为1则CRC寄存器与CRC生成多项式0xA001(1010 0000 0000 0001)进行异或运算,结果放回CRC寄存器;
5.重复步骤3和4,直到右移8次,对整个8位数据全部进行同样处理;
6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
我的程序如下:
void crc_init (void)
{
unsigned short mask, bit, crc, temp;
crc=0xffff;
for( mask = 0; mask < 0x100; mask++ )
{
crc = mask^crc;
for( bit = 0; bit < 8; bit++ )
{
temp = crc & 0x0001 ;
crc >>= 1;
if ( temp != 0 ) crc ^= POLY_CRC16 ;
}
TABLE[mask] = crc;
}
}
但是出来的,好像和结果是不同的,有没有高人帮我看下啊,还有,有没有标准的CRC16两种多项式表格下载,多谢多谢! |