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

📄 myapp.lst

📁 SM5964在系统编程的源代码,通过COMM串行口进行程序下载,方便嵌入式系统开发
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.04   MYAPP                                                                 04/08/2006 10:08:34 PAGE 1   


C51 COMPILER V7.04, COMPILATION OF MODULE MYAPP
OBJECT MODULE PLACED IN myApp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE myApp.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "main.h"
   2          #include "myApp.h"
   3          #include "isp.h"
   4          #include "comm.h"
   5          
   6          #include <absacc.h>
   7          
   8          /*
   9          unsigned char Asc2Hex(unsigned char *strData);
  10          void Hex2Asc(unsigned char ch,unsigned char *strOut);
  11          */
  12          
  13          
  14          unsigned char CheckAppPrg();
  15          void IspServer();
  16          unsigned char CheckPcCmd();
  17          
  18          void CMD_CHIPERASEf();
  19          void CMD_PAGEERASEf();
  20          void CMD_CHIPREADf();
  21          void CMD_CHIPWRITEf();
  22          void CMD_SETPROTECTf();
  23          void CMD_CLRPROTECTf();
  24          void CMD_VERIFYf();
  25          void CMD_GETMACHINEf();
  26          void CMD_ENDCOMf();
  27          void ErrCmd();
  28          void CMD_READRAMf();
  29          
  30          
  31          
  32          
  33          /*
  34          ************************************
  35          **检测PC发送的信息
  36          ************************************
  37          */
  38          unsigned char CheckPcCmd()
  39          {
  40   1              unsigned char ch;       
  41   1              unsigned char num=0;
  42   1      
  43   1      
  44   1              for(i=0;i<10;i++)
  45   1              {
  46   2                      WatchDog();
  47   2                      if(ReadComm1(&ch)!=ID_OK)break;
  48   2      
  49   2                      if(ch==0x55)num++;
  50   2              }
  51   1      
  52   1              if(num<5)return ID_ERR;
  53   1              else   
  54   1              {
  55   2                      PIN_TXEN=RS485_COMM_ENABLE;//允许发送
C51 COMPILER V7.04   MYAPP                                                                 04/08/2006 10:08:34 PAGE 2   

  56   2                      WriteComm(0xaa);
  57   2                      WriteComm(0xaa);
  58   2                      PIN_TXEN=RS485_COMM_DISENABLE;//不允许发送
  59   2                      return ID_OK;
  60   2              }
  61   1      
  62   1      }
  63          
  64          /*
  65          ************************************
  66          **检查程序的完整性
  67          ************************************
  68          */
  69          unsigned char CheckAppPrg()
  70          {
  71   1              unsigned char xorcode;
  72   1              unsigned char ch;
  73   1              
  74   1      
  75   1      
  76   1              //1.由并行编程器写入的,检查开始字节是否是0x02,
  77   1              ch=ChipRead(0x0000);
  78   1              if(ch==0x02)return ID_OK;
  79   1      
  80   1              //2.连续100个字节0xff判断,表示根本没有下载成功
  81   1              for(i=0;i<100;i++)
  82   1              {
  83   2                      WatchDog();
  84   2                      if(ChipRead(i)!=0xff)break;     
  85   2              }
  86   1              if(i>=100)return ID_ERR;
  87   1      
  88   1              //3.校验码判断,校验码错,则肯定下载失败
  89   1              //0xf7ff字节位置为0XFF-没有产生校验码,否则有校验码
  90   1              ch=ChipRead(0xf7ff);
  91   1      
  92   1              if(ch!=0xff)
  93   1              {
  94   2                      xorcode=0;
  95   2                      for(i=0;i<0xf800;i++)
  96   2                      {
  97   3                              WatchDog();
  98   3                              ch=ChipRead(i);
  99   3                              xorcode ^= ch;
 100   3                      }
 101   2              
 102   2                      if(xorcode!=0x00 && xorcode!=0xff)
 103   2                      {
 104   3                              return ID_ERR;
 105   3                      }
 106   2              }
 107   1      
 108   1              //4.错误跳转,或者0xff,真的为空
 109   1      
 110   1              i=ChipRead(0x0001);
 111   1              i<<=8;
 112   1              i+=ChipRead(0x0002);
 113   1      
 114   1              if(i>0xf800)return ID_ERR;
 115   1      
 116   1      
 117   1              //都没有错误    
C51 COMPILER V7.04   MYAPP                                                                 04/08/2006 10:08:34 PAGE 3   

 118   1              return ID_OK;
 119   1      
 120   1      }
 121          /*
 122          ************************************
 123          **isp 服务程序
 124          ************************************
 125          */
 126          void IspServer()
 127          {
 128   1      
 129   1              unsigned char status;
 130   1      
 131   1              while(1)
 132   1              {
 133   2              
 134   2                      
 135   2                      //接收PC机发来的命令
 136   2                      status=ReceiveData();
 137   2                      WatchDog();             
 138   2      
 139   2                      //命令的处理
 140   2                      if(status)SendResponse(status,g_CommBuffer,0x00);
 141   2                      else
 142   2                      {
 143   3                              
 144   3                              //地址出现错误,则不返回信息
 145   3                              WatchDog();
 146   3      
 147   3                              //if(g_CommBuffer[1]!=0x00 && g_CommBuffer[1]!=0xff)
 148   3                              //{
 149   3                              //      if(g_CommBuffer[1]!=g_MachineNo)//判断地址错误
 150   3                              //      {
 151   3                              //              InitParameter();
 152   3                              //              continue;
 153   3                  //  
 154   3                              //      }
 155   3                              //}
 156   3      
 157   3                              
 158   3                              switch(g_CommBuffer[2])
 159   3                              {
 160   4                              case CMD_CHIPERASE://   0Xa0//擦除芯片
 161   4                                      CMD_CHIPERASEf();
 162   4                                      break;
 163   4                              case CMD_PAGEERASE://   0Xa1//页擦除
 164   4                                      CMD_PAGEERASEf();
 165   4                                      break;
 166   4                              case CMD_CHIPREAD://    0Xa2//读
 167   4                                      CMD_CHIPREADf();
 168   4                                      break;
 169   4                              case CMD_CHIPWRITE://   0Xa3//写
 170   4                                      CMD_CHIPWRITEf();
 171   4                                      break;
 172   4                              case CMD_SETPROTECT://          0Xa4//保护
 173   4                                      CMD_SETPROTECTf();
 174   4                                      break;          
 175   4                              case CMD_VERIFY:        //a5校验
 176   4                                      CMD_VERIFYf();
 177   4                                      break;                          
 178   4                              case CMD_GETMACHINE:    //a7获取机号
 179   4                                      CMD_GETMACHINEf();
C51 COMPILER V7.04   MYAPP                                                                 04/08/2006 10:08:34 PAGE 4   

 180   4                                      break;
 181   4                              case CMD_ENDCOM:        //a8结束通讯
 182   4                                      CMD_ENDCOMf();                          
 183   4                                      break;
 184   4      
 185   4                              case CMD_READRAM:
 186   4                                      CMD_READRAMf();
 187   4                                      break;
 188   4                      
 189   4                              default:
 190   4                                      ErrCmd();
 191   4                                      
 192   4      
 193   4                              }
 194   3      
 195   3                              if(g_CommBuffer[2]==CMD_ENDCOM)break;
 196   3                              InitParameter();
 197   3      
 198   3                      }
 199   2      
 200   2      
 201   2              }
 202   1      
 203   1      
 204   1      }
 205          
 206          
 207          void CMD_CHIPERASEf()
 208          {
 209   1              unsigned char status;
 210   1              unsigned char ch;
 211   1      
 212   1      
 213   1              WatchDog();
 214   1              ChipErase();
 215   1      
 216   1      
 217   1              ch=ChipRead(0);
 218   1              if(ch!=0xff)status=ID_ERR;
 219   1              else        
 220   1              {
 221   2                      MyIspFlag=0x00;//不再唤醒
 222   2                      status=ID_OK;
 223   2              }
 224   1      
 225   1              SendResponse(status,g_CommBuffer,0x00);
 226   1              
 227   1      }
 228          
 229          //in g_CommBuffer[3]
 230          void CMD_PAGEERASEf()
 231          {
 232   1              unsigned char status;
 233   1              unsigned char ch;
 234   1      
 235   1      
 236   1              WatchDog();
 237   1              PageErase( g_CommBuffer[5]);
 238   1      

⌨️ 快捷键说明

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