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

📄 at89c51pro.lst

📁 AT89系列单片机ISP在线编程的AT89C2051的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   AT89C51PRO                                                            01/02/2008 14:26:02 PAGE 1   


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

line level    source

   1          ///////////////////////////////////////////////////////////////////////////////////////////////////
   2          //FID=00:AT89C51系列编程器
   3          //实现编程的读,写,擦等细节
   4          ///////////////////////////////////////////////////////////////////////////////////////////////////
   5          
   6          #include <e51pro.h>
   7          
   8          void InitPro00()//编程前的准备工作
   9          {
  10   1              SetVpp5V();
  11   1              P3_5=1;//p3.5接RST
  12   1              P3_2=1;//p3.2接PROG
  13   1              P0=0xff;
  14   1              P1=0xff;
  15   1              P2=0xff;
  16   1              P2_6=0;//先置成读模式
  17   1              P2_7=0;
  18   1              P3_6=1;
  19   1              P3_7=1;
  20   1              nAddress=0x0000;
  21   1      }
  22          
  23          void ProOver00()//编程结束后的工作,设置合适的引脚电平
  24          {
  25   1              SetVpp5V();
  26   1              P0=0xff;
  27   1              P1=0xff;
  28   1              P2=0xff;
  29   1              P3_6=1;
  30   1              P3_7=1;
  31   1              P3_5=0;//RST=0;
  32   1              P3_2=0;//PROG=0
  33   1      }
  34          
  35          void ReadSign00()//读特征字
  36          {
  37   1              InitPro00();//先设置成编程状态
  38   1              Delay_ms(1);
  39   1      //-----------------------------------------------------------------------------
  40   1              //根据器件的DataSheet,设置相应的编程控制信号
  41   1              P2_6=0;
  42   1              P2_7=0;
  43   1              P3_6=0;
  44   1              P3_7=0;
  45   1              nAddress=0x0030;
  46   1              P1=((BYTE*)(&nAddress))[1];//低地址
  47   1              P2=((BYTE*)(&nAddress))[0];//高地址
  48   1              ComBuf[2]=P0;//读第1个特征字
  49   1              nAddress=0x0031;
  50   1              P1=((BYTE*)(&nAddress))[1];
  51   1              P2=((BYTE*)(&nAddress))[0];
  52   1              ComBuf[3]=P0;//读第2个特征字
  53   1              nAddress=0x0032;
  54   1              P1=((BYTE*)(&nAddress))[1];
C51 COMPILER V7.50   AT89C51PRO                                                            01/02/2008 14:26:02 PAGE 2   

  55   1              P2=((BYTE*)(&nAddress))[0];
  56   1              ComBuf[4]=P0;//读第3个特征字
  57   1      //-----------------------------------------------------------------------------
  58   1              ProOver00();//操作结束设置为运行状态
  59   1      }
  60          
  61          void Erase00()//擦除器件
  62          {
  63   1              InitPro00();
  64   1      //-----------------------------------------------------------------------------
  65   1              //根据器件的DataSheet,设置相应的编程控制信号
  66   1              P2_6=1;
  67   1              P2_7=0;
  68   1              P3_6=0;
  69   1              P3_7=0;
  70   1              Delay_ms(1);
  71   1              SetVpp12V();
  72   1              Delay_ms(1);
  73   1              P3_2=0;
  74   1              Delay_ms(10);
  75   1              P3_2=1;
  76   1              Delay_ms(1);
  77   1      //-----------------------------------------------------------------------------
  78   1              ProOver00();
  79   1      }
  80          
  81          BOOL Write00(BYTE Data)//向器件写一个字节
  82          {
  83   1              
  84   1      //-----------------------------------------------------------------------------
  85   1              //根据器件的DataSheet,设置相应的编程控制信号
  86   1              //写一个单元
  87   1              P2=((BYTE*)(&nAddress))[0];//高地址
  88   1              P1=((BYTE*)(&nAddress))[1];//低地址
  89   1              P2_6=0;
  90   1              P2_7=1;
  91   1              P3_6=1;
  92   1              P3_7=1;
  93   1              P3_2=1;
  94   1              P0=Data;
  95   1              SetVpp12V();
  96   1              Delay_us(20);
  97   1              P3_2=0;
  98   1              Delay_us(20);
  99   1              P3_2=1;
 100   1              Delay_us(20);
 101   1              SetVpp5V();
 102   1              Delay_us(20);
 103   1              P2_7=0;
 104   1              Delay_ms(2);
 105   1              nTimeOut=0;
 106   1              P0=0xff;
 107   1              nTimeOut=0;
 108   1              while(P0!=Data)//效验:循环读,直到读出与写入的数相同
 109   1              {
 110   2                      nTimeOut++;
 111   2                      if(nTimeOut>1000)//超时了,写失败
 112   2                      {
 113   3                              return 0;
 114   3                      }
 115   2                                      
 116   2              }
C51 COMPILER V7.50   AT89C51PRO                                                            01/02/2008 14:26:02 PAGE 3   

 117   1              return 1;
 118   1      //-----------------------------------------------------------------------------
 119   1      }
 120          
 121          BYTE Read00()//从器件读一个字节
 122          {
 123   1              P1=((BYTE*)(&nAddress))[1];//低地址
 124   1              P2=((BYTE*)(&nAddress))[0];//高地址
 125   1              P2_6=0;
 126   1              P2_7=0;
 127   1              P3_6=1;
 128   1              P3_7=1;
 129   1              return P0;
 130   1      }
 131          
 132          void Lock00()//写锁定位
 133          {
 134   1              InitPro00();
 135   1      //-----------------------------------------------------------------------------
 136   1              //根据器件的DataSheet,设置相应的编程控制信号
 137   1              if(ComBuf[2]>=1)//ComBuf[2]为锁定位
 138   1              {
 139   2                      P2_6=1;
 140   2                      P2_7=1;
 141   2                      P3_6=1;
 142   2                      P3_7=1;
 143   2                      Delay_us(20);
 144   2                      SetVpp12V();
 145   2                      Delay_us(20);
 146   2                      P3_2=0;
 147   2                      Delay_us(20);
 148   2                      P3_2=1;
 149   2                      Delay_us(20);
 150   2                      SetVpp5V();
 151   2              }
 152   1              if(ComBuf[2]>=2)
 153   1              {
 154   2                      P2_6=1;
 155   2                      P2_7=1;
 156   2                      P3_6=0;
 157   2                      P3_7=0;
 158   2                      Delay_us(20);
 159   2                      SetVpp12V();
 160   2                      Delay_us(20);
 161   2                      P3_2=0;
 162   2                      Delay_us(20);
 163   2                      P3_2=1;
 164   2                      Delay_us(20);
 165   2                      SetVpp5V();
 166   2              }
 167   1              if(ComBuf[2]==3)
 168   1              {
 169   2                      P2_6=1;
 170   2                      P2_7=0;
 171   2                      P3_6=1;
 172   2                      P3_7=0;
 173   2                      Delay_us(20);
 174   2                      SetVpp12V();
 175   2                      Delay_us(20);
 176   2                      P3_2=0;
 177   2                      Delay_us(20);
 178   2                      P3_2=1;
C51 COMPILER V7.50   AT89C51PRO                                                            01/02/2008 14:26:02 PAGE 4   

 179   2                      Delay_us(20);
 180   2                      SetVpp5V();
 181   2              }
 182   1      //-----------------------------------------------------------------------------
 183   1              ProOver00();
 184   1      }
 185          
 186          void PreparePro00()//设置pw中的函数指针,让主程序可以调用上面的函数
 187          {
 188   1              pw.fpInitPro=InitPro00;
 189   1              pw.fpReadSign=ReadSign00;
 190   1              pw.fpErase=Erase00;
 191   1              pw.fpWrite=Write00;
 192   1              pw.fpRead=Read00;
 193   1              pw.fpLock=Lock00;
 194   1              pw.fpProOver=ProOver00;
 195   1      }
 196          
 197          
