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

📄 main.lst

📁 P89V51RC2FA 单片机的IAP程序
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  09/19/2008 10:58:25 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 BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "intrins.h"
   2          #include "V51IAP.h"
   3          //==I485接收缓冲区队列
   4          unsigned char idata UartBuf[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//
   5          unsigned char data  unum=0x00;         //
   6          bit UartFlag;
   7          bit _TI_;                              //发送位
   8          sbit i485_con=P2^7;
   9          bit flag;
  10          
  11          
  12          void UartInit();
  13          void delay(unsigned int i);
  14          void ErrorDo(char *s);
  15          void UartSendChar(char c);
  16          void UartSendString(char *s);
  17          
  18          
  19          /*
  20          功能:
  21                  通过串行口发送单个字节
  22          
  23          */
  24          void UartSendChar(char c)
  25          {
  26   1         i485_con=0;
  27   1      
  28   1              while ( !_TI_ );
  29   1              _TI_ = 0;
  30   1              SBUF = c;
  31   1      
  32   1          i485_con=1;
  33   1      }
  34          
  35          
  36          /*
  37          功能:
  38                  通过串行口发送字符串
  39          参数:
  40                  *s:被发送的字符串
  41          
  42          */
  43          void UartSendString(char *s)
  44          {
  45   1              char c;
  46   1              for (;;)
  47   1              {
  48   2                      c = *s;
  49   2                      if ( c == '\0' ) break;
  50   2                      s++;
  51   2                      UartSendChar(c);
  52   2              }
  53   1      }
  54          
  55          //==============================
C51 COMPILER V8.08   MAIN                                                                  09/19/2008 10:58:25 PAGE 2   

  56          /*延时子程序*/
  57           void delay(unsigned int ii)
  58          {
  59   1       do{
  60   2       }while(ii--);
  61   1      }
  62          
  63          void ErrorDo(char *s)
  64          {
  65   1              UartSendString(s);
  66   1              UartSendString("\r\n");
  67   1      }
  68          
  69          //======================== 串口初始化====================
  70          void UartInit()
  71          {
  72   1         unsigned char i;
  73   1              EA = 0;
  74   1              RXD = 1;
  75   1              TXD = 1;
  76   1              _TI_ = 1;
  77   1      
  78   1                      for ( i=0; i<12; i++ )
  79   1                      {
  80   2                              UartBuf[i] = '\0';
  81   2                      }
  82   1      
  83   1              i=0x00;
  84   1              UartFlag = 0;
  85   1              SCON = 0x50;    //串口方式1
  86   1              PCON |= 0x80;   //波特率加倍
  87   1              TMOD &= 0x0F;
  88   1              TMOD |= 0x20;
  89   1              TH1 = 0xfa;
  90   1              TL1 = TH1;
  91   1              TR1 = 1;
  92   1              i485_con=1;
  93   1              ES = 1;                 //允许串行口中断
  94   1              EA = 1;                 //允许中断
  95   1      }
  96          
  97          //串行口中断服务程序
  98          void UartINTSVC() interrupt 4
  99          {       int i=0;
 100   1              unsigned char c;
 101   1          unsigned char syt;
 102   1              if ( RI )       //接收中断
 103   1              {
 104   2                      c = SBUF;
 105   2                      RI = 0;
 106   2                      if ( unum <=1)
 107   2                      {
 108   3                         if(c==0xaa)
 109   3                         unum++;
 110   3                         else
 111   3                         unum=0;
 112   3      
 113   3                      }
 114   2                      else if (( 1<unum)&&(unum<=11))
 115   2                      {
 116   3                          UartBuf[unum]=c;
 117   3                              unum++;
C51 COMPILER V8.08   MAIN                                                                  09/19/2008 10:58:25 PAGE 3   

 118   3      
 119   3                      }
 120   2                      else if ( unum==12 )
 121   2                      {
 122   3                       
 123   3                        for(i==2;i<=11;i++)
 124   3                         syt=syt+UartBuf[i];
 125   3                         syt=syt+c;
 126   3                         if(syt==0)
 127   3                         {
 128   4                         unum= 0;
 129   4                         UartFlag = 1;
 130   4                         }
 131   3                         else
 132   3                         {
 133   4                         unum=0;
 134   4                         }
 135   3                        }
 136   2                      }
 137   1              if ( TI )       //发送中断
 138   1              {
 139   2                      TI = 0;
 140   2                      _TI_ = 1;
 141   2              }
 142   1      }
 143          main()
 144          {
 145   1      
 146   1      
 147   1              unsigned char n;
 148   1              unsigned int ci;
 149   1              unsigned char t;
 150   1              unsigned int x;
 151   1              unsigned int y;
 152   1              unsigned int xx;
 153   1              unsigned int zong;
 154   1              //系统初始化
 155   1          n=0x00;
 156   1              ci=0x900;
 157   1              x=0x00;
 158   1              zong=0x00;
 159   1      
 160   1              delay(100);
 161   1              UartInit();
 162   1              flag=0;
 163   1              do{
 164   2              delay(1000);
 165   2              if( UartFlag == 1 )
 166   2              {
 167   3                UartFlag=0;
 168   3                for(t=2;t<=9;t++)
 169   3                zong=zong+UartBuf[t];
 170   3                if(zong==0)
 171   3                if(UartBuf[10]<0x80)
 172   3                {
 173   4                zong=UartBuf[10];
 174   4                zong=zong<<8;
 175   4                zong=zong+UartBuf[11];
 176   4                ci=0x00;
 177   4                flag=1;
 178   4                break;
 179   4                }
C51 COMPILER V8.08   MAIN                                                                  09/19/2008 10:58:25 PAGE 4   

 180   3                else
 181   3                UartSendString("count error");
 182   3                else 
 183   3                UartSendString("count error"); 
 184   3              }
 185   2              }while(ci--);                  //等待时间接收串口数据
 186   1              
 187   1              if(flag==0)
 188   1         JumpToUser();                  //跳转到用户程序       
 189   1      
 190   1              if(flag==1)                                        //说明IAP读写启动
 191   1              {
 192   2              flag=0;
 193   2              UartSendString("IAP begin"); //发送开始信号
 194   2              delay(200);
 195   2          UartSendString("\r\n");
 196   2              delay(200);                                                            
 197   2              UartSendString("Erase");    //擦除用户Flash的32k
 198   2              delay(200);
 199   2          UartSendString("\r\n");
 200   2              delay(200);
 201   2          for ( x=0; x<256; x++ )
 202   2          IAP_SectorErase(x); 
 203   2              delay(100);
 204   2              UartSendString("Ready\r\n");     //准备接收数据
 205   2          x=0x00;     
 206   2              for (;;)
 207   2              {
 208   3                PCON |= 0x01;                  //等待中断的到来                                      
 209   3              if ( UartFlag == 1 )
 210   3                      {       
 211   4      next:      UartFlag = 0;
 212   4                          
 213   4                               xx=x;
 214   4                               for(ci=0x02;ci<=11;ci++)
 215   4                               {
 216   5                               y=UartBuf[ci];
 217   5                               flag=IAP_Program(x++,y);
 218   5                               if (flag )
 219   5                                {
 220   6                                      ErrorDo("error");
 221   6                                      x=xx;
 222   6                                      goto next;
 223   6                                              }
 224   5                               }
 225   4                               if(x>=zong)
 226   4                               goto endok;
 227   4                               UartSendString("next"); //发送开始信号
 228   4                   UartSendString("\r\n");    
 229   4                               if(x>=zong)
 230   4                               goto endok;               
 231   4      
 232   4                      }        
 233   3                      }
 234   2      endok:  UartSendString("Download OK\r\n");
 235   2                      delay(100);
 236   2              JumpToUser();                
 237   2               }
 238   1      
 239   1      
 240   1      
 241   1      
C51 COMPILER V8.08   MAIN                                                                  09/19/2008 10:58:25 PAGE 5   

 242   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    602    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      10
   IDATA SIZE       =     12    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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