/*STC89C51RC, STC89LE51RC 0x2000 共八个扇区
STC89C52RC, STC89LE52RC 0x2000 共八个扇区
STC89C54RD+,STC89LE54RD+ 0x8000 共五十八个扇区
STC89C55RD+,STC89LE55RD+ 0x8000 共五十八个扇区
STC89C58RD+,STC89LE58RD+ 0x8000 共五十八个扇区*/
#include<reg52.h>
#include<intrins.h>
//sfr 定义特殊功能寄存器
sfr ISP_DATA =0xe2;//ISP/IAP 操作时的数据寄存器,从 Flash 读出的数据放在此处,向 Flash
写的数据也需放在此处
sfr ISP_ADDRH =0xe3;//ISP/IAP 操作时的地址寄存器高八位
sfr ISP_ADDRL =0xe4;//ISP/IAP 操作时的地址寄存器低八位
sfr ISP_CMD =0xe5;//ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发
方可生效
sfr ISP_TRIG =0xe6;//ISP/IAP 操作时的命令触发寄存器
sfr ISP_CONTR =0xe7;//ISP/IAP 控制寄存器
/* 定义命令 */
#define uchar unsigned char /*8bit 无符号整型*/
#define uint unsigned int /*16bit 无符号整型*/
#define READ_AP_and_Data_Memory_Command 0x01 /*字节读数据存储区*/
#define PROGRAM_AP_and_Data_Memory_Command 0x02 /*字节编程数据存储区*/
#define SECTOR_ERASE_AP_and_Data_Memory_Command 0x03 /*扇区擦除数据存储*/
#define DEBUG_Data_Memory_Begin_Sector_addr 0x2000//扇区地址
#define DELAY_CONST 60000//延时
#define WAIT_TIME 0x01
uchar num;
/* 打开 ISP,IAP 功能 */
void ISP_IAP_enable(void)
{
EA=0;/* 关中断 */
ISP_CONTR=ISP_CONTR & 0x18; /* 0001,1000 */
ISP_CONTR=ISP_CONTR|WAIT_TIME;
ISP_CONTR=ISP_CONTR|0x80; /* 1000,0000 */
}
/* 关闭 ISP,IAP 功能 */
void ISP_IAP_disable(void)
{
ISP_CONTR=ISP_CONTR&0x7f;/* 0111,1111 */
ISP_TRIG=0x00;
EA=1;/* 开中断 */
评论5