C51 COMPILER V7.50   AT89C51PRO                                                            01/02/2008 14:26:02 PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION InitPro00 (BEGIN)
                                           ; SOURCE LINE # 8
                                           ; SOURCE LINE # 9
                                           ; SOURCE LINE # 10
0000 120000      E     LCALL   SetVpp5V
                                           ; SOURCE LINE # 11
0003 D2B5              SETB    P3_5
                                           ; SOURCE LINE # 12
0005 D2B2              SETB    P3_2
                                           ; SOURCE LINE # 13
0007 7580FF            MOV     P0,#0FFH
                                           ; SOURCE LINE # 14
000A 7590FF            MOV     P1,#0FFH
                                           ; SOURCE LINE # 15
000D 75A0FF            MOV     P2,#0FFH
                                           ; SOURCE LINE # 16
0010 C2A6              CLR     P2_6
                                           ; SOURCE LINE # 17
0012 C2A7              CLR     P2_7
                                           ; SOURCE LINE # 18
0014 D2B6              SETB    P3_6
                                           ; SOURCE LINE # 19
0016 D2B7              SETB    P3_7
                                           ; SOURCE LINE # 20
0018 E4                CLR     A
0019 F500        E     MOV     nAddress,A
001B F500        E     MOV     nAddress+01H,A
                                           ; SOURCE LINE # 21
