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

📄 main.lst

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 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字节测试数据 */
  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);                        // 调用按位求CRC子函数
  22   1              crc_byte = byte_crc(testdata,len);                      // 调用按字节查表求CRC子函数
  23   1              crc_halfbyte = halfbyte_crc(testdata,len);      // 调用按半字节查表求CRC子函数
  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位二进制数的形式暂存CRC的高8位 
  73   2                      crc<<=8;                                // 左移8位,相当于CRC的低8位乘以2的8次方 
  74   2                      crc^=crc_ta[da^*ptr];   /* 高8位和当前字节相加后再查表求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 + -