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

📄 eeprom.lst

📁 使用GSM传递卫星定位信息的源代码,适用于C51系列单片机.
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   EEPROM                                                                04/10/2006 16:28:24 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE EEPROM
OBJECT MODULE PLACED IN EEPROM.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe EEPROM.C DB SB OE ROM(LARGE) SMALL OT(8,SPEED) WL(2) RB(0)

stmt level    source

   1          /* ---  STC International Limited ---------------- */
   2          /* ---  宏晶科技 姚永平  设计 2004/9/11   V1.0 --- */
   3          /* ---  宏晶科技 姚永平  设计 2004/12/4   V2.0 --- */
   4          /* ---  RD+/RC系列   Flash IAP/ISP Operation ----- */
   5          /* ---  STC89C54RD+, STC89C58RD+,              --- */
   6          /* ---  STC89LE54RD+,STC89LE58RD+,              -- */
   7          /* ---  STC89C51RC,  STC89C52RC,             ----- */
   8          /* ---  STC89LE51RC, STC89LE52RC,             ---- */
   9          /* ---  Mobile: 13922805190 ---------------------- */
  10          /* ---  Fax: 0755-82944243 ----------------------- */
  11          /* ---  Tel: 0755-82908285 ----------------------- */
  12          /* ---  Web  : www.mcu-memory.com ---------------- */
  13          /* ---  感谢网友2004/12/3的指正,送样品以示感谢 --- */
  14          #include <reg52.h>
  15          #include <intrins.h>        /* use _nop_() function */
  16          //sfr16 DPTR = 0x82;
  17          
  18          /*        新增特殊功能寄存器定义        */
  19          sfr      ISP_DATA       =   0xe2;
  20          sfr  ISP_ADDRH  =   0xe3;  
  21          sfr      ISP_ADDRL      =   0xe4;
  22          sfr      ISP_CMD        =   0xe5; 
  23          sfr      ISP_TRIG       =   0xe6;   
  24          sfr      ISP_CONTR    =   0xe7; 
  25          
  26          
  27          /* 定义命令 */
  28          #define READ_AP_and_Data_Memory_Command                         0x01        /*  字节读数据存储区   */
  29          #define PROGRAM_AP_and_Data_Memory_Command          0x02        /*  字节编程数据存储区 */
  30          #define SECTOR_ERASE_AP_and_Data_Memory_Command     0x03        /*  扇区擦除数据存储区 */
  31          
  32          typedef     unsigned char       INT8U;          /* 8 bit 无符号整型  */
  33          typedef     unsigned int    INT16U;     /* 16 bit 无符号整型 */
  34          #define         DELAY_CONST         60000
  35          
  36          /* 定义常量 */
  37          #define ERROR   0
  38          #define OK      1
  39          
  40          sbit        Begin_LED       =           P1^0;
  41          sbit        ERROR_LED       =       P1^3;
  42          sbit        OK_LED                      =       P1^7;
  43          
  44          /* 定义Flash 操作等待时间 */
  45          #define        MCU_CLOCK_40MHz
  46          //#define        MCU_CLOCK_20MHz
  47          //#define        MCU_CLOCK_10MHz
  48          //#define        MCU_CLOCK_5MHz
  49          #ifdef MCU_CLOCK_40MHz
  50                  #define WAIT_TIME        0x00
  51          #endif
  52          #ifdef MCU_CLOCK_20MHz
                      #define WAIT_TIME        0x01
              #endif
  55          #ifdef MCU_CLOCK_10MHz
C51 COMPILER V7.06   EEPROM                                                                04/10/2006 16:28:24 PAGE 2   

                      #define WAIT_TIME        0x02
              #endif
  58          #ifdef MCU_CLOCK_5MHz
                      #define WAIT_TIME        0x03
              #endif
  61          
  62          /* 调试控制项 */
  63          //#define         DEBUG_STC89C_LE58RD+
  64          
  65          #define         DEBUG_STC89C_LE52RC
  66          
  67          //#define USED_BYTE_QTY_IN_ONE_SECTOR                1
  68          //#define USED_BYTE_QTY_IN_ONE_SECTOR                2
  69          //#define USED_BYTE_QTY_IN_ONE_SECTOR                4
  70          //#define USED_BYTE_QTY_IN_ONE_SECTOR                8
  71          //#define USED_BYTE_QTY_IN_ONE_SECTOR                16
  72          //#define USED_BYTE_QTY_IN_ONE_SECTOR                32
  73          //#define USED_BYTE_QTY_IN_ONE_SECTOR                64
  74          #define USED_BYTE_QTY_IN_ONE_SECTOR                128
  75          //#define USED_BYTE_QTY_IN_ONE_SECTOR                256
  76          //#define USED_BYTE_QTY_IN_ONE_SECTOR                512
  77          
  78          INT8U xdata protect_buffer[USED_BYTE_QTY_IN_ONE_SECTOR];
  79          
  80          #ifdef DEBUG_STC89C_LE58RD+                        //STC89C58RD+,  89LE58RD+
