john2020
Full Member level 5
Hi there,
I'm currently trying to read and write to the EEPROM on my T89C51RD2.
The read function seems to operate correctly but I'm not having so much luck with the write function. Here is my code:
/*-------------------------------------
Return EEPROM Byte at address 'adr'
-------------------------------------*/
unsigned char ReadEEPROM (unsigned int adr) {
unsigned char v;
EECON = 0x02; // enable EEPROM
v = XBYTE[adr]; // read value
EECON = 0x00; // disable EEPROM
return (v);
}
/*------------------------------------------
Write EEPROM Byte 'val' at address 'adr'
------------------------------------------*/
void WriteEEPROM (unsigned int adr, unsigned char val) {
int i;
EECON = 0x02;
// enable EEPROM and set write bit
EETIM = 0xC8;
// Set EETIM to 5x Fxtal (40 Mhz)
XBYTE[adr] = val; // write value
EECON = 0x52;
EECON = 0xA2;
while (EECON == 0xA3);
// wait until value programmed
EECON = 0x00; // disable EEPROM
}
In researching this problem I found the following link:
http://www.atmel.com/dyn/resources/prod_documents/doc4101.pdf
which says for the write sequence should be repeated 3 times for a succesful write. I attempted this by implimenting a simple for loop. But it had no effect.
The other annoying thing is seems to work in the code debugger, but not on the chip??
Has anyone got any suggestions as to what I'm doing wrong. Thank you for your time. Any other info needed just ask.
regards
john
I'm currently trying to read and write to the EEPROM on my T89C51RD2.
The read function seems to operate correctly but I'm not having so much luck with the write function. Here is my code:
/*-------------------------------------
Return EEPROM Byte at address 'adr'
-------------------------------------*/
unsigned char ReadEEPROM (unsigned int adr) {
unsigned char v;
EECON = 0x02; // enable EEPROM
v = XBYTE[adr]; // read value
EECON = 0x00; // disable EEPROM
return (v);
}
/*------------------------------------------
Write EEPROM Byte 'val' at address 'adr'
------------------------------------------*/
void WriteEEPROM (unsigned int adr, unsigned char val) {
int i;
EECON = 0x02;
// enable EEPROM and set write bit
EETIM = 0xC8;
// Set EETIM to 5x Fxtal (40 Mhz)
XBYTE[adr] = val; // write value
EECON = 0x52;
EECON = 0xA2;
while (EECON == 0xA3);
// wait until value programmed
EECON = 0x00; // disable EEPROM
}
In researching this problem I found the following link:
http://www.atmel.com/dyn/resources/prod_documents/doc4101.pdf
which says for the write sequence should be repeated 3 times for a succesful write. I attempted this by implimenting a simple for loop. But it had no effect.
The other annoying thing is seems to work in the code debugger, but not on the chip??
Has anyone got any suggestions as to what I'm doing wrong. Thank you for your time. Any other info needed just ask.
regards
john