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

📄 at89c2051pro.lst

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


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

line level    source

   1          ///////////////////////////////////////////////////////////////////////////////////////////////////
   2          //FID=01:AT89C2051系列编程器
   3          //实现编程的读,写,擦等细节
   4          //AT89C2051的特殊处:给XTAL一个脉冲,地址计数加1;P1的引脚排列与AT89C51相反,需要用函数转换
   5          ///////////////////////////////////////////////////////////////////////////////////////////////////
   6          #include <e51pro.h>
   7          
   8          #define C2051_P3_7      P1_0
   9          #define C2051_P1        P0//注意引脚排列相反
  10          #define C2051_P3_0      P1_1
  11          #define C2051_P3_1      P1_2
  12          #define C2051_XTAL      P1_4
  13          #define C2051_P3_2      P1_5
  14          #define C2051_P3_3      P1_6
  15          #define C2051_P3_4      P1_7
  16          #define C2051_P3_5      P3_5
  17           
  18          void InitPro01()//编程前的准备工作
  19          {
  20   1              SetVpp0V();
  21   1              P0=0xff;
  22   1              P1=0xff;
  23   1              C2051_P3_5=1;
  24   1              C2051_XTAL=0;
  25   1              Delay_ms(20);
  26   1              nAddress=0x0000;
  27   1              SetVpp5V();
  28   1      }
  29          
  30          void ProOver01()//编程结束后的工作,设置合适的引脚电平
  31          {
  32   1              SetVpp5V();
  33   1              P0=0xff;
  34   1              P1=0xff;
  35   1              C2051_P3_5=1;
  36   1              C2051_XTAL=1;
  37   1      }
  38          
  39          BYTE GetData()//从P0口获得数据
  40          {
  41   1              B_0=P0_7;
  42   1              B_1=P0_6;
  43   1              B_2=P0_5;
  44   1              B_3=P0_4;
  45   1              B_4=P0_3;
  46   1              B_5=P0_2;
  47   1              B_6=P0_1;
  48   1              B_7=P0_0;
  49   1              return B;
  50   1      }
  51          
  52          void SetData(BYTE DataByte)//转换并设置P0口的数据
  53          {
  54   1              B=DataByte;
C51 COMPILER V7.50   AT89C2051PRO                                                          01/02/2008 14:26:02 PAGE 2   

  55   1              P0_0=B_7;
  56   1              P0_1=B_6;
  57   1              P0_2=B_5;
  58   1              P0_3=B_4;
  59   1              P0_4=B_3;
  60   1              P0_5=B_2;
  61   1              P0_6=B_1;
  62   1              P0_7=B_0;
  63   1      }
  64          
  65          
  66          void ReadSign01()//读特征字
  67          {
  68   1              InitPro01();
  69   1              Delay_ms(1);
  70   1      //-----------------------------------------------------------------------------
  71   1              //根据器件的DataSheet,设置相应的编程控制信号
  72   1              C2051_P3_3=0;
  73   1              C2051_P3_4=0;
  74   1              C2051_P3_5=0;
  75   1              C2051_P3_7=0;
  76   1              Delay_ms(20);
  77   1              ComBuf[2]=GetData();
  78   1              C2051_XTAL=1;
  79   1              C2051_XTAL=0;
  80   1              Delay_us(20);
  81   1              ComBuf[3]=GetData();
  82   1              ComBuf[4]=0xff;
  83   1      //-----------------------------------------------------------------------------
  84   1              ProOver01();
  85   1      }
  86          
  87          void Erase01()//擦除器件
  88          {
  89   1              InitPro01();
  90   1      //-----------------------------------------------------------------------------
  91   1              //根据器件的DataSheet,设置相应的编程控制信号
  92   1              C2051_P3_3=1;
  93   1              C2051_P3_4=0;
  94   1              C2051_P3_5=0;
  95   1              C2051_P3_7=0;
  96   1              Delay_ms(1);
  97   1              SetVpp12V();
  98   1              Delay_ms(1);
  99   1              C2051_P3_2=0;
 100   1              Delay_ms(10);
 101   1              C2051_P3_2=1;
 102   1              Delay_ms(1);
 103   1      //-----------------------------------------------------------------------------
 104   1              ProOver01();
 105   1      }
 106          
 107          BOOL Write01(BYTE Data)//写器件
 108          {
 109   1      //-----------------------------------------------------------------------------
 110   1              //根据器件的DataSheet,设置相应的编程控制信号
 111   1              //写一个单元
 112   1              C2051_P3_3=0;
 113   1              C2051_P3_4=1;
 114   1              C2051_P3_5=1;
 115   1              C2051_P3_7=1;
 116   1              SetData(Data);
C51 COMPILER V7.50   AT89C2051PRO                                                          01/02/2008 14:26:02 PAGE 3   

 117   1              SetVpp12V();
 118   1              Delay_us(20);
 119   1              C2051_P3_2=0;
 120   1              Delay_us(20);
 121   1              C2051_P3_2=1;
 122   1              Delay_us(20);
 123   1              SetVpp5V();
 124   1              Delay_us(20);
 125   1              C2051_P3_4=0;
 126   1              Delay_ms(2);
 127   1              nTimeOut=0;
 128   1              P0=0xff;
 129   1              nTimeOut=0;
 130   1              while(!GetData()==Data)//效验:循环读,直到读出与写入的数相同
 131   1              {
 132   2                      nTimeOut++;
 133   2                      if(nTimeOut>1000)//超时了
 134   2                      {
 135   3                              return 0;
 136   3                      }
 137   2              }
 138   1              C2051_XTAL=1;
 139   1              C2051_XTAL=0;//一个脉冲指向下一个单元
 140   1      //-----------------------------------------------------------------------------
 141   1              return 1;
 142   1      }
 143          
 144          BYTE Read01()//读器件
 145          {
 146   1              BYTE Data;
 147   1      //-----------------------------------------------------------------------------
 148   1              //根据器件的DataSheet,设置相应的编程控制信号
 149   1              //读一个单元
 150   1              C2051_P3_3=0;
 151   1              C2051_P3_4=0;
 152   1              C2051_P3_5=1;
 153   1              C2051_P3_7=1;
 154   1              Data=GetData();
 155   1              C2051_XTAL=1;
 156   1              C2051_XTAL=0;//一个脉冲指向下一个单元
 157   1      //-----------------------------------------------------------------------------
 158   1              return Data;
 159   1      }
 160          
 161          void Lock01()//写锁定位
 162          {
 163   1              InitPro01();//先设置成编程状态
 164   1      //-----------------------------------------------------------------------------
 165   1              //根据器件的DataSheet,设置相应的编程控制信号
 166   1              if(ComBuf[2]>=1)//ComBuf[2]为锁定位
 167   1              {
 168   2                      C2051_P3_3=1;
 169   2                      C2051_P3_4=1;
 170   2                      C2051_P3_5=1;
 171   2                      C2051_P3_7=1;
 172   2                      Delay_us(20);
 173   2                      SetVpp12V();
 174   2                      Delay_us(20);
 175   2                      C2051_P3_2=0;
 176   2                      Delay_us(20);
 177   2                      C2051_P3_2=1;
 178   2                      Delay_us(20);
C51 COMPILER V7.50   AT89C2051PRO                                                          01/02/2008 14:26:02 PAGE 4   

 179   2                      SetVpp5V();
 180   2              }
 181   1              if(ComBuf[2]>=2)
 182   1              {
 183   2                      C2051_P3_3=1;
 184   2                      C2051_P3_4=1;
 185   2                      C2051_P3_5=0;
 186   2                      C2051_P3_7=0;
 187   2                      Delay_us(20);
 188   2                      SetVpp12V();
 189   2                      Delay_us(20);
 190   2                      C2051_P3_2=0;
 191   2                      Delay_us(20);
 192   2                      C2051_P3_2=1;
 193   2                      Delay_us(20);
 194   2                      SetVpp5V();
 195   2              }
 196   1      //-----------------------------------------------------------------------------
 197   1              ProOver01();
 198   1      }
 199          
 200          void PreparePro01()//设置pw中的函数指针,让主程序可以调用上面的函数
 201          {
 202   1              pw.fpInitPro=InitPro01;
 203   1              pw.fpReadSign=ReadSign01;
 204   1              pw.fpErase=Erase01;
 205   1              pw.fpWrite=Write01;
 206   1              pw.fpRead=Read01;
 207   1              pw.fpLock=Lock01;
 208   1              pw.fpProOver=ProOver01;

⌨️ 快捷键说明

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