Обучение : Программирование на Ассемблере для PIC


Особенности сопоставления имен и чисел. Прямая и косвенная адресация

Ранее мы рассматривали регистры специального назначения, располагающихся в нулевом банке, но в дальнейшем мы будем не только рассматривать, но и практически использовать регистры специального назначения, расположенные в первом банке памяти, например, TrisA (адрес h85) и TrisB (адрес h86).

Регистрам специального назначения, расположенных в первом банке, назначаются адреса на h80 меньше.

 

неправильно

правильно

TrisA       EQU         h85

TrisA       EQU         h05

TrisB       EQU         h86

TrisB       EQU         h06

 

Этому есть достаточно простое объяснение. Мы знаем, что команда включает слово команды и регистр, указанный в команде. Эту конструкцию мы называем командной строчкой. Командная строчка, таким образом,  имеет ширину 14 бит. Выполняя командную строчку, МК для определения адреса регистра использует первые семь бит из команды (берутся из адреса регистра, который указан в команде) и два бита выбора банка (берутся из регистра STATUS – это биты RP1 и RP0). Таким образом получается 9-битный адрес. Проиллюстрируем этот механизм на примере адресации регистра TrisA:
 

8

7

6

5

4

3

2

1

0

RP1

RP0

Первые семь бит регистра, указанного в команде (TrisA)

0

1

0

0

0

0

1

0

1


Теперь посмотрим, что у нас получилось: 010000101 = h85.


С этой "заморочкой" разработчиков нужно согласиться и принципом "минус 80" руководствоваться всегда. Это нужно запомнить, в свою очередь мы будем об этом напоминать. На будущее обращаю ваше внимание, регистры TrisA и TrisB получат схожие адреса, что и регистры PortA (адрес h05) и PortB (адрес h06), это также не должно смущать.

В примере выше мы рассмотрели механизм работы "прямой адресации". Существует и "косвенная адресация", когда обращение к регистрам осуществляется через один и тот же регистр INDF (адрес h00). Для того, чтобы обратиться через этот регистр к какому либо другому регистру (например, PortA), необходимо адрес регистра PortA (число h05) прописать в регистр FSR (адрес h04).


Как определяется 9-битный адрес в команде при работе с косвенной адресацией? В этом случае берутся первые восемь бит из команды и берется бит IRP (7) из регистра STATUS. Если бит IRP установлен в ноль, то будут адресованы регистры с нулевой и первой страниц памяти. Если бит IRP установлен в единицу, то будут адресованы регистры со второй и третьей страниц памяти. PIC16F84A имеет только две страницы памяти, соответственно, использовать этот бит не имеет смысла.


Рассмотрим сегмент очистки 15-ти регистров (диапазон адресов h20 – h2F) с использованием косвенной адресации:
 

            bcf         STATUS,IRP  ; установить банки 0 и 1

            movlw       h20         ; указываем первый очищаемый регистр

            movwf       FSR

m1          clrf        INDF        ; очистить регистр

            incf        FSR,F       ; увеличить адрес

            btfss       FSR,4       ; проверка

            goto        m1          ; продолжить очистку

...


Сегмент достаточно прокомментирован, однако требует, на наш взгляд, сделать акцент на команде btfss FSR,4 . Используя конвертер BinHexDec проследим инкрементирование числа h20 до h2F. Если сделать еще один шаг инкрементирования, то 4-й бит в новом числе (h30) установится в единицу. Используя этот факт, мы выходим из сегмента очистки.

Следует отметить, что при использовании прописанного файла *.INC , MPLAB в процессе компиляции будет делать замечание о некорректных адресах регистров специального назначения расположенных в первом банке. Это объясняется тем, что регистры специального назначения из первого банка в файле файл *.INC описаны в традиционном виде, т.е. их адрес будет на h80 больше. При желании файл *.INC можно самим подкорректировать вручную.

 

Первое знакомство с прямой и косвенной адресаций достаточно ограничить прочтением этого раздела. Большая часть примеров основана на механизме прямой адресации. О сути механизма прямой адресации можно и не знать, однако, могут быть примеры с использованием механизма косвенной адресации, что потребует осмысления этого раздела.


<<< назад далее >>>

Просмотров: 40743

 








 
 
 

В русском Интернете бестолку защищать свои права. Хотите использовать материалы - используйте,
но с письменного согласия авторов. В противном случае будут высланы соответствующие письма
в поисковые системы об ограничении индексации ваших сайтов. Не доводите до греха.