?? main.lst
字號:
C51 COMPILER V7.06 MAIN 10/23/2006 20:52:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <stdio.h>
2 #include <absacc.h>
3 #include <intrins.h>
4 #include <./Atmel/at89x52.h>
5 #include "source.h"
6 extern uint bit_crc(uchar *ptr, uchar len);
7 extern uint byte_crc(uchar *ptr, uchar len);
8 extern uint halfbyte_crc(unsigned char* pData, uint nLength);
9 CRCREGS regs;
10 /* 8字節(jié)測試數(shù)據(jù) */
11 uchar testdata[8]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
12 /* 主程序 */
13 void main()
14 {
15 1 uchar len;
16 1 uint crc_bit;
17 1 uint crc_byte;
18 1 uint crc_halfbyte;
19 1
20 1 len = 8;
21 1 crc_bit = bit_crc(testdata,len); // 調(diào)用按位求CRC子函數(shù)
22 1 crc_byte = byte_crc(testdata,len); // 調(diào)用按字節(jié)查表求CRC子函數(shù)
23 1 crc_halfbyte = halfbyte_crc(testdata,len); // 調(diào)用按半字節(jié)查表求CRC子函數(shù)
24 1
25 1 while(1);
26 1 }
27
28 uint byte_crc(uchar *ptr, uchar len)
29 {
30 1 uint crc;
31 1 uchar da;
32 1
33 1 /* CRC 余式表 */
34 1 uint xdata crc_ta[256]=
35 1 {
36 1 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
37 1 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
38 1 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
39 1 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
40 1 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
41 1 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
42 1 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
43 1 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
44 1 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
45 1 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
46 1 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
47 1 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
48 1 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
49 1 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
50 1 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
51 1 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
52 1 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
53 1 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
54 1 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
55 1 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
C51 COMPILER V7.06 MAIN 10/23/2006 20:52:15 PAGE 2
56 1 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
57 1 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
58 1 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
59 1 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
60 1 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
61 1 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
62 1 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
63 1 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
64 1 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
65 1 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
66 1 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
67 1 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
68 1 };
69 1 crc = 0;
70 1 while(len--!=0)
71 1 {
72 2 da=(uchar) (crc/256); // 以8位二進制數(shù)的形式暫存CRC的高8位
73 2 crc<<=8; // 左移8位,相當于CRC的低8位乘以2的8次方
74 2 crc^=crc_ta[da^*ptr]; /* 高8位和當前字節(jié)相加后再查表求CRC,再加上以前的CRC */
75 2 ptr++;
76 2 }
77 1 return(crc);
78 1 }
79
80 void crcInitRegisters()
81 {
82 1 regs.val = 0xffff;
83 1 }
84 // CRC輸入一個bit
85 void crcInputBit(bit in)
86 {
87 1 bit a;
88 1 a = regs.bits.bit0 ^ in;
89 1 regs.bits.bit0 = regs.bits.bit1;
90 1 regs.bits.bit1 = regs.bits.bit2;
91 1 regs.bits.bit2 = regs.bits.bit3;
92 1 regs.bits.bit3 = regs.bits.bit4 ^ a;
93 1 regs.bits.bit4 = regs.bits.bit5;
94 1 regs.bits.bit5 = regs.bits.bit6;
95 1 regs.bits.bit6 = regs.bits.bit7;
96 1 regs.bits.bit7 = regs.bits.bit8;
97 1 regs.bits.bit8 = regs.bits.bit9;
98 1 regs.bits.bit9 = regs.bits.bit10;
99 1 regs.bits.bit10 = regs.bits.bit11 ^ a;
100 1 regs.bits.bit11 = regs.bits.bit12;
101 1 regs.bits.bit12 = regs.bits.bit13;
102 1 regs.bits.bit13 = regs.bits.bit14;
103 1 regs.bits.bit14 = regs.bits.bit15;
104 1 regs.bits.bit15 = a;
105 1 }
106 // 輸出CRC碼(寄存器組的值)
107 uint crcGetRegisters( )
108 {
109 1 return regs.val;
110 1 }
111 uint bit_crc(uchar *ptr, uchar len){
112 1 uint ret;
113 1 uchar i,j,temp;
114 1 crcInitRegisters();
115 1 for(i=0;i<len;i++){
116 2 temp=*(ptr+i);
117 2 for(j=0;j<8;j++){
C51 COMPILER V7.06 MAIN 10/23/2006 20:52:15 PAGE 3
118 3 if(temp&0x80) crcInputBit(1);
119 3 else crcInputBit(0);
120 3 temp <<=1;
121 3 }
122 2 }
123 1 ret=crcGetRegisters();
124 1 return ret;
125 1 }
126
127 code uint crctab16[] =
128 {
129 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
130 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
131 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
132 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
133 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
134 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
135 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
136 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
137 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
138 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
139 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
140 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
141 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
142 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
143 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
144 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
145 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
146 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
147 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
148 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
149 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
150 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
151 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
152 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
153 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
154 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
155 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
156 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
157 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
158 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
159 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
160 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78,
161 };
162
163 uint halfbyte_crc(unsigned char* pData, uint nLength)
164 {
165 1 uint fcs = 0xffff; // 初始化
166 1 while(nLength>0)
167 1 {
168 2 fcs = (fcs >> 8) ^ crctab16[(fcs ^ *pData) & 0xff];
169 2 nLength--;
170 2 pData++;
171 2 }
172 1 return ~fcs; // 取反
173 1 }
174
175
176
177
178
C51 COMPILER V7.06 MAIN 10/23/2006 20:52:15 PAGE 4
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 822 ----
CONSTANT SIZE = 1024 ----
XDATA SIZE = ---- 512
PDATA SIZE = ---- ----
DATA SIZE = 10 22
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -