⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 !crc16table.lst

📁 一个生成反相CRC-CCITT校验码表的单片机C程序
💻 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 + -