001D 22                RET     
             ; FUNCTION InitPro00 (END)

             ; FUNCTION ProOver00 (BEGIN)
                                           ; SOURCE LINE # 23
                                           ; SOURCE LINE # 24
                                           ; SOURCE LINE # 25
0000 120000      E     LCALL   SetVpp5V
                                           ; SOURCE LINE # 26
0003 7580FF            MOV     P0,#0FFH
                                           ; SOURCE LINE # 27
0006 7590FF            MOV     P1,#0FFH
                                           ; SOURCE LINE # 28
0009 75A0FF            MOV     P2,#0FFH
                                           ; SOURCE LINE # 29
000C D2B6              SETB    P3_6
                                           ; SOURCE LINE # 30
000E D2B7              SETB    P3_7
                                           ; SOURCE LINE # 31
0010 C2B5              CLR     P3_5
                                           ; SOURCE LINE # 32
0012 C2B2              CLR     P3_2
                                           ; SOURCE LINE # 33
0014 22                RET     
             ; FUNCTION ProOver00 (END)

             ; FUNCTION ReadSign00 (BEGIN)
                                           ; SOURCE LINE # 35
                                           ; SOURCE LINE # 36
                                           ; SOURCE LINE # 37
0000 120000      R     LCALL   InitPro00
C51 COMPILER V7.50   AT89C51PRO                                                            01/02/2008 14:26:02 PAGE 6   

                                           ; SOURCE LINE # 38
0003 7F01              MOV     R7,#01H
0005 7E00              MOV     R6,#00H
0007 120000      E     LCALL   _Delay_ms
                                           ; SOURCE LINE # 41
000A C2A6              CLR     P2_6
                                           ; SOURCE LINE # 42
000C C2A7              CLR     P2_7
                                           ; SOURCE LINE # 43
000E C2B6              CLR     P3_6
                                           ; SOURCE LINE # 44
0010 C2B7              CLR     P3_7
                                           ; SOURCE LINE # 45
0012 750000      E     MOV     nAddress,#00H
0015 750030      E     MOV     nAddress+01H,#030H
                                           ; SOURCE LINE # 46
0018 850090      E     MOV     P1,nAddress+01H
                                           ; SOURCE LINE # 47
001B 8500A0      E     MOV     P2,nAddress
                                           ; SOURCE LINE # 48
001E 858000      E     MOV     ComBuf+02H,P0
                                           ; SOURCE LINE # 49
0021 750000      E     MOV     nAddress,#00H
0024 750031      E     MOV     nAddress+01H,#031H
                                           ; SOURCE LINE # 50
0027 850090      E     MOV     P1,nAddress+01H
                                           ; SOURCE LINE # 51
002A 8500A0      E     MOV     P2,nAddress
                                           ; SOURCE LINE # 52
002D 858000      E     MOV     ComBuf+03H,P0
                                           ; SOURCE LINE # 53
0030 750000      E     MOV     nAddress,#00H
0033 750032      E     MOV     nAddress+01H,#032H
                                           ; SOURCE LINE # 54
0036 850090      E     MOV     P1,nAddress+01H
                                           ; SOURCE LINE # 55
0039 8500A0      E     MOV     P2,nAddress
                                           ; SOURCE LINE # 56
003C 858000      E     MOV     ComBuf+04H,P0

⌨️ 快捷键说明

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