答:
#define RdCommand 0x01 //读
#define PrgCommand 0x02 //写
#define EraseCommand 0x03 //扇区擦除数据命令
#define ENABLE_IAP 0X83// <12mhz
#define WaitTime 0x01 //定义CPU的等待时间,40M以下为0,20M以下为1,10M以下为2,5M以下为3
/*****ISP/IAP特殊功能寄存器声明********/
sfr ISP_DATA = 0xC2; // ISP/IAP操作时的数据寄存器。
sfr ISP_ADDRH = 0xC3; //Flash高字节地址寄存器
sfr ISP_ADDRL = 0xC4; //Flash低字节地址寄存器
sfr ISP_CMD = 0xC5; //Flash命令模式寄存器
sfr ISP_TRIG = 0xC6; //Flash命令触发寄存器
sfr ISP_CONTR = 0xC7; //ISP/IAP 控制寄存器
void ISP_IAP_Disable(void) //关闭ISP/IAP功能
{
ISP_CONTR=0;
ISP_CMD=0;
ISP_TRIG=0;
ISP_ADDRH=0;
ISP_ADDRL=0;
}
unsigned char Read_byte(unsigned int addr)
{
unsigned char dat;
ISP_CONTR=ENABLE_IAP; //使能isp
ISP_CMD=RdCommand; //读命令
ISP_ADDRL=addr;
ISP_ADDRH=addr>>8;
ISP_TRIG=0X5a; //触发命令
ISP_TRIG=0Xa5; //触发命令
nop();
dat=ISP_DATA; //读
ISP_IAP_Disable(); //关闭
return dat;
}
void Write_byte(unsigned int addr,unsigned char dat)
{
ISP_CONTR=ENABLE_IAP; //使能isp
ISP_CMD=PrgCommand; //写
ISP_ADDRL=addr;
ISP_ADDRH=addr>>8;
ISP_DATA=dat;
ISP_TRIG=0X5a; //触发命令
ISP_TRIG=0Xa5; //触发命令
_nop_();
ISP_IAP_Disable(); //关闭
}
void SectorErase(unsigned int addr)
{
ISP_CONTR=ENABLE_IAP; //使能isp
ISP_CMD=EraseCommand; //写
ISP_ADDRL=addr;
ISP_ADDRH=addr>>8;
ISP_TRIG=0X5a; //触发命令
ISP_TRIG=0Xa5; //触发命令
nop();
ISP_IAP_Disable(); //关闭
}
这是我stc15w系列的单片机eeprom读写例程 不知道15f能不能用