如何把数组写入并读出C52单片机的EEPROM

如题所述

/* 建议你直接看数据手册,有的数据手册上都给出例程的(如STC)。下面我给你个STC89系列的例程,你可以参考一下。如想深度研究就对着代码看数据手册,如直想用的话,直接拿来用就行。*/

# include <reg52.h>
# include <intrins.h>

# define RdCommand 0x01 //定义ISP的操作命令
# define PrgCommand 0x02
# define EraseCommand 0x03
# define WaitTime 0x01 //定义CPU的等待时间 @11.0592MHz
# define Error 1
# define Ok 0

sfr ISP_DATA = 0xE2; //寄存器申明
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE5;
sfr ISP_TRIG = 0xE6;
sfr ISP_CONTR = 0xE7;

void ISP_IAP_enable(void) // 打开 ISP,IAP 功能
{
EA = 0; // 关中断
ISP_CONTR = ISP_CONTR & 0x18; // 0001,1000
ISP_CONTR = ISP_CONTR | WaitTime; // 写入硬件延时
ISP_CONTR = ISP_CONTR | 0x80; // ISPEN=1
}

void ISP_IAP_disable(void) // 关闭 ISP,IAP 功能
{
ISP_CONTR = ISP_CONTR & 0x7F; // ISPEN = 0
ISP_TRIG = 0x00;
EA = 1; // 开中断
}

void ISPgoon(void) // 公用的触发代码
{
ISP_IAP_enable(); // 打开 ISP,IAP 功能
ISP_TRIG = 0x46; // 触发ISP_IAP命令字节1
ISP_TRIG = 0xB9; // 触发ISP_IAP命令字节2
_nop_(); // 延时一个机器周期
}

unsigned char byte_read(unsigned int byte_addr) // 读字节
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8); // 地址赋值
ISP_ADDRL = (unsigned char)(byte_addr & 0x00FF);
ISP_CMD = ISP_CMD & 0xF8; // 清除低3位
ISP_CMD = ISP_CMD | RdCommand; // 写入读命令
ISPgoon(); // 触发执行
ISP_IAP_disable(); // 关闭ISP,IAP功能
return (ISP_DATA); // 返回读到的数据
}

void SectorErase(unsigned int sector_addr) //扇区擦除
{
// unsigned int iSectorAddr;

// iSectorAddr = (sector_addr & 0xFE00); // 取扇区地址
// ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
// ISP_ADDRL = 0x00;
ISP_ADDRH = (unsigned char)(sector_addr >> 8); // 取扇区地址高8位
ISP_ADDRL = (unsigned char)sector_addr; // 取扇区地址低8位
ISP_CMD = ISP_CMD & 0xF8; // 清空低3位
ISP_CMD = ISP_CMD | EraseCommand; // 擦除命令3
ISPgoon(); // 触发执行
ISP_IAP_disable(); // 关闭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; // 清低3位
ISP_CMD = ISP_CMD | PrgCommand; // 写命令2
ISP_DATA = original_data; // 写入数据准备
ISPgoon(); // 触发执行
ISP_IAP_disable(); // 关闭IAP功能
}
温馨提示:答案为网友推荐,仅供参考
相似回答