Косвенная адресация – такой режим адресации регистров, при котором в команде не указывается адрес памяти данных. Регистр специального назначения FSR, доступный для записи/чтения, используется в качестве указателя адреса в памяти данных. Этот режим адресации может быть полезен при обращении к таблицам данных. На рисунке 6-7 показана операция косвенной адресации (запись значения в регистр памяти данных с адресом, указанном в регистре FSR). Для выполнения косвенной адресации необходимо обратиться к регистру INDF. Обращение к регистру INDF фактически вызовет действие с регистром, адрес которого указан в FSR. Косвенное чтение регистра INDF (FSR=0) даст результат 00h. Косвенная запись в регистр INDF не вызовет никаких действий (вызывает воздействия на флаги АЛУ в регистре STATUS). 9-й бит косвенного адреса IRP сохраняется в регистре STATUS<7>. Пример 9-разрядной косвенной адресации показан на рисунке 6-8
Рис. 6-7
Рис. 6-8
В примере 6-2 показано использование косвенной адресации для очистки памяти данных (адреса 20h – 2Fh) минимальным числом команд микроконтроллера. Подобный метод может использоваться для передачи блока данных в регистр TXREG передатчика USART. Начальный адрес блока данных, подготовленного для передачи, может быть легко изменен в соответствии с требованиями программы.
|
|
Пример 6-2 Очистка регистров памяти данных с адреса 20h по 2Fh
BCF STATUS, IRP; Установить банк 0,1
MOVLW 0x20; Указать первый регистр в ОЗУ
MOVWF FSR
NEXT:
CLRF INDF; Очистить регистр
INCF FSR,F; Увеличить адрес
BTFSS FSR,4; Завершить?
GOTO NEXT; Нет, продолжить очистку
CONTINUE:
; Да
Механизм прямой адресации:
Прямая адресация - для указания банка памяти данных необходимо использовать биты RP1:RP0 регистра STATUS;