Hi I want to read and write to the internal eeprom in the at89c51ed2. In simulation it seams OK, but in target, the volatile memory is allways read as 0xffh. I use the same routines for same processor in a different project without problems. My test looks as follows:
IntTemp = 100; eep_write(0,IntTemp); i = eep_read(0); if ( i !=IntTemp ) { error(1); }
void eep_write(byte address, int wdata) { bit tmpEA = EA; //store EA state EA = 0; EECON = 0x02; // Enable EEPROM XWORD[address] = wdata; EECON = 0x50; //necessary for simulation to work, why? EECON = 0xa0; //same as above EECON &= ~0x02; EA = tmpEA; while(EECON & 1); }
int eep_read(byte address) { bit tmpEA = EA; int read_data; while(EECON & 1); EA = 0; EECON |= 2; // Map eeprom read_data = XWORD[address]; EECON &= ~2; // Unmap eeprom EA = tmpEA; return(read_data); }