Aby uzyskać dostęp do odczytu eeprom, trzeba ustawić bit EEMEN w rejestrze WMCON. Wtedy eeprom widziany jest jako pamięć xdata (adresy 0x0000-0x07ff), i odczyt odbywa się tak, jak zmiennych z przestrzeni xdata, np:
xdata char eep_var;
data char x;
(...)
WMCON |= 0x08; //wybor pamieci EEPROM jako XDATA
x = eep_var;
Dodatkowo aby móc zapisać EEPROM, trzeba ustawić bit EEMWE w tymże rejestrze. Trzeba jednak pamiętać, że zapis do eeprom trwa znacznie dłużej, i tutaj nie ma już tak łatwo. Poniżej masz funkcje zapisujące wartości zmiennych char i int do eeprom i czekające na koniec zapisu.
//=================================================================================//
//funkcja sprawdajaca stan pamieci EEPROM
//zwraca "1" gdy pamiec zajeta zapisem (bit RDY/!BSY rejestru WMCON = 0)
char EE_busy(void)
{
if (WMCON & 0x02) return 0;
else return 1;
}
//=================================================================================//
//funkcja zapisujaca liczbe int do pamieci EEPROM pod podany adres
void EEWriteInt(int dat, xdata int* addr)
{
xdata char *ptr;
WMCON |= 0x18; //ustaw bity EEMWE i EEMEN w rejestrze WMCON
ptr = (char xdata *)addr;
*ptr++ = (dat>>8);
while (EE_busy()); //czekaj na koniec zapisu
*ptr = dat;
while (EE_busy()); //czekaj na koniec zapisu
WMCON &= 0xef; //zeruj bit EEMWE w rejestrze WMCON
}
//=================================================================================//
//funkcja zapisujaca liczbe char do pamieci EEPROM pod podany adres
void EEWriteChar(char dat, xdata char* addr)
{
WMCON |= 0x18; //ustaw bity EEMWE i EEMEN w rejestrze WMCON
*addr = dat;
while (EE_busy()); //czekaj na koniec zapisu
WMCON &= 0xef; //zeruj bit EEMWE w rejestrze WMCON
}