Работа с памятью PIC16FXXX
РАБОТА С ПАМЯТЬЮ Р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 циклов.
Чтение из ЕЕРRОМ-памяти
1. Записать адрес в регистр ЕЕАDR. Проверить, что записанный адрес корректен для данного типа микроконтроллера.
2. Сбросить в '0' бит ЕЕРGD для обращения к ЕЕРRОМ памяти данных.
3. Инициализировать операцию чтения установкой бита RD в ‘1’.
4. Прочитать данные из регистра ЕЕDАТА.
Пример: Чтение из ЕЕРRОМ памяти данных
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
Запись ЕЕРRОМ данных
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 перед началом записи.
Пример: Запись в ЕЕРRОМ память данных
BSF STATUS,RP1 ;
BCF STATU,RPO ; Выбрать банк 3
BTFSC EECON1,WR ; Проверить завершения
GOTO $-1 ; операции записи
BCF STATUS, RPO ; Выбрать банк 2
MOVF ADDR,W ; Указать адрес ячейки
MOVWF EEADR ;
MOVWF EEDATA ;
BSF STATUS,RFO ; Выбрать банк 3
BCF EECON1,EEPGD ; Выбрать EEPROM память данных
BSF EECON1,WREN ; Разрешить запись в EEPROM память данных
BСF INTCON,GIE ; Запретить прерывания
MOVLW 0x55 ; Записать 55h в регистр ЕЕСОN2
Лекция "2 - Второе начало термодинамики" также может быть Вам полезна.
MOVWF EECON2 ;
MOVLW OxAA ; Записать ААh в регистр ЕЕСОN2
MOVWF EECON2 ;
BSF EECON1.WR ; Инициализировать запись
BSF INTCON, GIE ; Разрешить прерывания
BCF EECON1.WREN ; Выбрать банк 2