×
单片机 > 单片机程序设计 > 详情

STC89C52单片机内部EEPROM程序

发布时间:2021-12-20 发布时间:
|

实验外部存储期间不方便 看了内部有2K的数据


代码如下 .C文件可直接移植


#include

#include

#define Read 0x01 //读指令

#define Write 0x02 //写指令

#define Erase 0x03 //擦除指令

#define ENABLE_IAP 0x81 //速度20Mhz

//操作完成一次之后 进入待机模式 等待下一次命令 无ISP操作

void ISP_IAP_disable(void)

{

ISP_CONTR = 0x00;

ISP_CMD = 0x00;

ISP_TRIG = 0x00;

}

//读一个字节 addr是读的地址

unsigned char ReadEeProm(unsigned int addr)

{

unsigned char dat;

ISP_CONTR = ENABLE_IAP;

ISP_CMD = Read;

ISP_ADDRH = (unsigned char)(addr>>8);

ISP_ADDRL = (unsigned char)addr;

ISP_TRIG = 0x46;

ISP_TRIG = 0xB9;

_nop_();

ISP_IAP_disable();

dat = ISP_DATA;

return dat;

}

//擦除一个扇区的内容 addr擦除扇区的地址

void EraseEeProm(unsigned int addr)

{

ISP_CONTR = ENABLE_IAP;

ISP_CMD = Erase;

ISP_ADDRH = (unsigned char)(addr>>8);

ISP_ADDRL = (unsigned char)addr;

ISP_TRIG = 0x46;

ISP_TRIG = 0xB9;

_nop_();

ISP_IAP_disable();

}

//写一个字节的内容 addr地址 dat待写入数据

void WriteEeProm(unsigned int addr,unsigned char dat)

{

//EraseEeProm(addr); //一个字节需要先擦除这个扇区

ISP_CONTR = ENABLE_IAP;

ISP_CMD = Write;

ISP_ADDRH = (unsigned char)(addr>>8);

ISP_ADDRL = (unsigned char)addr;

ISP_DATA = dat;

ISP_TRIG = 0x46;

ISP_TRIG = 0xB9;

_nop_();

ISP_IAP_disable();

}

//连续读多个字节 *str存储读到数据缓冲区 addr从哪个地址开始读 len读多少个字节

void Reading(unsigned char *str,unsigned int addr,unsigned char len)

{

while(len--)

{

*str++ = ReadEeProm(addr++);

}

}

void ValToString(unsigned char *str,unsigned int dat)

{

unsigned char len = 0; //计算当前转换到多少

unsigned char buf[5];

do{

buf[len] = dat%10 + '0';

dat /=10;

len++;

}while(dat>0);

while(len--)

{

*str++ = buf[len];

}

*str = '


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析