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

Система команд контроллеров

PIC

16

C

5

X

состоит из 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

04

h

,

d

или

ADDWF



FSR

,

d

.

При косвенной адресации используется дополнительный регистр

FSR

, в кото­ром хранится адрес вызываемых данных. Биты 6 и 5

FSR

служат для выбора банка, а пять младших бит (4–0) адресуют ячейку памяти в пределах банка (адреса ячеек 00

h

... 1

Fh

). Обращение к требуемому байту данных осуществляется через псевдо–регистр

INDF

, для чего в мнемонике команды указывается наименование (

INDF

) или адрес (00

h

) псевдорегистра, например,

ADDWF



INDF

,

d

или

ADDWF

0,

d

. Отме­тим, что чтение косвенным способом самого регистра

INDF

даст результат 00

h

(т е.

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

. поступающих с вывода

OSC

1/

CLKIN

микроконт­роллера на внутренний преобразователь, формируются четыре циклические не­перекрывающиеся тактовые последовательности

Q

1,

Q

2,

Q

3 и

Q

4 с частотой следования

fOSC

/4. Процесс выполнения команды включает два цикла: цикл выборки и цикл выполнения команды. Цикл состоит из четырех тактов

Q

1...

Q

4 длительностью

TOSC



каждый.

В такте

Q

1 цикла выборки происходит увеличение содержимого счетчика, в последующих тактах — считывание команды из памяти программ, в такте

Q

4 — ее запись в регистр команд. Декодирование и выполнение команды осуществля­ется в тактах

Q

1 ...

Q

4,последующего цикла выполнения.

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

Если команда изменяет содержимое счетчика команд (например, команда

GOTO

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

В такте

Q

1 цикла выполнения команды выбранная команда защелкивается в регистр команд. В течение тактов

Q

2,

Q

3 и

Q

4 происходит декодирование и вы­полнение команды (в такте

Q

2 чтение операнда из памяти данных, в такте

Q

4 за­пись результата в память).

Команды, изменяющие содержимое


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

), чтобы напряжение на выводе успело стабилизироваться до начала исполнения следующей команды чтения.



Рекомендуйте эту статью другим!