EEPROM предназначена для сохранения данных, которые не должны изменятся после отключения напряжения питания. Эта память отсутствует в некоторых моделях младшего семейства. В целом устройство EEPROM подобно FLASH. Однако EEPROM имеет значительно больший ресурс (до 100000 циклов стирания/записи), и допускает побайтовую адресацию, вместо страничной у FLASH. Время записи в EEPROM для разных моделей находится в пределах 2…9 мс.
Рис.7 Организация памяти данных EEPROM ATmega8
EEPROM-память данных находится в отдельном адресном пространстве, независимом от FLASH и SRAM (см. рис.7). Взаимодействие прикладной программы с EEPROM происходит через 4 РВВ: EEARH, EEARL, EEDR и EECR.
Адрес ячейки памяти в операциях чтения/записи находится в регистрах EEARH (старший байт адреса) и EEARL (младший байт адреса). В моделях с объемом EEPROM до 256 б старший регистр адреса, по понятным причинам отсутствует. Число перед записью в EEPROM помещается в регистр EEDR. B этом же регистре нужно искать байт данных после операции чтения.
Для непосредственного управления процессами чтения/записи служат биты регистра EECR. Этим процедурам должен предшествовать строго определенный порядок действий, как показано в подпрограммах.
; Подпрограмма записи байта данных в EEPROM ; R16 – регистр с байтом данных для записи при входе ; R17 – регистр для передачи младшего байта адреса ; R18 – регистр для передачи старшего байта адреса eeprom_write: sbic EECR,EEWE ;ожидаем пока запись не будет закончена rjmp eeprom_write;предыдущая операция записи в EEPROM out EEARH,R18 ;задаем адрес ячейки EEPROM, в которую out EEARL,R17 ;необходимо записать байт данных out EEDR,R16 ;заносим в регистр данных байт для записи sbi EECR,EEMWE ;разрешаем запись sbi EECR,EEWE ;начинаем запись байта в EEPROM ret ; Подпрограмма чтения байта данных из EEPROM ; R16 – регистр с прочитанным байтом данных на входе ; R17 – регистр для передачи младшего байта адреса ; R18 – регистр для передачи старшего байта адреса eeprom_read: sbic EECR,EEWE ;ожидаем пока запись не будет закончена rjmp eeprom_write;предыдущая операция записи в EEPROM out EEARH,R18 ;задаем адрес ячейки EEPROM, из которую out EEARL,R17 ;необходимо прочитать байт данных sbi EECR,EERE ;начинаем чтение байта из EEPROM in R16,EEDR ;извлекаем байт из регистра данных ret
Перейти к следующей части: Конфигурационные ячейки
Комментарии (3) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Однажды, один мой знакомый, сказал что там сидят маленькие китайцы и помнят. Потихоньку в это верю...
2. В программе чтения в примере ошибка- неверное название метки.