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

📄 stc_eeprom.lst

📁 步进电机控制的C程序
💻 LST
字号:
C51 COMPILER V8.08   STC_EEPROM                                                            12/21/2008 10:39:00 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE STC_EEPROM
OBJECT MODULE PLACED IN stc_eeprom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE stc_eeprom.c BROWSE DEBUG OBJECTEXTEND

line 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 "stc89c52rd.h"
  15          //#include <REG52.H>
  16          #include "STC89C52RD.h"
  17          
  18          #include <intrins.h>        /* use _nop_() function */
  19          //sfr16 DPTR = 0x82;
  20          /*
  21          //        新增特殊功能寄存器定义        //
  22          sfr      ISP_DATA       =   0xe2;
  23          sfr     ISP_ADDRH       =   0xe3;  
  24          sfr      ISP_ADDRL      =   0xe4;
  25          sfr      ISP_CMD        =   0xe5; 
  26          sfr      ISP_TRIG       =   0xe6;   
  27          sfr      ISP_CONTR    =   0xe7; 
  28          */
  29          unsigned int Begin_addr =0;
  30          
  31          // 定义命令 //
  32          #define READ_AP_and_Data_Memory_Command                         0x01        //  字节读数据存储区   //
  33          #define PROGRAM_AP_and_Data_Memory_Command          0x02        //  字节编程数据存储区 //
  34          #define SECTOR_ERASE_AP_and_Data_Memory_Command     0x03        //  扇区擦除数据存储区 //
  35          
  36          typedef     unsigned char       INT8U;          // 8 bit 无符号整型  //
  37          typedef     unsigned int    INT16U;     // 16 bit 无符号整型 //
  38          #define         DELAY_CONST     60000
  39          
  40          // 定义常量 //
  41          #define ERROR   0
  42          #define OK      1
  43          
  44          //sbit        Begin_LED       =         P1^0;
  45          //sbit        ERROR_LED       =       P1^3;
  46          //sbit        OK_LED                    =       P1^7;
  47          
  48          // 定义Flash 操作等待时间 //
  49          //#define        MCU_CLOCK_40MHz
  50          //#define         MCU_CLOCK_20MHz
  51          #define        MCU_CLOCK_10MHz
  52          //#define        MCU_CLOCK_5MHz
  53          #ifdef MCU_CLOCK_40MHz
                      #define WAIT_TIME        0x00
              #endif
C51 COMPILER V8.08   STC_EEPROM                                                            12/21/2008 10:39:00 PAGE 2   

  56          #ifdef MCU_CLOCK_20MHz
                      #define WAIT_TIME        0x01
              #endif
  59          #ifdef MCU_CLOCK_10MHz
  60                  #define WAIT_TIME        0x02
  61          #endif
  62          #ifdef MCU_CLOCK_5MHz
                      #define WAIT_TIME        0x03
              #endif
  65          
  66          /* 调试控制项 */
  67          //#define         DEBUG_STC89C_LE58RD
  68          
  69          #define         DEBUG_STC89C_LE52RC
  70          
  71          //#define USED_BYTE_QTY_IN_ONE_SECTOR                1
  72          //#define USED_BYTE_QTY_IN_ONE_SECTOR                2
  73          //#define USED_BYTE_QTY_IN_ONE_SECTOR                4
  74          //#define USED_BYTE_QTY_IN_ONE_SECTOR                8
  75          //#define USED_BYTE_QTY_IN_ONE_SECTOR                16
  76          //#define USED_BYTE_QTY_IN_ONE_SECTOR                32
  77          //#define USED_BYTE_QTY_IN_ONE_SECTOR                64
  78          #define USED_BYTE_QTY_IN_ONE_SECTOR                128
  79          //#define USED_BYTE_QTY_IN_ONE_SECTOR                256
  80          //#define USED_BYTE_QTY_IN_ONE_SECTOR                512
  81          
  82          //INT8U xdata protect_buffer[USED_BYTE_QTY_IN_ONE_SECTOR];
  83          
  84          #ifdef DEBUG_STC89C_LE58RD                        //STC89C58RD+,  89LE58RD+
                      #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
                              #define MAXNUM 9
              #endif
  92          #ifdef DEBUG_STC89C_LE52RC                        //STC89C52RC,        89LE52RC
  93                  #define DEBUG_AP_Memory_Begin_Sector_addr               0x0000
  94                  #define DEBUG_AP_Memory_End_Sector_addr                 0x1e00
  95                  #define DEBUG_AP_Memory_End_Byte_addr                   0x1fff
  96          
  97                  #define DEBUG_Data_Memory_Begin_Sector_addr             0x2000
  98                          #define  MAXNUM 7
  99          #endif
 100          
 101          
 102          /* 打开 ISP,IAP 功能 */
 103          void ISP_IAP_enable(void)
 104          {
 105   1              EA      =       0;      /* 关中断 */
 106   1              ISP_CONTR       =       ISP_CONTR & 0x18;       /* 0001,1000 */
 107   1              ISP_CONTR       =       ISP_CONTR | WAIT_TIME;
 108   1              ISP_CONTR       =       ISP_CONTR | 0x80;       /* 1000,0000 */
 109   1      }
 110          
 111          /* 关闭 ISP,IAP 功能 */
 112          void ISP_IAP_disable(void)
 113          {
 114   1              ISP_CONTR       =       ISP_CONTR & 0x7f;       /* 0111,1111 */
 115   1              ISP_TRIG        =       0x00;
 116   1              EA                      =   1;                  /* 开中断 */
 117   1      }
C51 COMPILER V8.08   STC_EEPROM                                                            12/21/2008 10:39:00 PAGE 3   

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

 180          
 181          void bytewrite (unsigned  int um, unsigned char dat)
 182          {
 183   1        bit res = EA;
 184   1        
 185   1        um =((um+1)<<MAXNUM) +DEBUG_Data_Memory_Begin_Sector_addr;
 186   1        EA=0;
 187   1        sector_erase(um);
 188   1        byte_program(um,dat);
 189   1        EA = res;
 190   1      }
 191          
 192          unsigned char byteread(unsigned int um)
 193          {
 194   1         unsigned int addr = ((1+um)<<MAXNUM)+DEBUG_Data_Memory_Begin_Sector_addr;
 195   1         return byte_read(addr);
 196   1      }
 197          
 198          /*
 199          void eepromtest()
 200          {
 201          
 202          
 203                  sector_erase(DEBUG_Data_Memory_Begin_Sector_addr);
 204                  if(byte_program_and_verify(DEBUG_Data_Memory_Begin_Sector_addr,0x55) == OK)
 205                          
 206                          
 207          
 208          }
 209            */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    200    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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