EEPROM работает.
Выкладываю черновой вариант , потом сделаю более удобочитаемо...
Запись и чтение - по одному байту
А вот стирание - сразу сектором по 512 байт! Перед удалением надо вычитывать нужное и сохранять на время стирания.

Код:
$regfile = "STC_8H.DAT"                   ' STC registers list
$crystal = 11059200                       ' CPU clock frequence
$ramsize = 512
$romstart = &H0                           ' code starting address

Dim Addr_iap As Word , Temp As Byte

My_led Alias P1.2

'-----------------------------------------
P1ie = &B1111_1111                        ' 1: Enable digital pins
P1pu = &B0000_0000                        ' 1: pull-up resistor
P1m0 = &B_1010_0110 : P1m1 = &B_0000_0000       ' output mode

P3ie = &B1111_1011                        ' 1: Enable digital pins
P3pu = &B0000_0000                        ' 1: pull-up resistor
P3m0 = &B_0000_0000 : P3m1 = &B0000_0000       ' output mode

'-----------------------------------------
'UART1
P_sw1 = &H00                              'RXD/P3.0, TXD/P3.1
'P_sw1 = &H40                              'RXD_2/P3.6, TXD_2/P3.7
'P_sw1 = &H80                              'RXD_3/P1.6, TXD_3/P1.7

Sbuf = 0                                  ' Magic ...
Scon = &H52                               ' 8-Bits And Variable Baudrate
Auxr = &H54                               'Timer is 1T mode, use Timer1 as baudrate generator
Tmod = 2                                  'Set timer work mode
Sbuf = 0                                  ' Magic ...

Tl1 = &HE8 : Th1 = &HFF                   'Initial timer - 115200 / 11059200
'Tl1 = &HE0 : Th1 = &HFE                   'Initial timer - 9600 / 11059200
'Tl1 = &HF3 : Th1 = &HFF                   'Initial timer - 19200 / 1MHz
'Tl1 = &HF3 : Th1 = &HFF                   'Initial timer - 38400 / 2MHz
'Tl1 = &HCC : Th1 = &HFF                   'Initial timer - 38400 / 8MHz

Et1 = 0                                   'Disable Timer interrupt
Tr1 = 1                                   'Timer1 start run

'-----------------------------------------------------------------------------

'(
Addr_iap = 0                              '

Print "Erase"
Gosub Eeprom_erase

Addr_iap = 0 : Temp = 11
Print "Write: " ; Temp
Gosub Eeprom_write

Addr_iap = 1 : Temp = 22
Print "Write: " ; Temp
Gosub Eeprom_write
')

Print " 0-511"

For Addr_iap = 0 To 511
 Gosub Eeprom_read
 Print Addr_iap ; "=" ; Temp
Next

End



'-----------------------------------------------------------------------------

'-----------------------------------------
Eeprom_read:
 Iap_contr.7 = 1                          ' Включить IAP IAPEN=1;
 Iap_tps = 12                             ' Установим параметр ожидания для 12 МГц;
 Iap_cmd = 1                              ' Команда чтения IAP
 Iap_addrl = Low(addr_iap)                ' Установить нижний адрес IAP
 Iap_addrh = High(addr_iap)               ' Устанавливаем верхний адрес IAP
 Iap_trig = &H5A : Iap_trig = &HA5        ' Команда триггера (&h5a и &ha5);
 Temp = Iap_data                          ' Чтение данных IAP;
 Gosub Eeprom_iapidle                     ' Выключаем функцию IAP
Return


'-----------------------------------------
Eeprom_write:
 Iap_contr.7 = 1                          ' Включить IAP IAPEN=1;
 Iap_tps = 12                             ' Установим параметр ожидания 12 МГц;
 Iap_cmd = 2                              ' Команда записи IAP
 Iap_addrl = Low(addr_iap)                ' Установить нижний адрес IAP
 Iap_addrh = High(addr_iap)               ' Устанавливаем верхний адрес IAP
 Iap_data = Temp                          ' Запись данных IAP
 Iap_trig = &H5A : Iap_trig = &HA5        ' Команда триггера (&h5a и &ha5);
 Gosub Eeprom_iapidle                     ' Выключаем функцию IAP
Return


'-----------------------------------------
Eeprom_erase:
 Iap_contr.7 = 1                          ' Включить IAP IAPEN=1;
 Iap_tps = 12                             ' Установим параметр ожидания 12 МГц;
 Iap_cmd = 3                              ' Установить команду стирания IAP
 Iap_addrl = Low(addr_iap)                ' Установить нижний адрес IAP
 Iap_addrh = High(addr_iap)               ' Устанавливаем верхний адрес IAP
 Iap_trig = &H5A : Iap_trig = &HA5        ' Команда триггера (&h5a и &ha5);
 Gosub Eeprom_iapidle                     ' Выключаем функцию IAP
Return

'-----------------------------------------
Eeprom_iapidle:
 nop
 Iap_contr = 0                            'Отключаем Функцию Iap
 Iap_cmd = 0                              'Очистить регистр команд
 Iap_trig = 0                             'Очистить регистр триггера
 Iap_addrh = &H80 : Iap_addrl = 0         'Установить адрес для области, отличной от IAP
Return