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

📄 at89s51pro.lst

📁 這次把真正的把源程序公開了
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   AT89S51PRO                                                            10/28/2003 18:27:18 PAGE 1   


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

stmt level    source

   1          ///////////////////////////////////////////////////////////////////////////////////////////////////
   2          //FID=02:AT89S51系列编程器
   3          //实现编程的读,写,擦等细节
   4          //特殊处:采用ISP编程方式,只需对P1.5,P1.6,P1.7,RST引脚控制;用MOSI串行发送命令的同时用MISO接收相关数据
   5          //SCK输出同步时钟脉冲
   6          ///////////////////////////////////////////////////////////////////////////////////////////////////
   7          
   8          #include <e51pro.h>
   9          
  10          #define MOSI    P1_5
  11          #define MISO    P1_6
  12          #define SCK             P1_7    
  13          
  14          BYTE OutBuf[4];//发送命令缓冲
  15          BYTE InBuf[4];//接收缓冲
  16          
  17          void SendInstrc(BYTE nByte)//用MOSI串行发送命令的同时用MISO接收相关数据
  18          {
  19   1              BYTE n;
  20   1              for(n=0;n<nByte;n++)//发送nByte个字节
  21   1              {
  22   2                      ACC=OutBuf[n];
  23   2                      SCK=0;
  24   2                      MOSI=A_7;//低电平时输出一位
  25   2                      SCK=1;
  26   2                      B_7=MISO;//高电平时接收一位
  27   2                      SCK=0;
  28   2                      MOSI=A_6;
  29   2                      SCK=1;
  30   2                      B_6=MISO;
  31   2                      SCK=0;
  32   2                      MOSI=A_5;
  33   2                      SCK=1;
  34   2                      B_5=MISO;
  35   2                      SCK=0;
  36   2                      MOSI=A_4;
  37   2                      SCK=1;
  38   2                      B_4=MISO;
  39   2                      SCK=0;
  40   2                      MOSI=A_3;
  41   2                      SCK=1;
  42   2                      B_3=MISO;
  43   2                      SCK=0;
  44   2                      MOSI=A_2;
  45   2                      SCK=1;
  46   2                      B_2=MISO;
  47   2                      SCK=0;
  48   2                      MOSI=A_1;
  49   2                      SCK=1;
  50   2                      B_1=MISO;
  51   2                      SCK=0;
  52   2                      MOSI=A_0;
  53   2                      SCK=1;
  54   2                      B_0=MISO;
C51 COMPILER V7.07   AT89S51PRO                                                            10/28/2003 18:27:18 PAGE 2   

  55   2                      SCK=0;
  56   2                      InBuf[n]=B;
  57   2              }
  58   1      }
  59          
  60          void InitPro02()//编程前的准备工作
  61          {
  62   1              SetVpp5V();
  63   1              P3_5=0;//p3.5接RST
  64   1              P3_2=1;//p3.2接PROG
  65   1              P0=0xff;
  66   1              P1=0xff;
  67   1              P2=0xff;
  68   1              Delay_ms(10);
  69   1              MOSI=0;
  70   1              MISO=1;
  71   1              SCK=1;
  72   1              P3_5=1;
  73   1              Delay_ms(10);
  74   1              nAddress=0x0000;
  75   1              OutBuf[0]=0xac;//正好在这里可以安排DataSheet上所规定的
  76   1              OutBuf[1]=0x53;//Eanable Programming命令
  77   1              OutBuf[2]=0;
  78   1              OutBuf[3]=0;
  79   1              SendInstrc(4);
  80   1      }
  81          
  82          void ProOver02()//编程结束后的工作,设置合适的引脚电平
  83          {
  84   1              SetVpp5V();
  85   1              P0=0xff;
  86   1              P1=0xff;
  87   1              P2=0xff;
  88   1              P3_6=1;
  89   1              P3_7=1;
  90   1              P3_5=0;//RST=0;
  91   1              P3_2=2;//PROG=0
  92   1      }
  93          
  94          BYTE Read02()
  95          {
  96   1              OutBuf[0]=0x20;
  97   1              OutBuf[1]=((BYTE*)&nAddress)[0];
  98   1              OutBuf[2]=((BYTE*)&nAddress)[1];
  99   1              SendInstrc(4);
 100   1              return InBuf[3];
 101   1      }
 102          
 103          void ReadSign02()//读特征字
 104          {
 105   1              InitPro02();//先设置成编程状态
 106   1      //-----------------------------------------------------------------------------
 107   1              //根据器件的DataSheet,设置相应的编程控制信号
 108   1              OutBuf[0]=0x28;
 109   1              OutBuf[1]=0x00;
 110   1              OutBuf[2]=0x00;
 111   1              OutBuf[3]=0x00;
 112   1              SendInstrc(4);
 113   1              ComBuf[2]=InBuf[3];
 114   1              OutBuf[1]=0x01;
 115   1              SendInstrc(4);
 116   1              ComBuf[3]=InBuf[3];
C51 COMPILER V7.07   AT89S51PRO                                                            10/28/2003 18:27:18 PAGE 3   

 117   1              OutBuf[1]=0x02;
 118   1              SendInstrc(4);
 119   1              ComBuf[4]=InBuf[3];
 120   1      //-----------------------------------------------------------------------------
 121   1              ProOver02();
 122   1      }
 123          
 124          void Erase02()//擦除器件
 125          {
 126   1              InitPro02();
 127   1      //-----------------------------------------------------------------------------
 128   1              //根据器件的DataSheet,设置相应的编程控制信号
 129   1              OutBuf[0]=0xac;
 130   1              OutBuf[1]=0x80;
 131   1              SendInstrc(4);
 132   1              Delay_ms(500);  
 133   1      //-----------------------------------------------------------------------------
 134   1              ProOver02();
 135   1      }
 136          
 137          BOOL Write02(BYTE Data)//写器件
 138          {
 139   1      
 140   1      //-----------------------------------------------------------------------------
 141   1              //根据器件的DataSheet,设置相应的编程控制信号
 142   1              //写一个单元
 143   1              OutBuf[0]=0x40;
 144   1              OutBuf[1]=((BYTE*)&nAddress)[0];
 145   1              OutBuf[2]=((BYTE*)&nAddress)[1];
 146   1              OutBuf[3]=Data;
 147   1              SendInstrc(4);
 148   1              nTimeOut=0;
 149   1              while(Read02()!=Data)//效验:循环读,直到读出与写入的数相同
 150   1              {
 151   2                      nTimeOut++;
 152   2                      if(nTimeOut>1000)//超时了
 153   2                      {
 154   3                              return  0;
 155   3                      }
 156   2                                      
 157   2              }
 158   1      //-----------------------------------------------------------------------------
 159   1              return 1;
 160   1      }
 161          
 162          void Lock02()//写锁定位
 163          {
 164   1      //-----------------------------------------------------------------------------
 165   1              //根据器件的DataSheet,设置相应的编程控制信号
 166   1              if(ComBuf[2]>=1)//ComBuf[2]为锁定位
 167   1              {
 168   2                      InitPro02();
 169   2                      OutBuf[0]=0xac;
 170   2                      OutBuf[1]=0xe1;
 171   2                      SendInstrc(4);
 172   2                      Delay_ms(1);
 173   2              }
 174   1              if(ComBuf[2]>=2)
 175   1              {
 176   2                      InitPro02();
 177   2                      OutBuf[0]=0xac;
 178   2                      OutBuf[1]=0xe2;
C51 COMPILER V7.07   AT89S51PRO                                                            10/28/2003 18:27:18 PAGE 4   

 179   2                      SendInstrc(4);
 180   2                      Delay_ms(1);
 181   2              }
 182   1              if(ComBuf[2]==3)
 183   1              {
 184   2                      InitPro02();
 185   2                      OutBuf[0]=0xac;
 186   2                      OutBuf[1]=0xe3;
 187   2                      SendInstrc(4);
 188   2                      Delay_ms(1);
 189   2              }
 190   1      //-----------------------------------------------------------------------------
 191   1              ProOver02();
 192   1      }
 193          
 194          void PreparePro02()//设置pw中的函数指针,让主程序可以调用上面的函数
 195          {
 196   1              pw.fpInitPro=InitPro02;
 197   1              pw.fpReadSign=ReadSign02;
 198   1              pw.fpErase=Erase02;
 199   1              pw.fpWrite=Write02;
 200   1              pw.fpRead=Read02;
 201   1              pw.fpLock=Lock02;
 202   1              pw.fpProOver=ProOver02;
 203   1      }
C51 COMPILER V7.07   AT89S51PRO                                                            10/28/2003 18:27:18 PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _SendInstrc (BEGIN)

⌨️ 快捷键说明

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