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

📄 xmodem.lst

📁 nrf9e5 nordic公司出品的带有无线发送接收的单片机的bootloader程序。支持xmodem下载
💻 LST
字号:
C51 COMPILER V8.05a   XMODEM                                                               03/08/2007 09:20:44 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE XMODEM
OBJECT MODULE PLACED IN .\object\Xmodem.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Xmodem.C ROM(SMALL) OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND OBJECT(.\obj
                    -ect\Xmodem.obj)

line level    source

   1          #include <absacc.h>
   2          #include "xmodem.h"
   3          #include "reg9e5.h"
   4          #include "PubFunc.h"
   5          #include "timer0.h"
   6          #include "serial.h"
   7          #include "25lc320.h"
   8          
   9          
  10          /******************************************************************************
  11          51系列中,对于int型的双字节数,在内存中的存放顺序为前高后低
  12          如int 0x1234,在内存中实际的存放位置为0x12,0x34
  13          ******************************************************************************/
  14          WORD calCRC(BYTE idata *ptr, BYTE data count)
  15          {
  16   1              WORD_UN data crc;
  17   1              BYTE data i;
  18   1      
  19   1              crc.bytArray[0] = 0;
  20   1              crc.bytArray[1] = 0;
  21   1              //while (count-- > 0) {
  22   1              while(count>0){
  23   2                      count--;
  24   2                      crc.bytArray[0] ^= *ptr;
  25   2                      crc.bytArray[1] ^= 0;
  26   2                      ptr++;
  27   2                      
  28   2                      for (i = 0; i < 8; ++i) {
  29   3                              if (crc.bytArray[0] & 0x80) {
  30   4                                      //crc.wValue = crc.wValue << 1 ^ 0x1021;
  31   4                                      crc.wValue = crc.wValue << 1;
  32   4                                      crc.bytArray[0] ^= 0x10;
  33   4                                      crc.bytArray[1] ^= 0x21;
  34   4                              } else {
  35   4                                      crc.wValue = crc.wValue << 1;
  36   4                              }
  37   3                      }
  38   2              }
  39   1              return crc.wValue;
  40   1      }
  41          
  42          void SaveCode(void)
  43          {
  44   1              WORD data addr;
  45   1              
  46   1              addr = (((WORD)XmodemRecvBuf[2])<<7)+896;//写到1024(128*x+896)位置处    //*128 - 96;                          //0
  47   1              _25LC320_WriteByteInPage(addr, XmodemRecvBuf+4);                //2
  48   1      //      _25LC320_WriteByteInPage(addr+32, XmodemRecvBuf+36);    //34
  49   1              _25LC320_WriteByteInPage(addr+64, XmodemRecvBuf+68);    //66
  50   1      //      _25LC320_WriteByteInPage(addr+96, XmodemRecvBuf+100);   //98
  51   1      }
  52          
  53          bit XmodemCheck(void)
  54          {
C51 COMPILER V8.05a   XMODEM                                                               03/08/2007 09:20:44 PAGE 2   

  55   1              WORD_UN data rtn;
  56   1              if (XmodemRecvBuf[2] + XmodemRecvBuf[3] - 0xFF== 0) {           //0 1
  57   2                      rtn.wValue = calCRC(XmodemRecvBuf + 4, 128);                    //2
  58   2                      return ( rtn.bytArray[0] == XmodemRecvBuf[132] && rtn.bytArray[1] == XmodemRecvBuf[133]); //130  131
  59   2              }
  60   1              return 0;
  61   1      }
  62          
  63          void xmodem(void)
  64          {
  65   1              BYTE data i;
  66   1              CUSTOM_TIMER tmrWaiting;
  67   1              
  68   1              for (i = 0; i < 20; i++) {
  69   2                      SetCustomTimer(&tmrWaiting, SECONDS(1));
  70   2                      SBUF = XMODEM_C;
  71   2                      serial_recv_num=1;
  72   2                      while (!IsTimeOut(&tmrWaiting)) {
  73   3                                      if(XmodemRecvBuf[1]==XMODEM_SOH){
  74   4                                              if(serial_recv_num>=134){               //0:u 1:soh 2-133 total 132 134end                                                              
  75   5                                                      if (XmodemCheck()) {
  76   6                                                              if(XmodemRecvBuf[2]>32)                 //24
  77   6                                                                      ;
  78   6      //                                                              SIOSendData("\r\nFile>3K:", sizeof("\r\nFile>3K:"));
  79   6                                                                      else { SaveCode();  }
  80   6                                                              SBUF = XMODEM_ACK;
  81   6                                                      }
  82   5                                                      else{
  83   6                                                              SBUF = XMODEM_NAK;
  84   6                                                      }
  85   5                                                      SetCustomTimer(&tmrWaiting, SECONDS(1));
  86   5                                                      serial_recv_num=1; 
  87   5                                      }
  88   4                              }
  89   3                              else if(XmodemRecvBuf[1]==XMODEM_EOT){
  90   4                                              SBUF = XMODEM_ACK;
  91   4                                              return;
  92   4                              }
  93   3      //                      else 
  94   3      //                              serial_recv_num=1;
  95   3                      }
  96   2              }
  97   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    230    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   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 + -