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

 Каждая команда контроллеров серии PIC16C8X представляет собой 14-разрядное слово, содержащее поле кода операции OPCODE и поле операндов. Система команд включает в себя команды работы с байтами, команды работы с битами, команды управления и операции с константами.

Для команд работы с байтами «f» обозначает регистр, с которым производится действие, а бит «d» определяет регистр назначения. При «d»=0 результат помещается в регистр W, при «d»=1 результат помещается в регистр «f», заданный в команде.

Для команд работы с битами «b» обозначает номер бита, участвющего в команде, а «f» — регистр, в котором этот бит расположен.

Для команд управления и операций с константами «k» обозначает 8- или 11-битовую константу или идентификатор.

Все команды выполняются в течение одного командного цикла, кроме следующих двух случаев:

  • Переход по проверке условия, если результат проверки условия — истина.
  • Изменение счетчика команд как результат выполнения команды.

В этих случаях команда выполняется за два цикла с выполнением второго цикла как NOP. Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время выполнения команды составит 1 мкс. Если выполняется переход по проверке условия или в результате выполнения команды изменился счетчик команд, время выполнения этой команды при тактовой частоте 4 МГц составит 2 мкс.

Принятые обозначения

f:Адрес регистра
W:Рабочий регистр
b:Номер бита в 8-ми разрядном регистре
k:Константа
x:Не используется. Ассемблер формирует код с х=0
d:Регистр назначения:
d=0 — результат в регистре W
d=1 — результат в регистре f.
По умолчанию d=1
label:Имя метки
TOS:Вершина стека
РС:Счетчик команд
ТО:Тайм-аут
PD:Выключение питания
dest:Регистр назначения: рабочий регистр W или регистр, заданный в команде
[]:Необязательные параметры
():Содержание
—>:Присвоение
<>:Битовое поле
О:Из набора

 

ОбозначениеФункцияЦиклыКод командыБиты состоянияПримечания
ADDLWСложение константы и W111 111x kkkk kkkkC, DC, Z
ADDWFСложение W c f100 0111 dfff ffffC, DC, Z1, 2
ANDLWЛогическое И константы и W111 1001 kkkk kkkkZ
ANDWFЛогическое И W и f100 0101 dfff ffffZ1, 2
BCFСброс бита в регистре f101 00bb bfff ffff1, 2
BSFУстановка бита в регистре f101 01bb bfff ffff1, 2
BTFSCПропустить команду, если бит в f равен нулю1 (2)01 10bb bfff ffff3
BTFSSПропустить команду, если бит в f равен единице1 (2)01 11bb bfff ffff3
CALLВызов подпрограммы210 0kkk kkkk kkkk
CLRFСброс регистра f100 0001 1fff ffffZ2
CLRWСброс регистра W100 0001 0xxx xxxxZ
CLRWDTСброс сторожевого таймера WDT100 0000 0110 0100
__  __
TO, PD
COMFИнверсия регистра f100 1001 dfff ffffZ1, 2
DECFДекремент регистра f100 0011 dfff ffffZ1, 2
DECFSZДекремент f, пропустить команду, если 01 (2)00 1011 dfff ffff1, 2, 3
GOTOПереход по адресу210 1kkk kkkk kkkk
INCFИнкремент регистра f100 1010 dfff ffffZ1, 2
INCFSZИнкремент f, пропустить команду, если 01 (2)00 1111 dfff ffff1, 2, 3
IORLWЛогическое ИЛИ константы и W111 1000 kkkk kkkkZ
IORWFЛогическое ИЛИ W и f100 0100 dfff ffffZ1, 2
MOVFПересылка регистра f100 1000 dfff ffffZ1, 2
MOVLWПересылка константы в W111 00xx kkkk kkkk
MOVWFПересылка W в f100 0000 1fff ffff
NOPХолостая команда100 0000 0xx0 0000
OPTIONЗагрузка регистра OPTION100 0000 0110 0010
RETFIEВозврат из прерывания200 0000 0000 1001
RETLWВозврат из подпрограммы с загрузкой константы в W211 01xx kkkk kkkk
RETURNВозврат из подпрограммы200 0000 0000 1000
RLFСдвиг f влево через перенос100 1101 dfff ffffC1, 2
RRFСдвиг f вправо через перенос100 1100 dfff ffffC1, 2
SLEEPПереход в режим SLEEP100 0000 0110 0011
__  __
TO, PD
SUBLWВычитание W из константы111 110x kkkk kkkkC, DC, Z
SUBWFВычитание W из f100 0010 dfff ffffC, DC, Z1, 2
SWAPFОбмен местами тетрад вf100 1110 dfff ffff1, 2
TRISЗагрузка регистра TRIS100 0000 0110 0fff
XORLWИсключающее ИЛИ константы и W111 1010 kkkk kkkkZ
XORWFИсключающее ИЛИ W и f100 0110 dfff ffff1, 2

Примечание:

  1. Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включенного на ввод, находится «1», а внешнее устройство формирует на этом выводе «0», то в этом разряде данных будет записан «0».
  2. Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMRO, будет сброшен.
  3. Если в результате выполнения команды изменяется счетчик команд, или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выплняется как NOP.