STC89C52单片机自带4KB的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100 000次以上。
ISP(In System Programable)是指在线编程,通俗来讲,就是在片子已经焊接在板子上,不用取下来,就可以简单而方便的对其尽行编程,比如,我们通过计算机给STC单片机下载程序。
ISP_DATA: ISP/IAP操作时候的数据寄存器。ISP/IAP从Flash读出的数据放在此处,向Flash写入的数据也放在此处。
ISP_AFFRH/ADDRL: ISP/IAP操作时的地址寄存器的高低八位
ISP_TRIG: ISP/IAP操作时的命令触发寄存器。在ISPEN = 1时,对ISP_TRIG 先写入46H,再写入B9H,ISP/IAP 命令才会生效。
STC89C52RC,STC89LE52RC单片机内部可用的Data Flash(EEPROM)的地址如表所示:
RAM在程序运行过程中存放随机变量的数据空间。51单片机默认内部RAM只有128B;52单片机默认256B;STC89C52增加到512B ;
存储器模式一共有三种,分别为small、large、compact模式。
ISP_CONTR = ISP_CONTR & 0x18; //0x 0001 1000
ISP_CONTR = ISP_CONTR | WaitTime; //写入硬件延时
ISP_CONTR = ISP_CONTR | 0x80; //ISPEN = 1;
}
ISP_CONTR = ISP_CONTR & 0x7F; //ISPEN =0
unsigned chat byte_read(unsigned int byte_arrd)
ISP_ADDRH =(unsigned char)(byte_addr>>8);
ISP_ADDRL = (unsigned char)(byte_addr& 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; //清除低三位
ISP_CMD = ISP_CMD | RdCommand; //写入读命令
ISP_IAP_diasble(); //关闭ISP,IAP功能
void SectorErase(unsigned int sector_arrd)
unsigned int iSectorAddr = (sector_addr & xfe00);
ISP_ADDRH =(unsigned char)(iSectorAddr >> 8);
ISP_CMD = ISP_CMD & 0xf8; //清除低三位
ISP_CMD = ISP_CMD | EraseCommand; //写入读命令
ISP_IAP_diasble(); //关闭ISP,IAP功能
void byte_write(unsigned int byte_addr, unsigned char original_data)
ISP_ADDRH =(unsigned char)(byte_addr>>8);
ISP_ADDRL = (unsigned char)(byte_addr& 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; //清除低三位