Микроконтроллеры PIC: команды, операции, примеры


PIC16C5XОбщие сведения.

Система команд контроллеров PIC16C5X состоит из 33 ин­струкций. Использование RISC архитектуры обеспечивает выполнение:

● 26 команд за один цикл;

● 4 условных команд (DECFSZ, INCFSZ, BTFSC, BTFSS) за один цикл, если резуль­тат проверки условия не равен нулю, и за два цикла в противном случае;

● 3 команд (CALL, GOTO, RETLW) за два цикла.

Форматы команд.

Каждая команда представляет собой 12–разрядный двоичный код (слово). В коде команды выделяются поля (разряды), в которых указываются выполняемая операция, адреса ячеек памяти операндов–источников и приемника (результата). Совокупность полей образует формат команды. В за­висимости от количества полей в формате команды можно выделить три группы команд (рис. 6.4.1):

● команды, формат которых содержит три поля:

• OPCODE— код операции;

• f— адрес регистра с требуемым операндом (или битом). Другой операнд в двуместных операциях всегда находится в регистре W;

• d— регистр назначения (destination): при d= 0 результат операции поме­щается в рабочий регистр W, при d= 1 — в регистр f, заданный в команде;

• b— номер бита, участвующего в операции;

● команды, формат которых содержит два поля:

• OPCODE— код операции;

• f— адрес регистра общего назначения (в операциях загрузки);

• к — 8– или 9–битная константа (в операциях с константами и передачи уп­равления);

● безадресные  команды, формат которых состоит из одного поля — кода опе­рации OPCODE. рис. 6.4.1

Описание команд

Для компактного изложения выделим и рассмотрим четы­ре группы команд и представим материал в табличной форме.

Операции с байтами

В эту группу включено 18 операций (табл. 6.4.1), при этом назначению dest при d= 0 соответствует рабочий регистр W, а при d= 1 — адресуемый регистр f. Во всех командах за исключением TRIS f значение f в десятичных числах лежит в пределах 0 ≤ f ≤ 31. табл. 6.4.1


Операции с битами

Во всех командах этой группы (табл. 6.4.2) значения адреса регистра f и номера бита b должны лежать в следующих пределах: 0 ≤ f≤ 31, 0 ≤ b≤ 7. табл. 6.4.2

Операции с константами и команды передачи управления

Кон­станты должны быть расположены в памяти программ. Для работы с ними ис­пользуется непосредственная адресация (IMM). Контроллер оперирует с констан­тами двух форматов, для которых в мнемонике команды используется общая абб­ревиатура константы k (рис. 6.4.1).

В командах загрузки и логических операций используются 8–разрядные кон­станты (табл. 6.4.3), поскольку их разрядность должна совпадать с разрядностью второго операнда и регистра результата. Значение константы лежит в пределах 0 ≤ k≤ 255. Кроме того, 8–разрядная константа k используется как адрес вызыва­емой подпрограммы и возврата в коде команд CALL и RETLW. Единственной ко­мандой, которая использует 9–разрядную константу в качестве абсолютного ад­реса первой команды вызываемой подпрограммы, является команда безусловно­го перехода GOTO k. табл. 6.4.3


Безадресные команды

В командах этой группы (табл. 6.4.4) адресуемый объект и выполняемое действие задается мнемоникой, например, CLRW— CLR (clearing— очистка) регистра W. табл. 6.4.4
В табл. 6.4.5 приведено распределение команд по функциональному признаку. табл. 6.4.5

В командах с байтами (табл. 6.4.1) и битами (табл. 6.4.2) для обращения к регистрам специальных функций и об­щего назначения используется прямая (DIR) и косвенная (INDIR) адресация (рис. 6.3.1).

В мнемонике команд с прямой адресацией  OPCODE f, d эти регистры обознача­ются символом f, в качестве которого может фигурировать 16–ричный адресный код или обозначение регистра, например:


ADDWF 04h, d или ADDWF FSR, d.

При косвенной адресации используется дополнительный регистр FSR, в кото­ром хранится адрес вызываемых данных. Биты 6 и 5 FSR служат для выбора банка, а пять младших бит (4–0) адресуют ячейку памяти в пределах банка (адреса ячеек 00h… 1Fh). Обращение к требуемому байту данных осуществляется через псевдо–регистр INDF, для чего в мнемонике команды указывается наименование (INDF) или адрес (00h) псевдорегистра, например, ADDWF
INDF, d или ADDWF0, d. Отме­тим, что чтение косвенным способом самого регистра INDF даст результат 00h (т е. FSR= 0), а запись в регистр INDF не приведет к изменению его содержимого (хотя биты состояния в регистре
STATUS могут быть изменены).

При написании программ необходимо иметь в виду, что разряды 6 и 5 регист­ра косвенной адресации FSR определяет адрес ячейки памяти не только при использовании косвенной адресации, но и при прямой адресации, так как непо­средственно в коде команды с прямой адресацией указывается лишь 5–разряд­ный адрес ячейки.

Регистры W, OPTION и TRIS не имеют собственных адресов в карте памяти, по­этому для работы с ними используются специальные команды с неявной адреса­цией (команды MOVWF f, MOVLW k, OPTION и TRIS f). Для очистки регистров так­же используется команда CLRF f с неявной адресацией.

