Пример: Чтение из ЕЕРRОМ памяти данных
Чтение из ЕЕРRОМ-памяти
РАБОТА С ПАМЯТЬЮ РIС16FХХХ
Память делится на:
- память программ;
- flash-память;
- оперативная память.
Доступ к функциям записи/чтения ЕЕРRОМ памяти данных и FLASH памяти программ выполняется через шесть регистров специального назначения:
- ЕЕDАТА;
- ЕЕDАТН;
- ЕЕАDR;
- ЕЕАDRН;
- ЕЕСОN1;
- ЕЕСОN2.
Операции чтения/записи ЕЕРRОМ памяти данных не приостанавливают выполнение программы. В регистре ЕЕАDR сохраняется адрес ячейки ЕЕРRОМ памяти данных. Данные сохраняются/читаются из регистра ЕЕDАТА. В микроконтроллерах РIС16F873/874 объем ЕЕРRОМ памяти 128 байт. Старший бит адреса в регистре ЕЕАDR всегда должен равняться нулю, потому что не поддерживается циклическая адресация (т.е. ячейка с адресом 0х80 не отображается на 0х00). В РIС16F876/877 объем ЕЕРRОМ памяти данных 256 байт (используются все 8-разрядов регистра ЕЕАDR).
Чтение FLASH памяти программ не влияет на выполнение программы, а во время операции записи выполнение программы приостановлено. В спаренных регистрах ЕЕАDRН:ЕЕАDR сохраняется 13-разрядный адрес ячейки памяти программ, к которой необходимо сделать обращение. Спаренные регистры ЕЕАDRН:ЕЕАDR содержат 14-разрядные данные для записи или отображают значение из памяти программ при чтении. Также как для ЕЕРRОМ памяти данных, в регистры ЕЕАDRН:ЕЕАDR должен быть загружен адрес физически реализованной памяти программ, потому что циклическая адресация не поддерживается.
|
|
При работе с памятью не выполняется проверка на правильность и качество записи. Если попадается некорректное значение адреса или данных, то выполняется NОР.
ЕЕРRОМ рассчитана на 100 000 циклов чтения/записи, а flash-память на 10000 циклов.
1. Записать адрес в регистр ЕЕАDR. Проверить, что записанный адрес корректен для данного типа микроконтроллера.
2. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.
3. Инициализировать операцию чтения установкой бита RD в ‘1’.
4. Прочитать данные из регистра ЕЕDАТА.
BSF STATUS.RP1;
BCF STATUS.RPO; Выбрать банк 2
MOVF ADDR.W; Записать адрес
MOVWF EEADR; ячейки
BSF STATUS.RFO; Выбрать банк 3
BCF EECON1.EEPGD; Выбрать EEPROM память
BSF EECON1.RD; Инициализировать чтения
BCF STATUS.RPO; Выбрать банк 2
MOVF EEDATA.W; W = EEDATA
1. Если шаг 10 не был выполнен, то необходимо проверить, что не происходит запись (WR=0).
2. Записать адрес в регистр ЕЕАDR. Проверьте, что записанный адрес корректен для данного типа микроконтроллера.
3. Записать 8-разрядное значение в регистр ЕЕDАТА.
4. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.
5. Установить бит WREN в ‘1’, разрешив запись в ЕЕРRОМ память.
6. Запретить прерывания, если они разрешены.
|
|
7. Выполнить обязательную последовательность из пяти команд:
- Запись значения 55h в регистр ЕЕСОN2 (две команды, сначала в W затем в ЕЕССЖ2):
- Запись значения ААh в регистр ЕЕСОN2 (две команды, сначала в W затем в ЕЕСON2);
- Установить бит WR в ‘1’.
8. Разрешить прерывания (если необходимо).
9. Сбросить бит WREN в ‘0’.
10. После завершения цикла записи сбрасывается в '0' бит WR, устанавливается в ‘1’ флаг прерывания ЕЕIF (сбрасывается программно). Если шаг 1 не выполняется, то необходимо проверить состояние битов ЕЕIF, WR перед началом записи.