*** WARNING C323 IN LINE 80 OF EEPROM.C: newline expected, extra characters found
                      #define DEBUG_AP_Memory_Begin_Sector_addr               0x0000
                      #define DEBUG_AP_Memory_End_Sector_addr         0x7e00
                      #define DEBUG_AP_Memory_End_Byte_addr           0x7fff
              
                      #define DEBUG_Data_Memory_Begin_Sector_addr     0x8000
              #endif
  87          #ifdef DEBUG_STC89C_LE52RC                        //STC89C52RC,        89LE52RC
  88                  #define DEBUG_AP_Memory_Begin_Sector_addr               0x0000
  89                  #define DEBUG_AP_Memory_End_Sector_addr                 0x1e00
  90                  #define DEBUG_AP_Memory_End_Byte_addr                   0x1fff
  91          
  92                  #define DEBUG_Data_Memory_Begin_Sector_addr             0x2000
  93          #endif
  94          
  95          
  96          /* 打开 ISP,IAP 功能 */
  97          void ISP_IAP_enable(void)
  98          {
  99   1              EA      =       0;      /* 关中断 */
 100   1              ISP_CONTR       =       ISP_CONTR & 0x18;       /* 0001,1000 */
 101   1              ISP_CONTR       =       ISP_CONTR | WAIT_TIME;
 102   1              ISP_CONTR       =       ISP_CONTR | 0x80;       /* 1000,0000 */
 103   1      }
 104          
 105          /* 关闭 ISP,IAP 功能 */
 106          void ISP_IAP_disable(void)
 107          {
 108   1              ISP_CONTR       =       ISP_CONTR & 0x7f;       /* 0111,1111 */
 109   1              ISP_TRIG        =       0x00;
 110   1              EA                      =   1;                  /* 开中断 */
 111   1      }
 112          
 113          /* 字节读 */
 114          INT8U byte_read(INT16U byte_addr)
 115          {
 116   1              ISP_ADDRH       =       (INT8U)(byte_addr >> 8);
C51 COMPILER V7.06   EEPROM                                                                04/10/2006 16:28:24 PAGE 3   

 117   1              ISP_ADDRL       =       (INT8U)(byte_addr & 0x00ff);
 118   1      
 119   1              ISP_CMD         =       ISP_CMD &       0xf8;        /* 1111,1000 */
 120   1              ISP_CMD         =       ISP_CMD |       READ_AP_and_Data_Memory_Command;        /* 0000,0001 */
 121   1      
 122   1              ISP_IAP_enable();
 123   1      
 124   1              ISP_TRIG        =       0x46;
 125   1              ISP_TRIG        =       0xb9;
 126   1              _nop_();
 127   1      
 128   1              ISP_IAP_disable();
 129   1              return (ISP_DATA);
 130   1      }
 131          
 132          /* 扇区擦除 */
 133          INT8U sector_erase(INT16U sector_addr)
 134          {
 135   1              INT16U get_sector_addr  =       0;
 136   1              get_sector_addr                 =       (sector_addr & 0xfe00); /* 1111,1110,0000,0000; 取扇区地址 */
 137   1              ISP_ADDRH                       =       (INT8U)(get_sector_addr >> 8);
 138   1              ISP_ADDRL                       =       0x00;
 139   1      
 140   1              ISP_CMD =       ISP_CMD &       0xf8;   /* 1111,1000 */
 141   1              ISP_CMD =       ISP_CMD |       SECTOR_ERASE_AP_and_Data_Memory_Command;        /* 0000,0011 */
 142   1      
 143   1              ISP_IAP_enable();
 144   1              ISP_TRIG        =       0x46;        /* 触发ISP_IAP命令 */
 145   1              ISP_TRIG        =       0xb9;        /* 触发ISP_IAP命令 */
 146   1               _nop_();
 147   1      
 148   1              ISP_IAP_disable();
 149   1              return OK;
 150   1      }
 151          
 152          /* 字节编程 */
 153          INT8U byte_program(INT16U byte_addr, INT8U original_data)
 154          {
 155   1              ISP_ADDRH       =       (INT8U)(byte_addr >> 8);
 156   1              ISP_ADDRL       =       (INT8U)(byte_addr & 0x00ff);
 157   1      
 158   1              ISP_CMD         =       ISP_CMD &       0xf8;        /* 1111,1000 */
 159   1              ISP_CMD         =       ISP_CMD |       PROGRAM_AP_and_Data_Memory_Command;             /* 0000,0010 */
 160   1              ISP_DATA        =       original_data;
 161   1      
 162   1              ISP_IAP_enable();
 163   1              ISP_TRIG        =       0x46;        /* 触发ISP_IAP命令 */
 164   1              ISP_TRIG        =       0xb9;        /* 触发ISP_IAP命令 */
 165   1              _nop_();
 166   1      
 167   1              ISP_IAP_disable();
 168   1              return  OK;
 169   1      }
 170          
 171          /* 字节编程并校验 */
 172          INT8U byte_program_and_verify(INT16U byte_addr, INT8U original_data)
 173          {
 174   1              ISP_ADDRH       =       (INT8U)(byte_addr >> 8);
 175   1              ISP_ADDRL       =       (INT8U)(byte_addr & 0x00ff);
 176   1      
 177   1              ISP_CMD         =       ISP_CMD &       0xf8;        /* 1111,1000 */
 178   1              ISP_CMD         =       ISP_CMD |       PROGRAM_AP_and_Data_Memory_Command;     /* 0000,0010 */
C51 COMPILER V7.06   EEPROM                                                                04/10/2006 16:28:24 PAGE 4   

 179   1              ISP_DATA        =       original_data;
 180   1      
 181   1              ISP_IAP_enable();
 182   1      
 183   1              ISP_TRIG        =       0x46;
 184   1              ISP_TRIG        =       0xb9;
 185   1              _nop_();
 186   1      
 187   1              ISP_DATA        =       0x00;

⌨️ 快捷键说明

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