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

📄 e51pro.lst

📁 51单片机编程器的全部资料
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.07   E51PRO                                                                10/28/2003 18:27:17 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE E51PRO
OBJECT MODULE PLACED IN e51pro.OBJ
COMPILER INVOKED BY: f:\winsoft\Keil\C51\BIN\C51.EXE e51pro.c WARNINGLEVEL(1) OPTIMIZE(5,SIZE) REGFILE(.\E51Pro.ORC) BRO
                    -WSE INCDIR(G:\MCU工程\E51Pro\) DEBUG OBJECTEXTEND CODE

stmt level    source

   1          //////////////////////////////////////////////////////////////////////////////////////////////////
   2          //E51Pro.c
   3          //Easy 51Pro编程器主程序,负责通讯,管理编程操作
   4          ///////////////////////////////////////////////////////////////////////////////////////////////////
   5          
   6          #include <E51Pro.h>
   7          
   8          BYTE ComBuf[18];//串口通讯数据缓存,发送和接收都使用
   9          UINT nAddress;//ROM中地址计数
  10          UINT nTimeOut;//超时计数
  11          ProWork pw;//编程器一般操作
  12          
  13          void Delay_us(BYTE nUs)//微秒级延时<255us
  14          {
  15   1              TH0=0;
  16   1              TL0=0;
  17   1              TR0=1;
  18   1              while(TL0<nUs)//利用T0做定时计数器,循环采样,直到达到定时值
  19   1              {
  20   2              }
  21   1              TR0=0;
  22   1      }
  23          
  24          void Delay_ms(UINT nMs)//豪秒级的延时<65535ms
  25          {
  26   1              UINT n=0;
  27   1              TR0=1;
  28   1              while(n<nMs)////利用T0做定时计数器,循环采样,直到达到定时值
  29   1              {
  30   2                      TH0=0;
  31   2                      TL0=20;
  32   2                      while(TH0<4)
  33   2                      {
  34   3                      }
  35   2                      n++;
  36   2              }
  37   1              TR0=0;
  38   1      }
  39           
  40          BOOL WaitComm()//等待上位机的命令,18字节
  41          {
  42   1              BYTE n=0;
  43   1              RI=0;
  44   1              while(!RI){}//等待第一个字节
  45   1              ComBuf[n]=SBUF;
  46   1              RI=0;
  47   1              n++;
  48   1              for(n;n<=17;n++)
  49   1              {
  50   2                      nTimeOut=0;
  51   2                      while(!RI)
  52   2                      {
  53   3                              nTimeOut++;
  54   3                              if(nTimeOut>10000)//后17个字节都有超时限制 
C51 COMPILER V7.07   E51PRO                                                                10/28/2003 18:27:17 PAGE 2   

  55   3                                      return 0;
  56   3                      }
  57   2                      ComBuf[n]=SBUF;
  58   2                      RI=0;
  59   2              }
  60   1              return 1;
  61   1      }
  62          
  63          BOOL WaitResp()//等待上位机回应,1字节,有超时限制 
  64          {
  65   1              nTimeOut=0;
  66   1              RI=0;
  67   1              while(!RI)
  68   1              {
  69   2                      nTimeOut++;
  70   2                      if(nTimeOut>50000) 
  71   2                      {
  72   3                              return 0;
  73   3                      }
  74   2              }
  75   1              RI=0;
  76   1              ComBuf[0]=SBUF;
  77   1              return 1;
  78   1      }
  79          
  80          BOOL WaitData()//写器件时等待上位机数据,18字节,有超时限制 
  81          {
  82   1              BYTE n;
  83   1              RI=0;
  84   1              for(n=0;n<=17;n++)
  85   1              {
  86   2                      nTimeOut=0;
  87   2                      while(!RI)
  88   2                      {
  89   3                              nTimeOut++;
  90   3                              if(nTimeOut>10000)
  91   3                              {
  92   4                                      return 0;
  93   4                              }
  94   3                      }
  95   2                      RI=0;
  96   2                      ComBuf[n]=SBUF;
  97   2              }
  98   1              return 1;
  99   1      }
 100          
 101          void SendData()//发送数据或回应操作完成,18字节
 102          {
 103   1              BYTE n=0;
 104   1              for(n;n<=17;n++)
 105   1              {
 106   2                      TI=0;
 107   2                      SBUF=ComBuf[n];
 108   2                      while(!TI){}
 109   2                      TI=0;
 110   2              }
 111   1      }
 112          
 113          void SendResp()//回应上位机1个字节,在写器件函数中使用
 114          {
 115   1              TI=0;
 116   1              SBUF=ComBuf[0];
C51 COMPILER V7.07   E51PRO                                                                10/28/2003 18:27:17 PAGE 3   

 117   1              while(!TI){}
 118   1              TI=0;
 119   1      }
 120          
 121          void SetVpp5V()//设置Vpp为5v
 122          {
 123   1              P3_4=0;
 124   1              P3_3=0;
 125   1      }
 126          
 127          void SetVpp0V()//设置Vpp为0v
 128          {
 129   1              P3_3=0;
 130   1              P3_4=1;
 131   1      }
 132          
 133          void SetVpp12V()//设置Vpp为12v
 134          {
 135   1              P3_4=0;
 136   1              P3_3=1;
 137   1      }
 138          
 139          void RstPro()//编程器复位
 140          {
 141   1              pw.fpProOver();//直接编程结束
 142   1              SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同
 143   1      }
 144          
 145          void ReadSign()//读特征字
 146          {
 147   1              pw.fpReadSign();
 148   1              SendData();//通知上位机,送出读出器件特征字
 149   1      }
 150          
 151          void Erase()//擦除器件
 152          {
 153   1              pw.fpErase();
 154   1              SendData();//通知上位机,擦除了器件
 155   1      }
 156          
 157          void Write()//写器件
 158          {
 159   1              BYTE n;
 160   1              pw.fpInitPro();//编程前的准备工作
 161   1              SendData();//回应上位机表示进入写器件状态,可以发来数据
 162   1              while(1)
 163   1              {
 164   2                      if(WaitData())//如果等待数据成功
 165   2                      {
 166   3                              if(ComBuf[0]==0x07)//判断是否继续写
 167   3                              {
 168   4                                      for(n=2;n<=17;n++)//ComBuf[2~17]为待写入数据块
 169   4                                      {
 170   5                                              if(!pw.fpWrite(ComBuf[n]))//<<<<<<<<<<<<<<<<<<<调用写该器件一个单元的函数
 171   5                                              {
 172   6                                                      pw.fpProOver();//出错了就结束编程
 173   6                                                      ComBuf[0]=0xff;
 174   6                                                      SendResp();//回应上位机一个字节,表示写数据出错了
 175   6                                                      WaitData();//等待上位机的回应后就结束
 176   6                                                      return; 
 177   6                                              }
 178   5                                              nAddress++;//下一个单元
C51 COMPILER V7.07   E51PRO                                                                10/28/2003 18:27:17 PAGE 4   

 179   5                                      }
 180   4                                      ComBuf[0]=1;//回应上位机一个字节,表示数据块顺利完成,请求继续
 181   4                                      SendResp();
 182   4                              }
 183   3                              else if(ComBuf[0]==0x00)//写器件结束
 184   3                                      break;
 185   3                              else//可能是通讯出错了
 186   3                              {
 187   4                                      pw.fpProOver();
 188   4                                      return;
 189   4                              }
 190   3                      }
 191   2                      else//等待数据失败
 192   2                      {
 193   3                              pw.fpProOver();
 194   3                              return;
 195   3                      }
 196   2              }
 197   1              pw.fpProOver();//编程结束后的工作
 198   1              Delay_ms(50);//延时等待上位机写线程结束
 199   1              ComBuf[0]=0;//通知上位机编程器进入就绪状态
 200   1              SendData();
 201   1      }
 202          
 203          void Read()//读器件
 204          {
 205   1              BYTE n;
 206   1              pw.fpInitPro();//先设置成编程状态
 207   1              SendData();//回应上位机表示进入读状态
 208   1              while(1)
 209   1              {
 210   2                      if(WaitResp())//等待上位机回应1个字节
 211   2                      {
 212   3                              if(ComBuf[0]==0)//ComBuf[0]==0表示读结束
 213   3                              {
 214   4                                      break;
 215   4                              }
 216   3                              else if(ComBuf[0]==0xff)//0xff表示重发
 217   3                              {
 218   4                                      nAddress=nAddress-0x0010;
 219   4                              }
 220   3                              for(n=2;n<=17;n++)//ComBuf[2~17]保存读出的数据块
 221   3                              {
 222   4                                      ComBuf[n]=pw.fpRead();//<<<<<<<<<<<<<<<<<<<调用写该器件一个单元的函数
 223   4                                      nAddress++;//下一个单元
 224   4                              }
 225   3                              ComBuf[0]=6;//向上位机发送读出的数据块
 226   3                              SendData();
 227   3                      }
 228   2                      else
 229   2                              break;//等待回应失败    
 230   2      
 231   2              }
 232   1              pw.fpProOver();//操作结束设置为运行状态
 233   1              ComBuf[0]=0;//通知上位机编程器进入就绪状态
 234   1              SendData();
 235   1      }
 236          
 237          void Lock()//写锁定位
 238          {
 239   1              pw.fpLock();
 240   1              SendData();
C51 COMPILER V7.07   E51PRO                                                                10/28/2003 18:27:17 PAGE 5   

 241   1      }
 242          
 243          ///////////////////////////////////////////////////////////////////////////////////////////////////
 244          //所支持的FID,请在这里继续添加
 245          ///////////////////////////////////////////////////////////////////////////////////////////////////
 246          extern void PreparePro00();//FID=00:AT89C51编程器
 247          extern void PreparePro01();//FID=01:AT89C2051编程器
 248          extern void PreparePro02();//FID=02:AT89S51编程器
 249          
 250          void main()
 251          {
 252   1              SP=0x60;
 253   1              SetVpp5V();//先初始化Vpp为5v
 254   1              SCON=0x00;
 255   1              TCON=0x00;
 256   1              //PCON=0x00;//波特率*2
 257   1              IE=0x00;
 258   1              //TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
 259   1              //        0    0   1  0   0    0   0  1
 260   1              TMOD=0x21;//T0用于延时程序
 261   1              TH1=0xff;
 262   1              TL1=0xff;//波特率28800*2,注意PCON
 263   1              //SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI

⌨️ 快捷键说明

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