Регистры в pic программировании на ассемблере

В программировании на ассемблере важно предоставлять комментарии к коду, чтобы его было легче отслеживать. Комментарии в сборке начинаются с точки с запятой, подобной этой:

	
;это комментарий

Первой важной строкой в программе является

#INCLUDE <P16F84A.INC>

Это указывает ассемблеру добавить включаемый файл для этого конкретного микроконтроллера. Каждый микроконтроллер имеет свой собственный включаемый файл, который можно найти в C:\Program Папка Files (x86)\Microchip\MPASM Suite. Включаемый файл позволяет обращаться к имени регистра, а не к его адресу.

Программирование микроконтроллеров на ассемблере фокусируется на манипулировании регистрами. Вот регистры PIC16F84A:

Смена банка
Фактическое выполнение программы начинается в строке,

BSF STATUS, RP0

Команда BSF расшифровывается как “регистр набора битов f”, где следующим оператором является регистр f и бит, связанный с этим регистром. Просмотрите остальную часть набора инструкций. Для приведенного выше регистра f является регистром СОСТОЯНИЯ:

Бит RP0 называется битом выбора банка регистров. PIC16F84A группирует свои регистры в два банка. Давайте еще раз посмотрим на карту регистров устройства:

Прежде чем вы сможете манипулировать конкретным реестром, вы должны сначала обратиться в банк, где он находится. Это делается путем очистки (сделайте его нулевым) или установки (сделайте его единицей) бита RP0. Обратите внимание, что некоторые регистры, включая регистр СОСТОЯНИЯ, расположены в обоих банках, что означает, что вам не нужно переключать банки для доступа к ним.

Регистр TRIS
Так почему же мы установили бит RP0? Это потому, что следующие строки,

MOVLW 0xFE
MOVWF TRISB

использует регистр TRISB, который находится в банке 1.

Операция MOVLW означает “переместить буквальное значение в регистр W”. Регистр W – это регистр общего назначения, который действует как временное хранилище при перемещении значений из регистра в регистр.

Операция MOVWF означает “переместить содержимое W в TRISB”. Это означает, что после этих двух строк регистр TRISB теперь имеет значение 0xFE.

Так почему же это значение для TRISB? Сначала мы обсудим функцию регистра TRISB.

ТРИС – это сокращение от tri-state. Это описывает характеристики портов микроконтроллера, что означает, что порт a может быть (1) входом, (2) выходом или (3) оставленным зависшим. PIC16F84A имеет два порта: PORTA и PORTB. Это означает, что существуют также два регистра TRIS: TRISA и TRISB. Ноль в любом бите TRIS делает соответствующий бит ПОРТА выходным. И наоборот, единица в любом бите TRIS делает соответствующий бит ПОРТА входнымсигналом.

В нашем примере значение TRISB равно 0xFE:

Вы видите, что только бит 0 является низким или очищенным. Это соответствует тому, что PORTB.0 или RB0 становятся выходным выводом, а остальные – входными выводами. Если, например, вы хотите сделать выходные контакты PORTB.0 и PORTB.1, а остальные – входными контактами, то ваш TRISB будет:

который равен 0xFC в шестнадцатеричном значении.

Следующая строка:

BCF STATUS, RP0

просто возвращает нас к банку 0, потому что следующие строки:

MAIN 
   BSF PORTB, 0
   CALL delay
   BCF PORTB, 0
   CALL delay
   GOTO main

предполагает использование регистра PORTB, который находится в банке 0.

Операционный код BSF расшифровывается как “набор битов f”. Команда line BSF PORTB, 0 устанавливает нулевой бит регистра PORTB. Помните, что регистр PORTB – это регистр, привязанный к физическим контактам RB. Таким образом, когда установлен ПОРТB.0, вывод RB0 является высоким.

Строка BCF PORTB, 0 выполняет действие, противоположное только что рассмотренной команде. Это сделает вывод RB0 низким.

Добавить комментарий