📄 eeprom.c
字号:
#include"reg52.h"
unsigned char read(unsigned char ADDRH,unsigned char ADDRL);
void write(unsigned char ADDRH,unsigned char *p,unsigned char k);
void erase(unsigned char ADDRH);
void Delay0()
{
unsigned char j;
for(j=0;j<0xff;j++);
}
///////////////////eprom start
void write_eight_byte(unsigned char *p,unsigned char ADDRH)
{
unsigned char i;
// EA=0;
erase(ADDRH); //擦除
ISP_ADDRH=ADDRH;
ISP_ADDRL=0x00;
ISP_DATA=0x3f;
ISP_CONTR=0x8b;
ISP_CMD=2;
ISP_TRIG=0x46; //触发ISP/IAP
ISP_TRIG=0xb9;
ISP_ADDRL++; //地址+1;
Delay0();
for(i=0;i<8;i++)
{
ISP_DATA=p[i];
ISP_CONTR=0x8b;
ISP_CMD=2;
ISP_TRIG=0x46; //触发ISP/IAP
ISP_TRIG=0xb9;
ISP_ADDRL++; //地址+1;
Delay0();
}
// EA=1;
}
unsigned char read(unsigned char ADDRH,unsigned char ADDRL) //ADDRH 范围0x28-0x2f ADDL"0-255"
{
ISP_ADDRH=ADDRH; //ISP/IAP控制寄存器
ISP_ADDRL=ADDRL;
ISP_CONTR=0x8b;
ISP_CMD=1; //送字节读命令
ISP_TRIG=0x46;
ISP_TRIG=0xb9; //触发ISP/IAP
Delay0();
return ISP_DATA;
}
/***********擦除**************/
void erase(unsigned char ADDRH)
{
unsigned char i=0;
for(i=0;i<9;i++)
{
ISP_ADDRH=ADDRH;
ISP_ADDRL=i;
ISP_CONTR=0x8b;
ISP_CMD=3;
ISP_TRIG=0x46; //触发ISP/IAP
ISP_TRIG=0xb9;
Delay0();
}
}
unsigned char read_eight_byte(unsigned char *p,unsigned char ADRH)
{
unsigned char i=0,j=0;
// EA=0;
if(read(ADRH,0)!=0x3f)
{
for(i=0;i<4;i++)
{
*(p+i*2)=0xa1;
*(p+i*2+1)=0xa1;
}
return(0);
}
Delay0();
for(i=0;i<4;i++)
{
*(p+i*2)=read(ADRH,i*2+1);
*(p+i*2+1)=read(ADRH,i*2+2);
if(*(p+i*2)!=0xa1||*(p+i*2+1)!=0xa1)
j++;
Delay0();
}
// EA=1;
return(j);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -