amu 发表于 2013-10-28 14:20:17

求助!stc89le52rc片内EEPROM读写问题

EEPROM读写程序是网上搜的:
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 eepromEraseSector (unsigned int address)
{
        unsigned char i;
        isp_addrl=address;
        isp_addrh=address>>8;
        isp_contr=0x01;
        isp_contr=isp_contr|0x81; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz
        isp_cmd=0x03;
        isp_trig=0x46;
        isp_trig=0xb9;
        for(i=0;i<3;i++);
        isp_addrl=0xff;
        isp_addrh=0xff;
        isp_contr=0x00;
        isp_cmd=0x00;
        isp_trig=0x00;
}

void eepromWrite(unsigned int address, unsigned char write_data)
{
        unsigned char i;
        isp_data=write_data;
        isp_addrl=address;
        isp_addrh=address>>8;
        isp_contr=0x01;
        isp_contr=isp_contr|0x81; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz
        isp_cmd=0x02;
        isp_trig=0x46;
        isp_trig=0xb9;
        for(i=0;i<3;i++);
        isp_addrl=0xff;
        isp_addrh=0xff;
        isp_contr=0x00;
        isp_cmd=0x00;
        isp_trig=0x00;
}

unsigned char eepromRead(unsigned int address)
{
        unsigned char i,z;
        isp_addrl=address;
        isp_addrh=address>>8;
        isp_contr=0x01;
        isp_contr=isp_contr|0x81; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz
        isp_cmd=0x01;
        isp_trig=0x46;
        isp_trig=0xb9;
        for(i=0;i<3;i++);
        isp_addrl=0xff;
        isp_addrh=0xff;
        isp_contr=0x00;
        isp_cmd=0x00;
        isp_trig=0x00;
        z=isp_data;
        return(z);
}
之前是用STC89le54RD+,擦、读、写数据正确,下图是擦、读512个字节。后在52rc上用同一程序,改了下初始地址2000H,擦完后只有前56个字节正确,其余不知道是什么数据,如图,请大侠指点!
页: [1]
查看完整版本: 求助!stc89le52rc片内EEPROM读写问题