52单片机内部EEPROM
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit en=P2^7;
sbit rs=P2^6;
sbit rw=P2^5;
void delay(unsigned char z)
{
unsigned char j,i;
for (i=0;i for (j=0;j<110;j++) ; } /******************定义命令字节******************/ #define Read_COM 0x01 //字节读数据命令 #define Prog_COM 0x02 //字节编程数据命令 #define Erase_COM 0x03 //扇区擦除数据命令 #define En_Wait_TIME 0x81 //设置等待时间,并使能ISP/IAP #define Start_ADDRH 0x20 //扇区地址高位 #define Start_ADDRL 0x00 //扇区地址低位 /****************特殊功能寄存器声明****************/ sfr ISP_DATA = 0xe2; sfr ISP_ADDRH = 0xe3; sfr ISP_ADDRL = 0xe4; sfr ISP_CMD = 0xe5; sfr ISP_TRIG = 0xe6; sfr ISP_CONTR = 0xe7; /*****************关闭ISP&IAP功能*****************/ void ISP_IAP_disable(void) { ISP_CONTR = 0x00; ISP_CMD = 0x00; ISP_TRIG = 0x00; } /*********************字节读**********************/ uchar Byte_read(uint byte_addr) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间ISP_CMD = Read_COM; //送字节读命令字 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节 ISP_TRIG = 0x46; //送触发命令字0x46 ISP_TRIG = 0xB9; //送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; //开中断 return (ISP_DA TA); } /*********************字节编程*********************/ void Byte_program(uint byte_addr,uchar isp_iap_data) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间ISP_CMD = Prog_COM; //送字节编程命令字 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节 ISP_DATA = isp_iap_data; //送数据进ISP_DATA ISP_TRIG = 0x46; //送触发命令字0x46 ISP_TRIG = 0xB9; //送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; //开中断 } /*********************扇区擦除*********************/ void Sector_erase(uint sector_addr) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP;并送等待时间ISP_CMD = Erase_COM; //送扇区擦除命令字 ISP_ADDRH = (uchar)(sector_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(sector_addr & 0X00FF); //送地址低字节 ISP_TRIG = 0X46; //送触发命令字0x46 ISP_TRIG = 0XB9; //送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; } void main() { Sector_erase(0x2000); //扇区擦除 Byte_program(0x2000,0x88); //写EEPROM _nop_(); _nop_();