Ассемблер http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-eeprom.html .
СИ http://chipenable.ru/index.p....si.html .
Код
;*******************************************************************************
; Подпрограмма работы с EEPROM
;*******************************************************************************
; запись в EEPROM
;
; LDI XL,0 ; Загружаем адрес нулевой ячейки
; LDI XH,0 ; EEPROM
; LDI R21,45 ; и хотим записать в нее число 45
; RCALL EEWrite ; вызываем процедуру записи.
;
EEWrite:
SBIC EECR,EEWE ; Ждем готовности памяти к записи. Крутимся в цикле
RJMP EEWrite ; до тех пор пока не очистится флаг EEWE
CLI ; Затем запрещаем прерывания.
OUT EEARL,XL ; Загружаем адрес нужной ячейки
OUT EEARH,XH ; старший и младший байт адреса
OUT EEDR,R21 ; и сами данные, которые нам нужно загрузить
SBI EECR,EEMWE ; взводим предохранитель
SBI EECR,EEWE ; записываем байт
SEI ; разрешаем прерывания
RET ; возврат из процедуры
;*******************************************************************************
; чтение из EEPROM ( вызов подпрограммы )
;
; LDI XL,0 ; Загружаем адрес нулевой ячейки
; LDI XH,0 ; EEPROM из которой хотим прочитать байт
; RCALL EERead ; вызываем процедуру чтения. После которой
; ; в R21 будет считанный байт.
EERead:
SBIC EECR,EEWE ; Ждем пока будет завершена прошлая запись.
RJMP EERead ; также крутимся в цикле.
OUT EEARL, XL ; загружаем адрес нужной ячейки
OUT EEARH, XH ; его старшие и младшие байты
SBI EECR,EERE ; Выставляем бит чтения
IN R21, EEDR ; Забираем из регистра данных результат
RET
;*******************************************************************************