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

📄 stc_e2prom.lst

📁 proteus电子钟(带闹钟数码管显示)
💻 LST
字号:
C51 COMPILER V8.02   STC_E2PROM                                                            07/07/2008 18:58:00 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE STC_E2PROM
OBJECT MODULE PLACED IN Stc_E2prom.obj
COMPILER INVOKED BY: C:\Keil3\C51\BIN\C51.EXE software\Stc_E2prom.c BROWSE DEBUG OBJECTEXTEND PRINT(.\Stc_E2prom.lst) OB
                    -JECT(Stc_E2prom.obj)

line level    source

   1          /*------------------------------------------------------------------------------------------------*-   
   2           *File Name:    STC_EEPROM.c                                   
   3           *Description:  IAP/ISP 功能                     
   4           *Project:                                                       
   5           *MCU type:     STC12C1052                                                                           
   6           *Compiler:     KEIL C51                                             
   7          -*------------------------------------------------------------------------------------------------*/
   8          
   9          
  10          
  11          #include "main.H"
  12          #include "stc_e2prom.h"
  13          
  14          /* IAP有关功能寄存器 */
  15          sfr ISP_DATA  = 0xE2;
  16          sfr ISP_ADDRH = 0xE3;
  17          sfr ISP_ADDRL = 0xE4;
  18          sfr ISP_CMD   = 0xE5;
  19          sfr ISP_TRIG  = 0xE6;
  20          sfr ISP_CONTR = 0xE7;
  21          
  22          // 定义常量
  23          // ISP/IAP操作时的命令
  24          #define ISP_IAP_BYTE_READ               1               // 字节读
  25          #define ISP_IAP_BYTE_PROGRAM    2               // 字节编程,前提是该字节为空,0xff
  26          #define ISP_IAP_SECTOR_ERASE    3               // 扇区擦除,要某字节为空,要擦一扇区
  27          
  28          // 设置读/编程/扇区擦除等待时间
  29          //#define E2PRAM_WAIT_TIME              7               // < 1 MHz
  30          //#define E2PRAM_WAIT_TIME              6               // < 2 MHz
  31          //#define E2PRAM_WAIT_TIME              5               // < 3 MHz
  32          //#define E2PRAM_WAIT_TIME              4               // < 6 MHz
  33          #define E2PRAM_WAIT_TIME                3               // < 12MHz
  34          //#define E2PRAM_WAIT_TIME              2               // < 20MHz
  35          //#define E2PRAM_WAIT_TIME              1               // < 24MHz
  36          //#define E2PRAM_WAIT_TIME              0               // < 30MHz
  37          
  38          #define ISP_EN  0x80                                    // ISP/IAP功能允许
  39          
  40          // DATA Flash 存储的起始地址
  41          #define E2p_START_ADDR  0x1000                  // stc12c1052
  42          #define Sector_Size 512                                 // 扇区大小
  43          /*------------------------------------------------------------------------------------------------*-  
  44           * 函数名称: From_e2p_Read_Byte()
  45           * 参    数: 内部E2PROM地址
  46           * 返    回: 从内部E2PROM的指定地址中读出数据
  47           * 函数功能: 从内部E2PROM中读出一字节数据
  48           *              
  49           * 说    明: 页地址0~512,为了提高处理速度,最好用0~256的范围
  50           *
  51           * 当前版本: V1.0               * 取代版本:
  52           * 作     者: 吴水林            * 修     改:  
  53           * 版本信息: 2008-02-17         * 修改信息: 
  54          -*------------------------------------------------------------------------------------------------*/
