📄 !crc16table.lst
字号:
C51 COMPILER V7.50 _CRC16TABLE 06/23/2006 11:31:11 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE _CRC16TABLE
OBJECT MODULE PLACED IN !crc16table.OBJ
COMPILER INVOKED BY: D:\Program files\Keil\C51\BIN\C51.EXE !crc16table.c OPTIMIZE(3,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************
2 *功能: 生成反相CRC-CCITT校验码表
3 *多项式: 反相CRC-CCITT= 0x8408
4 *输出: 反向输出,即先输出低位
5 *CRC初值: 0x00
6 *创建日期:2006.06.23
7 ******************************************/
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 uint xdata crcbuff [256]; //存储生成的CRC码表
12
13 //生成一个无符号字符型数据的反相CRC码,写法1
14 /*************************************************************
15 *函数名称:生成一个数据字节的反相CRC-CCITT码
16 *函数参数:Data-----待进行反相CRC-CCITT计算的数据
17 *局部变量:crc------计算后的反相CRC-CCITT数据
18 i--------用于一个数据反相CRC-CCITT计算结束旗标
19 * 程序(1),(2),(3) 可以理解成移位前crc 的Bit0 与数据
20 * 对应的Bit(Data&i)做XOR 运算,根据此结果来决定是否执行
21 * crc^=0x8408。只要明白两次异或运算与原值相同,就不难
22 * 理解这个程序。
23 *************************************************************/
24 /*uint crc16r(uint Data)
25 {
26 uint crc=0; // CRC 码
27 unsigned char i;
28 for(i=0x01;i!=0;i <<= 1)
29 {
30 if((crc&0x0001)!=0)
31 {
32 crc >>= 1; //(1)
33 crc ^= 0x8408;
34 }
35 else
36 {
37 crc >>= 1; //(2)
38 }
39 if((Data&i)!=0) //依次判断数据的每一位是否为1,从低位开始
40 {
41 crc ^= 0x8408; //(3)
42 }
43 }
44 return(crc);
45 /*************************************************************
46 (1),(2),(3)表示只有当CRC的最低位和Data的最低位相异时,CRC才
47 与生成多项式异或因为二次异或的结果与 原值(即未异或)相同
48 *************************************************************/
49 //}
50
51 //生成一个无符号字符型数据的反相CRC码,写法2
52 /*************************************************************
53 *函数名称:反相CRC-CCITT码表生成子程序
54 *函数参数:Data----待生成反相CRC-CCITT码的数据
55 *局部变量:i-------反相CRC-CCITT计算完成判断
C51 COMPILER V7.50 _CRC16TABLE 06/23/2006 11:31:11 PAGE 2
56 crc-----计算结束得到的反相CRC-CCITT码
57 *************************************************************/
58 uint crc16r(uint Data) //Data为进行CRC校验的数据字节
59 {
60 1 uchar i;
61 1 uint crc=0; // CRC 码
62 1 //Data=;
63 1 for(i=8; i!=0; i--)
64 1 {
65 2 /*************************************************************
66 2 * 只有当CRC的最低位和Data的最低位相异时,CRC才与生成多项式异或
67 2 *************************************************************/
68 2 if(((Data^crc)&0x0001) != 0)//CRC的最低位和Data的最低位相异
69 2 {
70 3 crc>>=1; //CRC右移一位然后和生成多项式异或
71 3 crc^=0x8408;
72 3 }
73 2 else //CRC的最低位和Data的最低位相同
74 2 {
75 3 crc>>=1;
76 3 }
77 2 Data>>=1; //数据右移一位,以便由低到高逐位判断Data的每一位
78 2
79 2 }
80 1 return(crc);
81 1 }
82
83 void main(void)
84 {
85 1 uint Count;
86 1 for(Count=0;Count<256;Count++)
87 1 {
88 2 crcbuff[Count]=crc16r(Count);
89 2 }
90 1 while(1);
91 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 137 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 512 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -