《STC单片机内部FLASH读写程序》由会员分享,可在线阅读,更多相关《STC单片机内部FLASH读写程序(5页珍藏版)》请在金锄头文库上搜索。
1、STCSTC 单片机内部单片机内部 FLASHFLASH 读写程序读写程序( (http:/http:/ )电子伙伴 发表于 2006-4-11 16:26:00/i nclude “STC89C51.h“/i nclude #define ERROR 0#define OK 1#define WAIT_TIME 0x00 /mcu clock 40mhz/#define WAIT_TIME 0x01 /mcu clock 20mhz/#define WAIT_TIME 0x02 /mcu clock 10mhz/#define WAIT_TIME 0x03 /mcu clock 5mhz#d
2、efine HOUR 0x8000#define MINUTE 0x8001void ISP_EN(void)EA = 0; / 关中断 ISP_CONTR = ISP_CONTR / 0001,1000ISP_CONTR = ISP_CONTR | WAIT_TIME;ISP_CONTR = ISP_CONTR | 0x80; / 1000,0000void ISP_DI(void)ISP_CONTR = ISP_CONTR / 0111,1111ISP_TRIG = 0x00;EA = 1; / 开中断unsigned char Byte_read(unsigned int byte_ad
3、dr)ISP_ADDRH = (unsigned char)(byte_addr 8);ISP_ADDRL = (unsigned char)(byte_addr ISP_CMD = ISP_CMD / 1111,1000ISP_CMD = ISP_CMD | 0x01; / 0000,0001 字节读数据存储区ISP_EN();ISP_TRIG = 0x46;ISP_TRIG = 0xb9;_nop_();ISP_DI();return (ISP_DATA);void Sector_erase(unsigned int Sector_addr)unsigned char addre;addr
4、e = (unsigned char)(Sector_addr 8); / 1111,1110,0000,0000; 取扇区地址ISP_ADDRH = addreISP_ADDRL = 0x00;ISP_CMD = ISP_CMD / 1111,1000ISP_CMD = ISP_CMD | 0x03; / 0000,0011 扇区擦除数据存储区ISP_EN();ISP_TRIG = 0x46; / 触发 ISP_IAP 命令ISP_TRIG = 0xb9; / 触发 ISP_IAP 命令_nop_();ISP_DI();void Byte_program(unsigned int byte_
5、addr, unsigned char DataBuf)ISP_ADDRH = (unsigned char)(byte_addr 8);ISP_ADDRL = (unsigned char)(byte_addr ISP_CMD = ISP_CMD / 1111,1000ISP_CMD = ISP_CMD | 0x02; / 0000,0010 字节编程数据存储区ISP_DATA = DataBuf;ISP_EN();ISP_TRIG = 0x46; / 触发 ISP_IAP 命令ISP_TRIG = 0xb9; / 触发 ISP_IAP 命令_nop_();ISP_DI();unsigned
6、 char ByteProgramVerify(unsigned int byte_addr, unsigned char DataBuf)ISP_ADDRH = (unsigned char)(byte_addr 8);ISP_ADDRL = (unsigned char)(byte_addr ISP_CMD = ISP_CMD / 1111,1000ISP_CMD = ISP_CMD | 0x02; / 0000,0010 字节编程数据存储区ISP_DATA = DataBuf;ISP_EN();ISP_TRIG = 0x46;ISP_TRIG = 0xb9;_nop_();ISP_DATA = 0x00;ISP_CMD = ISP_CMD / 1111,1000ISP_CMD = ISP_CMD | 0x01; / 0000,0001ISP_TRIG = 0x46; / 触发 ISP_IAP 命令ISP_TRIG = 0xb9; / 触发 ISP_IAP 命令_nop_();ISP_DI();if(ISP_DATA=DataBuf) return OK;else return ERROR;