📄 !crc16table.c
字号:
/******************************************
*功能: 生成反相CRC-CCITT校验码表
*多项式: 反相CRC-CCITT= 0x8408
*输出: 反向输出,即先输出低位
*CRC初值: 0x00
*创建日期:2006.06.23
******************************************/
#define uchar unsigned char
#define uint unsigned int
uint xdata crcbuff [256]; //存储生成的CRC码表
//生成一个无符号字符型数据的反相CRC码,写法1
/*************************************************************
*函数名称:生成一个数据字节的反相CRC-CCITT码
*函数参数:Data-----待进行反相CRC-CCITT计算的数据
*局部变量:crc------计算后的反相CRC-CCITT数据
i--------用于一个数据反相CRC-CCITT计算结束旗标
* 程序(1),(2),(3) 可以理解成移位前crc 的Bit0 与数据
* 对应的Bit(Data&i)做XOR 运算,根据此结果来决定是否执行
* crc^=0x8408。只要明白两次异或运算与原值相同,就不难
* 理解这个程序。
*************************************************************/
/*uint crc16r(uint Data)
{
uint crc=0; // CRC 码
unsigned char i;
for(i=0x01;i!=0;i <<= 1)
{
if((crc&0x0001)!=0)
{
crc >>= 1; //(1)
crc ^= 0x8408;
}
else
{
crc >>= 1; //(2)
}
if((Data&i)!=0) //依次判断数据的每一位是否为1,从低位开始
{
crc ^= 0x8408; //(3)
}
}
return(crc);
/*************************************************************
(1),(2),(3)表示只有当CRC的最低位和Data的最低位相异时,CRC才
与生成多项式异或因为二次异或的结果与 原值(即未异或)相同
*************************************************************/
//}
//生成一个无符号字符型数据的反相CRC码,写法2
/*************************************************************
*函数名称:反相CRC-CCITT码表生成子程序
*函数参数:Data----待生成反相CRC-CCITT码的数据
*局部变量:i-------反相CRC-CCITT计算完成判断
crc-----计算结束得到的反相CRC-CCITT码
*************************************************************/
uint crc16r(uint Data) //Data为进行CRC校验的数据字节
{
uchar i;
uint crc=0; // CRC 码
for(i=8; i!=0; i--)
{
/*************************************************************
* 只有当CRC的最低位和Data的最低位相异时,CRC才与生成多项式异或
*************************************************************/
if(((Data^crc)&0x0001) != 0)//CRC的最低位和Data的最低位相异
{
crc>>=1; //CRC右移一位然后和生成多项式异或
crc^=0x8408;
}
else //CRC的最低位和Data的最低位相同
{
crc>>=1;
}
Data>>=1; //数据右移一位,以便由低到高逐位判断Data的每一位
}
return(crc);
}
void main(void)
{
uint Count;
for(Count=0;Count<256;Count++)
{
crcbuff[Count]=crc16r(Count);
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -