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

📄 isp.lst

📁 基于PDIUSBD12芯片的USB开发板固件程序
💻 LST
字号:
C51 COMPILER V7.02a   ISP                                                                  09/20/2005 15:10:01 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE ISP
OBJECT MODULE PLACED IN ISP.OBJ
COMPILER INVOKED BY: D:\Program Files\Keilc7\C51\BIN\C51.EXE ISP.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #ifdef __C51__
   2          #include <reg51.h> /* special function register declarations */#endif
   3          #include "ISP.h"
   4          #include "MAINLOOP.H"
   5          #include <intrins.h>
   6          
   7          unsigned char OutBuf[4],InBuf[4];
   8          sbit RST=P1^4;
   9          sbit MISO=P1^5;
  10          sbit MOSI=P1^0;
  11          sbit SCK=P1^1;
  12          sbit LE=P3^2;
  13          sbit OE=P3^1;
  14          
  15          void Delay(int time)//Delay(1)延时54us,time每加1则16us
  16          {
  17   1              int n;
  18   1              for(n=0;n<=time;n++)//延时
  19   1              {}
  20   1      }
  21          
  22          void Nop()
  23          {
  24   1              _nop_();
  25   1              _nop_();
  26   1              _nop_();
  27   1              _nop_();
  28   1      
  29   1      }
  30          
  31          void SetSck(BOOL bLogic)
  32          {
  33   1              if(bLogic)
  34   1                      SCK=1;
  35   1              else
  36   1                      SCK=0;
  37   1              LE=0;
  38   1              Nop();
  39   1              LE=1;
  40   1      }
  41          
  42          void SetRst(BOOL bLogic)
  43          {
  44   1              
  45   1              if(bLogic)
  46   1                      RST=1;
  47   1              else
  48   1                      RST=0;
  49   1              LE=0;
  50   1              Nop();
  51   1              LE=1;
  52   1      }
  53          
  54          void SetMosi(BOOL bLogic)
  55          {
C51 COMPILER V7.02a   ISP                                                                  09/20/2005 15:10:01 PAGE 2   

  56   1                      
  57   1              if(bLogic)
  58   1                      MOSI=1;
  59   1              else
  60   1                      MOSI=0;
  61   1              LE=0;
  62   1              Nop();
  63   1              LE=1;
  64   1      }
  65          
  66          BOOL GetMiso()//得到MISO引脚的电平
  67          {
  68   1              LE=0;
  69   1              Nop();
  70   1              LE=1;
  71   1              return MISO;
  72   1      }
  73          
  74          
  75          void SckBytes(BYTE nBytes)//通过下载线与器件通信
  76          {
  77   1              BYTE n;
  78   1              for(n=0;n<nBytes;n++)
  79   1              {       
  80   2                      SetSck(0);
  81   2                      SetMosi((OutBuf[n] & 0x80));//SCK为低电平时,发送一位
  82   2                      SetSck(1);
  83   2                      if(GetMiso())//SCK为搞电平时,接收一位
  84   2                      {
  85   3                      
  86   3                              InBuf[n]=InBuf[n] | 0x80;
  87   3                      }
  88   2                      else
  89   2                      {       
  90   3                              InBuf[n]=InBuf[n] & 0x7f;
  91   3                      }
  92   2                      SetSck(0);
  93   2                      SetMosi((OutBuf[n] & 0x40));
  94   2                      SetSck(1);
  95   2                      if(GetMiso())
  96   2                      {
  97   3                      
  98   3                              InBuf[n]=InBuf[n] | 0x40;
  99   3                      }
 100   2                      else
 101   2                      {       
 102   3                              InBuf[n]=InBuf[n] & 0xbf;
 103   3                      }
 104   2                      SetSck(0);
 105   2                      SetMosi((OutBuf[n] & 0x20));
 106   2                      SetSck(1);
 107   2                      if(GetMiso())
 108   2                      {
 109   3                      
 110   3                              InBuf[n]=InBuf[n] | 0x20;
 111   3                      }
 112   2                      else
 113   2                      {       
 114   3                              InBuf[n]=InBuf[n] & 0xdf;
 115   3                      }
 116   2                      SetSck(0);
 117   2      
C51 COMPILER V7.02a   ISP                                                                  09/20/2005 15:10:01 PAGE 3   

 118   2                      SetMosi((OutBuf[n] & 0x10));
 119   2                      SetSck(1);
 120   2                      if(GetMiso())
 121   2                      {
 122   3                      
 123   3                              InBuf[n]=InBuf[n] | 0x10;
 124   3                      }
 125   2                      else
 126   2                      {       
 127   3                              InBuf[n]=InBuf[n] & 0xef;
 128   3                      }
 129   2                      SetSck(0);
 130   2      
 131   2                      SetMosi((OutBuf[n] & 0x08));
 132   2                      SetSck(1);
 133   2                      if(GetMiso())
 134   2                      {
 135   3                      
 136   3                              InBuf[n]=InBuf[n] | 0x08;
 137   3                      }
 138   2                      else
 139   2                      {       
 140   3                              InBuf[n]=InBuf[n] & 0xf7;
 141   3                      }
 142   2                      SetSck(0);
 143   2      
 144   2                      SetMosi((OutBuf[n] & 0x04));
 145   2                      SetSck(1);
 146   2                      if(GetMiso())
 147   2                      {
 148   3                      
 149   3                              InBuf[n]=InBuf[n] | 0x04;
 150   3                      }
 151   2                      else
 152   2                      {       
 153   3                              InBuf[n]=InBuf[n] & 0xfb;
 154   3                      }
 155   2                      SetSck(0);
 156   2      
 157   2                      SetMosi((OutBuf[n] & 0x02));
 158   2                      SetSck(1);
 159   2                      if(GetMiso())
 160   2                      {
 161   3                      
 162   3                              InBuf[n]=InBuf[n] | 0x02;
 163   3                      }
 164   2                      else
 165   2                      {       
 166   3                              InBuf[n]=InBuf[n] & 0xfd;
 167   3                      }
 168   2                      SetSck(0);
 169   2      
 170   2                      SetMosi((OutBuf[n] & 0x01));
 171   2                      SetSck(1);
 172   2                      if(GetMiso())
 173   2                      {
 174   3                      
 175   3                              InBuf[n]=InBuf[n] | 0x01;
 176   3                      }
 177   2                      else
 178   2                      {       
 179   3                              InBuf[n]=InBuf[n] & 0xfe;
C51 COMPILER V7.02a   ISP                                                                  09/20/2005 15:10:01 PAGE 4   

 180   3                      }
 181   2                      SetSck(0);
 182   2              }
 183   1      }
 184          
 185          
 186          
 187          void PreparePro()//编程前的准备工作
 188          {
 189   1              SetRst(0);//RST置低电平
 190   1              SetMosi(0);//MOSI置低电平
 191   1              SetSck(0);//SCK置低电平
 192   1              Delay(10);
 193   1              SetRst(1);
 194   1              OE=0;
 195   1              LE=1;
 196   1              Delay(1000);
 197   1              OutBuf[0]=0xac;
 198   1              OutBuf[1]=0x53;
 199   1          SckBytes(4);
 200   1      }
 201          
 202          void ProOver()//编程结束后的工作
 203          {
 204   1              SetRst(0);//RST置低电平,这样单片机就开始运行了
 205   1              SetMosi(1);
 206   1              SetSck(1);
 207   1              OE=1;
 208   1      }
 209          
 210          void Erase()//擦除器件
 211          {
 212   1              OutBuf[0]=0xac;//根据器件手册上规定的命令协议
 213   1              OutBuf[1]=0x80;
 214   1              SckBytes(4);//向器件发编程命令
 215   1              Delay(31247);   //擦除器件要500ms
 216   1      }
 217          
 218          void ReadSign(unsigned char *pBuf)//读特征字
 219          {
 220   1              OutBuf[0]=0x28;//根据器件手册上规定的命令协议
 221   1              OutBuf[1]=0x00;
 222   1              OutBuf[2]=0x00;
 223   1              OutBuf[3]=0x00;
 224   1              SckBytes(4);//向器件发编程命令
 225   1              pBuf[0]=InBuf[3];//第1个特征字
 226   1              OutBuf[1]=0x01;
 227   1              SckBytes(4);
 228   1              pBuf[1]=InBuf[3];//第2个特征字
 229   1              OutBuf[1]=0x02;
 230   1              SckBytes(4);
 231   1              pBuf[2]=InBuf[3];//第3个特征字
 232   1      }
 233          
 234          unsigned char Read(int nAddr)//读一个单元
 235          {
 236   1              OutBuf[0]=0x20;//根据器件手册上规定的命令协议
 237   1              OutBuf[1]=nAddr/256;//高地址
 238   1              OutBuf[2]=nAddr%256;//低地址
 239   1              OutBuf[3]=0x00;
 240   1              SckBytes(4);//向器件发编程命令
 241   1              return InBuf[3];
C51 COMPILER V7.02a   ISP                                                                  09/20/2005 15:10:01 PAGE 5   

 242   1      }
 243          
 244          BOOL Write(BYTE Data,int nAddr)//写一个单元
 245          {
 246   1      //      int nTimeOut=0;
 247   1              OutBuf[0]=0x40;//根据器件手册上规定的命令协议
 248   1              OutBuf[1]=nAddr/256;//高地址
 249   1              OutBuf[2]=nAddr%256;//低地址
 250   1              OutBuf[3]=Data;
 251   1              SckBytes(4);//向器件发编程命令
 252   1      /*      while(Read(nAddr)!=Data)//效验:循环读,直到读出与写入相同的数
 253   1              {
 254   1                      nTimeOut++;
 255   1                      if(nTimeOut>=1000)//如果超时了,写入失败
 256   1                              return FALSE;
 257   1              }*/
 258   1              return TRUE;
 259   1      }
 260          
 261          BOOL LockBit(UCHAR nBit)
 262          {
 263   1              if(nBit>=1)//ComBuf[2]为锁定位
 264   1              {               
 265   2                      OutBuf[0]=0xac;//根据器件手册上规定的命令协议
 266   2                      OutBuf[1]=0xe1;
 267   2                      SckBytes(4);
 268   2                      Delay(60);
 269   2              }
 270   1              if(nBit>=2)
 271   1              {
 272   2                      PreparePro();
 273   2                      OutBuf[0]=0xac;//根据器件手册上规定的命令协议
 274   2                      OutBuf[1]=0xe2;
 275   2                      SckBytes(4);
 276   2                      Delay(60);
 277   2              }
 278   1              if(nBit==3)
 279   1              {
 280   2                      PreparePro();
 281   2                      OutBuf[0]=0xac;//根据器件手册上规定的命令协议
 282   2                      OutBuf[1]=0xe3;
 283   2                      SckBytes(4);
 284   2                      Delay(60);
 285   2              }
 286   1              return TRUE;
 287   1      }


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