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

📄 main.lst

📁 该工程是自己在KEIL环境下写的关于C8051F020的Bootloader,调试成功
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  12/07/2007 14:43:00 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /////////////////////////////////////
   2          //  Generated Initialization File  //
   3          /////////////////////////////////////
   4          
   5          #include "includes.h"
   6          
   7          // Peripheral specific initialization functions,
   8          // Called from the Init_Device() function
   9          void Reset_Sources_Init()
  10          {
  11   1          WDTCN     = 0xDE;
  12   1          WDTCN     = 0xAD;
  13   1      }
  14          
  15          void Timer_Init()
  16          {
  17   1          CKCON     = 0x10;
  18   1          TCON      = 0x40;
  19   1          TMOD      = 0x20;
  20   1          TH1       = 0xFA;
  21   1      }
  22          
  23          void UART_Init()
  24          {
  25   1          SCON0     = 0x50;
  26   1      }
  27          
  28          void Port_IO_Init()
  29          {
  30   1          // P0.0  -  TX0 (UART0), Open-Drain, Digital
  31   1          // P0.1  -  RX0 (UART0), Open-Drain, Digital
  32   1          // P0.2  -  Unassigned,  Open-Drain, Digital
  33   1          // P0.3  -  Unassigned,  Open-Drain, Digital
  34   1          // P0.4  -  Unassigned,  Open-Drain, Digital
  35   1          // P0.5  -  Unassigned,  Open-Drain, Digital
  36   1          // P0.6  -  Unassigned,  Open-Drain, Digital
  37   1          // P0.7  -  Unassigned,  Open-Drain, Digital
  38   1      
  39   1          // P1.0  -  Unassigned,  Open-Drain, Digital
  40   1          // P1.1  -  Unassigned,  Open-Drain, Digital
  41   1          // P1.2  -  Unassigned,  Open-Drain, Digital
  42   1          // P1.3  -  Unassigned,  Open-Drain, Digital
  43   1          // P1.4  -  Unassigned,  Open-Drain, Digital
  44   1          // P1.5  -  Unassigned,  Open-Drain, Digital
  45   1          // P1.6  -  Unassigned,  Open-Drain, Digital
  46   1          // P1.7  -  Unassigned,  Open-Drain, Digital
  47   1      
  48   1          // P2.0  -  Unassigned,  Open-Drain, Digital
  49   1          // P2.1  -  Unassigned,  Open-Drain, Digital
  50   1          // P2.2  -  Unassigned,  Open-Drain, Digital
  51   1          // P2.3  -  Unassigned,  Open-Drain, Digital
  52   1          // P2.4  -  Unassigned,  Open-Drain, Digital
  53   1          // P2.5  -  Unassigned,  Open-Drain, Digital
  54   1          // P2.6  -  Unassigned,  Open-Drain, Digital
  55   1          // P2.7  -  Unassigned,  Open-Drain, Digital
C51 COMPILER V8.08   MAIN                                                                  12/07/2007 14:43:00 PAGE 2   

  56   1      
  57   1          // P3.0  -  Unassigned,  Open-Drain, Digital
  58   1          // P3.1  -  Unassigned,  Open-Drain, Digital
  59   1          // P3.2  -  Unassigned,  Open-Drain, Digital
  60   1          // P3.3  -  Unassigned,  Open-Drain, Digital
  61   1          // P3.4  -  Unassigned,  Open-Drain, Digital
  62   1          // P3.5  -  Unassigned,  Open-Drain, Digital
  63   1          // P3.6  -  Unassigned,  Open-Drain, Digital
  64   1          // P3.7  -  Unassigned,  Open-Drain, Digital
  65   1              P1MDOUT = 0xff;
  66   1          XBR0      = 0x04;
  67   1          XBR2      = 0x40;
  68   1      }
  69          
  70          void Oscillator_Init()
  71          {
  72   1          int i = 0;
  73   1          OSCXCN    = 0x67;
  74   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
  75   1          while ((OSCXCN & 0x80) == 0);
  76   1          OSCICN    = 0x0C;
  77   1      }
  78          
  79          // Initialization function for device,
  80          // Call Init_Device() from your main program
  81          void Init_Device(void)
  82          {
  83   1          Reset_Sources_Init();
  84   1          Timer_Init();
  85   1          UART_Init();
  86   1          Port_IO_Init();
  87   1          Oscillator_Init();
  88   1      }
  89          
  90          sbit P16 = P1^6;
  91          UINT8 FlashPageMax = 119;
  92          #define START        0x43 //向主机发送,请求数据发送
  93          #define ACK          0x06 //每接收到一个程序,如果验证正确,发送ack
  94          #define SOH          0x01 //主机发送帧头
  95          #define EOT          0x04 // 发送结束.
  96          #define NAK          0x15
  97          
  98          //定义状态.
  99          
 100          #define SendStart    0
 101          #define RecData      1
 102          #define SendAck      2
 103          #define RunUsr       3
 104          #define RecSOH       4
 105          #define SaveData     5
 106          #define SendNak     6
 107          typedef union{
 108              UINT16 intnum;
 109              UINT8 charnum[2];
 110          }UNION16;
 111          void main()
 112          {
 113   1          UINT8 flashErasePage=0;
 114   1          UINT8 stage;
 115   1          UINT8 tmp[2] = {0};
 116   1          UINT8 flashData[512] ={0};
 117   1          UINT8 tmpBuf[132] = {0};
C51 COMPILER V8.08   MAIN                                                                  12/07/2007 14:43:00 PAGE 3   

 118   1          UINT8 tmpBufIndex;
 119   1          UINT16 flashDataIndex;
 120   1          UINT8 index = 0;
 121   1          UNION16 crc;
 122   1          Init_Device();
 123   1          stage = SendStart;
 124   1              while(1) {
 125   2          switch(stage){
 126   3              case SendStart://发送起始传输命令
 127   3                  SBUF0 = START;
 128   3                  while(TI0==0);
 129   3                  TI0=0;
 130   3      
 131   3                  //stage = SendStart;
 132   3                  stage = RecSOH;
 133   3                  break;
 134   3              case RecSOH:
 135   3                  while(RI0==0);
 136   3                  RI0=0;
 137   3                  tmp[0] = SBUF0;
 138   3                  if(SOH==tmp[0]){//接收到SOH起始帧头
 139   4                      stage = RecData;
 140   4                  }
 141   3                  else if(EOT==tmp[0]){//接收到EOT结束帧头.
 142   4                      stage = RunUsr;
 143   4                  }
 144   3                  break;
 145   3              case RecData:
 146   3                   for(tmpBufIndex=0;tmpBufIndex<132;tmpBufIndex++){
 147   4                       while(RI0==0);
 148   4                       RI0=0;
 149   4                       tmpBuf[tmpBufIndex] = SBUF0;   
 150   4                   }
 151   3                   if(tmpBuf[0]+tmpBuf[1]==0xff){//序列号正确
 152   4                       crc.intnum = Crc16Cal(&tmpBuf[2],128);
 153   4                       if((crc.charnum[0]==tmpBuf[130])&&(crc.charnum[1]==tmpBuf[131])){
 154   5                           stage = SaveData;
 155   5                       }    
 156   4                   }else{
 157   4                       stage = SendNak;
 158   4                   }
 159   3              case SaveData:
 160   3                 /* for(flashDataIndex;flashDataIndex+128;flashDataIndex++){
 161   3                       flashData[flashDataIndex] = tmpBuf[tmpBufIndex++];
 162   3                  }
 163   3                  if(flashDataIndex ==512){
 164   3                       if(flashErasePage>FlashPageMax){
 165   3                            while(1){
 166   3                                SBUF0 =0x43;//C
 167   3                                while(TI0 == 0);
 168   3                                TI0 = 0;
 169   3                            }
 170   3                       }
 171   3                       FlashErase(flashErasePage);
 172   3                       FlashWrite(flashData,flashErasePage);
 173   3                       flashDataIndex = 0;
 174   3                       flashErasePage++;
 175   3                       
 176   3                        
 177   3                  } */
 178   3                  stage = SendAck;
 179   3                   break;
C51 COMPILER V8.08   MAIN                                                                  12/07/2007 14:43:00 PAGE 4   

 180   3              case SendAck:
 181   3                  SBUF0 = ACK;
 182   3                  stage = RecSOH;
 183   3                  break;
 184   3              case SendNak:
 185   3                  SBUF0 = NAK;
 186   3                  stage = RecSOH;
 187   3                  break;
 188   3              case RunUsr:
 189   3                  SBUF0 = ACK;
 190   3                  while(TI0==0);
 191   3                  TI0=0;
 192   3                  while(1);
 193   3                  break;
 194   3      
 195   3                  
 196   3             
 197   3            }       
 198   2              }
 199   1      }
*** WARNING C280 IN LINE 119 OF MAIN.C: 'flashDataIndex': unreferenced local variable
 200          
 201          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    523    ----
   CONSTANT SIZE    =    646    ----
   XDATA SIZE       =    657    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -