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

📄 stc89c58rd+ flash-isp-iap.lst

📁 移植到51单片机的UIP代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.08   STC89C58RD__FLASH_ISP_IAP                                             05/13/2008 23:42:02 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE STC89C58RD__FLASH_ISP_IAP
OBJECT MODULE PLACED IN STC89C58RD+ FLASH-ISP-IAP.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE STC89C58RD+ FLASH-ISP-IAP.c LARGE 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 <reg52.h>
  15          #include <intrins.h>        /* use _nop_() function */
  16          #include "STC89C58RD+ FLASH-ISP-IAP.H"
  17          //sfr16 DPTR = 0x82;
  18          
  19          /*        新增特殊功能寄存器定义        */
  20          sfr      ISP_DATA       =   0xe2;
  21          sfr  ISP_ADDRH  =   0xe3;  
  22          sfr      ISP_ADDRL      =   0xe4;
  23          sfr      ISP_CMD        =   0xe5; 
  24          sfr      ISP_TRIG       =   0xe6;   
  25          sfr      ISP_CONTR    =   0xe7; 
  26          
  27          
  28          /* 定义命令 */
  29          #define READ_AP_and_Data_Memory_Command                         0x01        /*  字节读数据存储区   */
  30          #define PROGRAM_AP_and_Data_Memory_Command          0x02        /*  字节编程数据存储区 */
  31          #define SECTOR_ERASE_AP_and_Data_Memory_Command     0x03        /*  扇区擦除数据存储区 */
  32          
  33          #define         DELAY_CONST         60000
  34          
  35          /* 定义常量 */
  36          #define ERROR   0
  37          #define OK      1
  38          
  39          sbit        Begin_LED       =           P1^0;
  40          sbit        ERROR_LED       =       P1^3;
  41          sbit        OK_LED                      =       P1^7;
  42          
  43          /* 定义Flash 操作等待时间 */
  44          //#define        MCU_CLOCK_40MHz
  45          #define         MCU_CLOCK_20MHz
  46          //#define        MCU_CLOCK_10MHz
  47          //#define        MCU_CLOCK_5MHz
  48          #ifdef MCU_CLOCK_40MHz
                      #define WAIT_TIME        0x00
              #endif
  51          #ifdef MCU_CLOCK_20MHz
  52                  #define WAIT_TIME        0x01
  53          #endif
  54          #ifdef MCU_CLOCK_10MHz
                      #define WAIT_TIME        0x02
C51 COMPILER V8.08   STC89C58RD__FLASH_ISP_IAP                                             05/13/2008 23:42:02 PAGE 2   

              #endif
  57          #ifdef MCU_CLOCK_5MHz
                      #define WAIT_TIME        0x03
              #endif
  60          
  61          /* 调试控制项 */
  62          //#define         DEBUG_STC89C_LE58RD+
  63          
  64          #define         DEBUG_STC89C_LE52RC
  65          
  66          //#define USED_BYTE_QTY_IN_ONE_SECTOR                1
  67          //#define USED_BYTE_QTY_IN_ONE_SECTOR                2
  68          //#define USED_BYTE_QTY_IN_ONE_SECTOR                4
  69          //#define USED_BYTE_QTY_IN_ONE_SECTOR                8
  70          //#define USED_BYTE_QTY_IN_ONE_SECTOR                16
  71          //#define USED_BYTE_QTY_IN_ONE_SECTOR                32
  72          //#define USED_BYTE_QTY_IN_ONE_SECTOR                64
  73          #define USED_BYTE_QTY_IN_ONE_SECTOR                128
  74          //#define USED_BYTE_QTY_IN_ONE_SECTOR                256
  75          //#define USED_BYTE_QTY_IN_ONE_SECTOR                512
  76          
  77          INT8U xdata protect_buffer[USED_BYTE_QTY_IN_ONE_SECTOR];
  78          
  79          #ifdef DEBUG_STC89C_LE58RD+                        //STC89C58RD+,  89LE58RD+
*** WARNING C323 IN LINE 79 OF STC89C58RD+ FLASH-ISP-IAP.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
  86          #ifdef DEBUG_STC89C_LE52RC                        //STC89C52RC,        89LE52RC
  87                  #define DEBUG_AP_Memory_Begin_Sector_addr               0x0000
  88                  #define DEBUG_AP_Memory_End_Sector_addr                 0x1e00
  89                  #define DEBUG_AP_Memory_End_Byte_addr                   0x1fff
  90          
  91                  #define DEBUG_Data_Memory_Begin_Sector_addr             0x2000
  92          #endif
  93          
  94          
  95          /* 打开 ISP,IAP 功能 */
  96          void ISP_IAP_enable(void)
  97          {
  98   1              EA      =       0;      /* 关中断 */
  99   1              ISP_CONTR       =       ISP_CONTR & 0x18;       /* 0001,1000 */
 100   1              ISP_CONTR       =       ISP_CONTR | WAIT_TIME;
 101   1              ISP_CONTR       =       ISP_CONTR | 0x80;       /* 1000,0000 */
 102   1      }
 103          
 104          /* 关闭 ISP,IAP 功能 */
 105          void ISP_IAP_disable(void)
 106          {
 107   1              ISP_CONTR       =       ISP_CONTR & 0x7f;       /* 0111,1111 */
 108   1              ISP_TRIG        =       0x00;
 109   1              EA                      =   1;                  /* 开中断 */
 110   1      }
 111          
 112          /* 字节读 */
 113          INT8U byte_read(INT16U byte_addr)
 114          {
 115   1              ISP_ADDRH       =       (INT8U)(byte_addr >> 8);
 116   1              ISP_ADDRL       =       (INT8U)(byte_addr & 0x00ff);
C51 COMPILER V8.08   STC89C58RD__FLASH_ISP_IAP                                             05/13/2008 23:42:02 PAGE 3   

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

⌨️ 快捷键说明

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