27,520
社区成员
发帖
与我相关
我的任务
分享
********************************************************************************/
typedef unsigned int UINT;
typedef unsigned char BYTE;
typedef bit BOOL;
/********************************************************************************
********************************************************************************/
#define BYTES_EACH_SECTOR 512 //MCU EEPROM每扇区的字节数
#define WAIT_TIME 0
#define USEING_EACH_SECTOR 512 //计划每扇区要用的字节数,用量越小写速度越快
#define EEPROM_ADDR_START 0x2000 //EEPROM起始地址
#define EEPROM_ADDR_END 0x2fff //EEPROM结束地址
unsigned int EEPROM_WritByte(UINT addr, BYTE *buf)
{
BOOL old_EA;
if ((addr < EEPROM_ADDR_START) || (addr > EEPROM_ADDR_END))
{
return 0;
}
IAP_CMD = 0x02;
IAP_CONTR = 0x80|WAIT_TIME;
IAP_DATA = (*buf);
IAP_ADDRH = addr>>8;
IAP_ADDRL = addr&0x00ff;
old_EA = EA;
EA = 0;
IAP_TRIG = 0x46;
IAP_TRIG = 0xB9;
EA = old_EA;
IAP_CMD = 0x00;
IAP_CONTR = 0x00;
return 1;
}
unsigned int EEPROM_ReadByte(UINT addr, BYTE *buf)
{
BOOL old_EA;
if ((addr < EEPROM_ADDR_START) || (addr > EEPROM_ADDR_END))
{
return 0;
}
IAP_CMD = 0x01;
IAP_CONTR = 0x80;//0x80|WAIT_TIME;
// IAP_DATA = (*buf);
IAP_ADDRH = addr>>8;
IAP_ADDRL = addr&0x00ff;
old_EA = EA;
EA = 0;
IAP_TRIG = 0x46;
IAP_TRIG = 0xB9;
EA = old_EA;
(*buf)=IAP_DATA ;
IAP_CMD = 0x00;
IAP_CONTR &= 0x7f; //IAP_CONTR = 0x00;
return 1;
}
void dellay(unsigned int h)
{
while(h--); }
main(){
unsigned char aa[10]={1,2,3,4,5,6,7,8,9,0};
unsigned char bb[10]={0,0,0,0,0,0,0,0,0,0};
P1=0;
P2=0;
while(1){
P1+=EEPROM_ReadByte(0x2000, aa);
aa[0]++;
dellay(5000000);
//ErasureAllSector(0x2000);
dellay(5000000);
P0=aa[0];
P2+=EEPROM_WritByte(0x2000, aa);
dellay(5000000);
}
}