实验外部存储期间不方便 看了内部有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 = '
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』