Hi, Anyone successfully access Temic 89C51RD2's internal EEPROM? I have this unsigned char xdata * data pEEAddr = 1; void WriteOne(unsigned char val) { unsigned char data dVal = val; DisableGlobalInterrupt(); MapEE(); *pEEAddr = dVal; UnMapEE(); EnableGlobalInterrupt(); } Somehow that did not work reliably. I examined the assembler output and it looked ok (one movx instructure between the MapEE() and UnMapEE() macros). Thanks for any insight. Andy
oh,I have the same problem.And in http://www.keil.com/forum/docs/thread477.asp EECON &= 0xFB; // Disable EEPROM memory space I think it should be: EECON &= 0xFD; And the value of EETIM in my system: EETIM = 0x7D; //5*25MHz And In my simulator debug,it will endless in: while(EECON & 0x01); // Wait for EEPROM write to finish so I must put the microcontrol to the board, but can't get right eeprom data operation,what't wrong about it? My emulator micetek Easypack/E II 8052F can't support EEPROM data RD/WR function,so I must download my code to the cpu and run it in board? The cpu is ATMEL 89C51RD2-CM,is it the T89C51RD2? And the programmer is lab tool-48,its software vertion is V4.67,the device of T89C51RD2 for selecting is only TEMIC,I don't know whether they are the same device? I can't get right EEPROM data RD/WR using your means,so could you give me some advice?
I've had no problems at all with it. My basic routines (which definitely work) are as follow: // To read a single byte from a location in EEPROM. char ReadEEPROM(int addr) { char EEdata; EECON |= 0x02; // Enable EEPROM memory space EEdata = XBYTE[addr]; EECON &= 0xFB; // Disable EEPROM memory space return(EEdata); } // To write a single byte to a location in EEPROM. void WriteEEPROM(int addr, char EEdata) { EECON |= 0x02; // Enable EEPROM memory space XBYTE[addr] = EEdata; EETIM = 0xB8; // Set timing register: 10*Fclk(MHz) = 10*18.432 = 184 = 0xB8 EECON = 0x52; // Send sequence to start EEPROM write... EECON = 0xA2; while(EECON & 0x01); // Wait for EEPROM write to finish EECON &= 0xFB; // Disable EEPROM memory space } Note that in the write routine you must send the special codes to EECON to make the write happen - perhaps you missed this. You also need to tweak the timing register to suit your particular clock speed. Chris
View all questions in Keil forum