📄 crc16.lst
字号:
C51 COMPILER V7.09 CRC16 09/11/2007 09:30:28 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE CRC16
OBJECT MODULE PLACED IN crc16.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE crc16.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "typedef.h"
3 #include "crc16.h"
4
5 #define POLYNOMIAL 0x8408 /*x^16+x^12+x^5+1*/
6 #define PRESET_VALUE 0xFFFF
7 #define CHECK_VALUE 0xF0B8
8 #define CALC_CRC 1
9 #define CHECK_CRC 0
10
11 uchar code tab1[16]={0x00,0x08,0x04,0x0c,0x02,0x0a,0x06,0x0e ,0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f};
12
13
14 WORD crc16Calculate(BYTE idata * pBuf,BYTE byLen)
15 {
16 1 unsigned int current_crc_value;
17 1 BYTE i,j;
18 1 current_crc_value = PRESET_VALUE;
19 1 for(i=0;i<byLen;i++)
20 1 {
21 2 current_crc_value = current_crc_value^pBuf[i];
22 2 for(j=0;j<8;j++)
23 2 {
24 3 if(current_crc_value & 0x0001)
25 3 {
26 4 current_crc_value = (current_crc_value>>1)^POLYNOMIAL;
27 4 }
28 3 else
29 3 {
30 4 current_crc_value = (current_crc_value>>1);
31 4 }
32 3 }
33 2 }
34 1 current_crc_value = ~current_crc_value; //?????
35 1 return(current_crc_value);
36 1 }
37 /******************************************************/
38 bit chkCRC(BYTE idata * cBuf,BYTE cLen)
39 {
40 1 bit flag =1;
41 1 uchar i;
42 1 uint j;
43 1 for(i=0;i<cLen;i++) { cBuf[i] = ReflectBYTE(cBuf[i]); }
44 1 j = crc16Calculate(cBuf,cLen-2);
45 1 flag = (cBuf[cLen-2] == LOBYTE(j) ); //crc LSByte
46 1 flag &= (cBuf[cLen-1] == HIBYTE(j) ); //crc MSByte
47 1 return(flag);
48 1 }
49 /*
50 bit chkCRC_re(BYTE idata * cBuf,BYTE cLen)
51 {
52 bit flag=1 ;
53 uint j;
54 j = ~ crc16Calculate(cBuf,cLen-2);
55 flag = (cBuf[cLen-2] == LOBYTE(j) ); //crc MSByte
C51 COMPILER V7.09 CRC16 09/11/2007 09:30:28 PAGE 2
56 flag &= (cBuf[cLen-1] == HIBYTE(j) ); //crc LSByte
57 return(flag);
58 }
59 */
60 BYTE ReflectBYTE(BYTE byOrg)
61 {
62 1 BYTE j,k;
63 1 j = byOrg & 0x0f;
64 1 j = tab1[j];
65 1 j = j<<4;
66 1 k = byOrg>>4;
67 1 k = tab1[k];
68 1 j = j + k;
69 1 return(j);
70 1 }
71 /******************************************************/
72
73
74
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 172 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -