Необходимо прочитать данные с адреса EEPROM микроконтроллера
PIC16F628A. При этом использую в программе MPLAB IDE v8.10 функцию MPLAB SIM.
В даташите на микроконтроллер популярно описана инструкция чтения данных с наглядным примером:
BCF STATUS, RP ; Выбор банка 1
MOVLW CONFIG_ADDR
MOVWF EEADR
BSF EECON, RD
MOVF EEDATA, W
При компиляции данного блока в окне “OUTPUT” в вкладке “Build” возникают сообщения: Message[302] Register in operand not in bank 0. Ensure that bank bits are correct.
В принципе все понятно при семи битной, прямой адресации к SFR-регистрам начиная с адреса 80h доступа нет. Часто используют метод, когда при выборе банка адресуют не на абсолютный адрес пространства, а на относительный – в пределах банка, добавляя при этом выражение к регистру типа 07f&«SFR» В таких случаях «Message[302] не возникает.
Часть программы с этими выражениями вполне нормально функционирует, пока не дошел до регистров функционала EEPROM: EECON1; EEDATA; EEADR. Стала возникать предупреждение Warning[219] Invalid RAM location specified. И тут метод относительной адресации сыграл со мною злую шутку, добавляя, например выражение 07f&EECON1 получаем 07F&09C адрес 1С а вот этот адрес данный микроконтроллер использовать не может, чем подтверждается прочерком в окне «File Registers» и в файле P16F628A.INC в разделе «RAM Definition». Для регистров EEDATA и EEADR получаем адреса 1А и 1B соответственно, их тоже не можем использовать.
Подумал решить проблему методом косвенной адресации для регистра EEADR.
BCF STATUS, IRP ; Выбор банка 1
MOVLW 0x9B
MOVWF FSR
MOVLW 0x24
MOVWF INDF
Все получилось. А вот для регистра EECON1 почему-то не получилось записать значение в бит “RD”
BCF STATUS, IRP ; Выбор банка 1
MOVLW 0x9C
MOVWF FSR
MOVLW 0x01
MOVWF INDF
Предупреждений, при компиляции, никаких нет, а в пошаговом режиме значение регистра EECON1 не изменяется. Вопрос простой: почему? Может, существуют другие методы изменения регистра EECON1…