C51 COMPILER V8.02   STC_E2PROM                                                            07/07/2008 18:58:00 PAGE 2   

  55          unsigned char From_e2p_Read_Byte(unsigned int address)
  56          {
  57   1              unsigned char ucData;
  58   1              address   = address + E2p_START_ADDR;
  59   1              ISP_ADDRL = ((unsigned char *)(&address))[LOW];
  60   1              ISP_ADDRH = ((unsigned char *)(&address))[HIGH];
  61   1              ISP_CONTR = ISP_EN | E2PRAM_WAIT_TIME;
  62   1              // 发送字节读命令
  63   1              ISP_CMD   = ISP_IAP_BYTE_READ;
  64   1              ISP_TRIG  = 0x46;               // 发ISP处理
  65   1              ISP_TRIG  = 0xb9;
  66   1              
  67   1              ucData    = ISP_DATA;   // 读扇区
  68   1              _nop_();        
  69   1              _nop_();
  70   1              // 关闭IAP功能,清ISP有关的特殊功能寄存器
  71   1              ISP_CONTR = 0;
  72   1              ISP_CMD   = 0;
  73   1              ISP_TRIG  = 0;
  74   1              return ucData;
  75   1      }
  76          /*------------------------------------------------------------------------------------------------*-  
  77           * 函数名称: To_e2p_Write_Byte()
  78           * 参    数: address    内部E2PROM地址
  79           *                       ucData         待写入的数据
  80           * 返    回: ***
  81           * 函数功能: 向内部E2PROM的指定地址写入一字节数据
  82           *           注:该字节必须为 0xff/空时,可对其编程,否则先要执行扇区擦写
  83           *  
  84           * 说    明: 页地址0~512,为了提高处理速度,最好用0~256的范围
  85           *
  86           * 当前版本: V1.0               * 取代版本:
  87           * 作     者: 吴水林            * 修    改:  
  88           * 版本信息: 2008-02-17         * 修改信息: 
  89          -*------------------------------------------------------------------------------------------------*/
  90          void To_e2p_Write_Byte(unsigned int address, const unsigned char ucData)
  91          {
  92   1              ISP_DATA = ucData;
  93   1              address   = address + E2p_START_ADDR;
  94   1              ISP_ADDRL = ((unsigned char *)(&address))[LOW];
  95   1              ISP_ADDRH = ((unsigned char *)(&address))[HIGH];
  96   1              ISP_CONTR = ISP_EN | E2PRAM_WAIT_TIME;
  97   1              // 发送字节编程命令
  98   1              ISP_CMD   = ISP_IAP_BYTE_PROGRAM;
  99   1              ISP_TRIG  = 0x46;       // 发ISP处理
 100   1              ISP_TRIG  = 0xb9;
 101   1              _nop_();
 102   1              ISP_DATA  = ucData;     // 写扇区
 103   1              // 关闭IAP功能,清ISP有关的特殊功能寄存器
 104   1              ISP_CONTR = 0;
 105   1              ISP_CMD   = 0;
 106   1              ISP_TRIG  = 0;
 107   1      }
 108          
 109          /*------------------------------------------------------------------------------------------------*-  
 110           * 函数名称: Sector_Erase()
 111           * 参    数: SectorPage 内部E2PROM页
 112           *                       
 113           * 返    回: ***
 114           * 函数功能: 没有字节擦除,只有扇区擦除,512字节/扇区
 115           *           注:如要保留其中某些字节的内部,则需将其行读入单片机的RAM中,
 116           *                              将扇区擦除后,再将数据写回到该扇区
C51 COMPILER V8.02   STC_E2PROM                                                            07/07/2008 18:58:00 PAGE 3   

 117           *  
 118           * 说    明: 扇区中任意一个字节的地址都是该扇区的地址,无需求出首地址
 119           *
 120           * 当前版本: V1.0               * 取代版本:
 121           * 作     者: 吴水林            * 修    改:  
 122           * 版本信息: 2008-02-17         * 修改信息: 
 123          -*------------------------------------------------------------------------------------------------*/
 124          void Sector_Erase(const unsigned char SectorPage)
 125          {
 126   1              unsigned int address; 
 127   1              address   = E2p_START_ADDR + (SectorPage * Sector_Size)-1;
 128   1              ISP_ADDRL = ((unsigned char *)(&address))[LOW];
 129   1              ISP_ADDRH = ((unsigned char *)(&address))[HIGH];
 130   1              ISP_CONTR = ISP_EN | E2PRAM_WAIT_TIME;
 131   1              // 发送扇区擦除命令
 132   1              ISP_CMD   = ISP_IAP_SECTOR_ERASE;
 133   1              ISP_TRIG  = 0x46;       // 发ISP处理
 134   1              ISP_TRIG  = 0xb9;
 135   1              _nop_();
 136   1              // 关闭IAP功能,清ISP有关的特殊功能寄存器
 137   1              ISP_CONTR = 0;
 138   1              ISP_CMD   = 0;
 139   1              ISP_TRIG  = 0;
 140   1      }
 141          
 142          
 143          
 144          
 145           
 146          


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