Включаете, то правильно. А вот выключаете с побочным эффектом.
каждая строка этого блока
EECON=EECON&!EELD_; // Выключаем запись страницы
EECON=EECON&!EEMWE_; // Выключаем запись EEPROM
EECON=EECON&!EEMEN_; // Запрещаем работу с памятью
эквивалентна
EECON=0
т.е обнуляются не только нужные биты, но и все остальные.
!(не ноль) =0
!(ноль)=1
Вы путаете побитовые операции с логическими.
С 8253 дела не имел, но лет 7 назад пользовал 8252, правда на асме, так там в байте
EECON кроме управления еепром есть биты вдт и переключения DPTR. Если в 8253 это осталось так же, то в программе на С битом перключения DPTR лучше не баловаться. Продвинутый компилятор сам рулит переключением DPTR
попробуйте так
EECON=EECON&~EELD_; // Выключаем запись страницы
EECON=EECON&~EEMWE_; // Выключаем запись EEPROM
EECON=EECON&~EEMEN_; // Запрещаем работу с памятью
Если в 8253 байт EECON устроен по-другому..., ну тогда не знаю...
В любом случае пройдитесь отладчиком и в окне дизассемблера посмотрите по каким адресам отправляются и считываются байты.