Для работы с константами (табл. 6.4.3) используется непосредственная адре­сация (IMM), так как константа k представляет собой непосредственный операнд, участвующий в логической операции или предназначенный для загрузки в ре­гистр–приемник. Все команды используют 8–разрядные константы, кроме коман­ды безусловного перехода GOTO к, в которой (0 ≤ k≤ 511).

 

Особенности выполнения команд

Организация циклов. Из входных импульсов с частотой fOSC= 1/TOSC. поступающих с вывода OSC1/CLKIN микроконт­роллера на внутренний преобразователь, формируются четыре циклические не­перекрывающиеся тактовые последовательности Q1, Q2, Q3 и Q4 с частотой следования fOSC/4. Процесс выполнения команды включает два цикла: цикл выборки и цикл выполнения команды. Цикл состоит из четырех тактов Q1…Q4 длительностью TOSC каждый.

В такте Q 1 цикла выборки происходит увеличение содержимого счетчика, в последующих тактах — считывание команды из памяти программ, в такте Q4 — ее запись в регистр команд. Декодирование и выполнение команды осуществля­ется в тактах Q1 …Q4,последующего цикла выполнения.

Использование двухступенчатого конвейера позволяет совместить во времени оба цикла, поэтому эффективное время выполнения для большинства команд со­ставляет один цикл (рис. 6.4.2). рис. 6.4.2

Если команда изменяет содержимое счетчика команд (например, команда GOTO), то для ее выполнения потребуется два цикла. В цикле выборки новый ад­рес заносится в счетчик команд.

В такте Q1 цикла выполнения команды выбранная команда защелкивается в регистр команд. В течение тактов Q2, Q3 и Q4 происходит декодирование и вы­полнение команды (в такте Q2 чтение операнда из памяти данных, в такте

Q4 за­пись результата в память). Команды, изменяющие содержимое PCК таким командам, помимо команд CALL, GOTO, относятся все команды, в которых регистром f является счетчик команд PC. При выполнении команд модификации счетчика, например, MOVWF PC (рис. 6.3.2):

● в младший байт PCL счетчика команд загружается содержимое рабочего ре­гистра W;

● бит 8 сбрасывается в 0;

● в разряды 9, 10 записываются значения бит РА0, РА1 из регистра состояния STATUS.

Наличие 0 в разряде 8 свидетельствует о том, что доступны только первые 256 адресов каждой страницы памяти программ.

Так как команда CALL k(k = 0…255) предписывает использование только 8–разрядного адреса, начальный адрес вызываемой подпрограммы также распо­лагается в первых 256 ячейках памяти программ текущей страницы. Команда
GOTO k(k= 0…511) может передать управление только в пределах текущей стра­ницы памяти программ.

При достижении границы страницы счетчик команд автоматически переходит на начало следующей страницы. Однако биты выбора страницы в регистре состо­яния STATUS не изменяются автоматически. Поэтому, если биты РА1, РА0 не бу­дут изменены программно, последующие команды MOVWF PC, CALL, GOTO воз­вратят управление к предыдущей странице.

После сброса контроллера:

● регистр STATUS находится в состоянии 0001 1ФФФ (Ф = 0 или 1), поэтому биты РА1, РА0 выбора страницы указывают на страницу 0;

● старший байт PCL счетчика команд находится в состоянии 1111 1111.

Следовательно, после сброса счетчик команд PC содержит код 001 1111 1111, что соответствует странице 0 (00) и последней ячейке памяти последней страни­цы (для PIC16C54 состояние после сброса равно 1FFh = 1 1111 1111). Поэтому, если по стартовому адресу будет расположена команда GOTO к, управление бу­дет передано на следующую нулевую страницу.

Команды BCF и BSF

Команды сброса (BCF) и установки (BSF) бита в реги­стре f считывают байт целиком, модифицируют один бит и выводят результат в приемник, т. е. выполняются в режиме чтение–модификация–запись. При обра­щениях к портам команды BCF и BSF могут вызвать ошибочный результат, так как с помощью команды TPIS одни выводы порта запрограммированы как входы, дру­гие — как выходы.

Пример.

Пусть к биту 3 регистра PORTB обращается команда BSF, которая сна­чала считывает все восемь бит, затем выполняет установку бита 3 в 1, после чего модифицированный байт целиком записывается в выходную защелку порта. Если другой бит (например, бит 4) регистра PORTB в данный момент определен как вход, входной сигнал на этом выводе будет считан и записан обратно в выходную защелку этого же вывода, затирая ее предыдущее состояние. Если позднее линия 4 переключится в режим выхода, ее состояние может оказаться оши­бочным.

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

При чтении данные должны быть стабильны в начале цикла выполнения коман­ды. Поэтому при операциях чтения, следующих сразу же за записью в тот же порт необходимо учитывать инерционность установления напряжения на выводах. Мо­жет потребоваться программная задержка (команда NOP), чтобы напряжение на выводе успело стабилизироваться до начала исполнения следующей команды чтения.


Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: