Система команд PIC-контроллеров серии 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 | Сложение константы и W | 1 | 11 111x kkkk kkkk | C, DC, Z | |
ADDWF | Сложение W c f | 1 | 00 0111 dfff ffff | C, DC, Z | 1, 2 |
ANDLW | Логическое И константы и W | 1 | 11 1001 kkkk kkkk | Z | |
ANDWF | Логическое И W и f | 1 | 00 0101 dfff ffff | Z | 1, 2 |
BCF | Сброс бита в регистре f | 1 | 01 00bb bfff ffff | 1, 2 | |
BSF | Установка бита в регистре f | 1 | 01 01bb bfff ffff | 1, 2 | |
BTFSC | Пропустить команду, если бит в f равен нулю | 1 (2) | 01 10bb bfff ffff | 3 | |
BTFSS | Пропустить команду, если бит в f равен единице | 1 (2) | 01 11bb bfff ffff | 3 | |
CALL | Вызов подпрограммы | 2 | 10 0kkk kkkk kkkk | ||
CLRF | Сброс регистра f | 1 | 00 0001 1fff ffff | Z | 2 |
CLRW | Сброс регистра W | 1 | 00 0001 0xxx xxxx | Z | |
CLRWDT | Сброс сторожевого таймера WDT | 1 | 00 0000 0110 0100 |
__ __ |
|
COMF | Инверсия регистра f | 1 | 00 1001 dfff ffff | Z | 1, 2 |
DECF | Декремент регистра f | 1 | 00 0011 dfff ffff | Z | 1, 2 |
DECFSZ | Декремент f, пропустить команду, если 0 | 1 (2) | 00 1011 dfff ffff | 1, 2, 3 | |
GOTO | Переход по адресу | 2 | 10 1kkk kkkk kkkk | ||
INCF | Инкремент регистра f | 1 | 00 1010 dfff ffff | Z | 1, 2 |
INCFSZ | Инкремент f, пропустить команду, если 0 | 1 (2) | 00 1111 dfff ffff | 1, 2, 3 | |
IORLW | Логическое ИЛИ константы и W | 1 | 11 1000 kkkk kkkk | Z | |
IORWF | Логическое ИЛИ W и f | 1 | 00 0100 dfff ffff | Z | 1, 2 |
MOVF | Пересылка регистра f | 1 | 00 1000 dfff ffff | Z | 1, 2 |
MOVLW | Пересылка константы в W | 1 | 11 00xx kkkk kkkk | ||
MOVWF | Пересылка W в f | 1 | 00 0000 1fff ffff | ||
NOP | Холостая команда | 1 | 00 0000 0xx0 0000 | ||
OPTION | Загрузка регистра OPTION | 1 | 00 0000 0110 0010 | ||
RETFIE | Возврат из прерывания | 2 | 00 0000 0000 1001 | ||
RETLW | Возврат из подпрограммы с загрузкой константы в W | 2 | 11 01xx kkkk kkkk | ||
RETURN | Возврат из подпрограммы | 2 | 00 0000 0000 1000 | ||
RLF | Сдвиг f влево через перенос | 1 | 00 1101 dfff ffff | C | 1, 2 |
RRF | Сдвиг f вправо через перенос | 1 | 00 1100 dfff ffff | C | 1, 2 |
SLEEP | Переход в режим SLEEP | 1 | 00 0000 0110 0011 |
__ __ |
|
SUBLW | Вычитание W из константы | 1 | 11 110x kkkk kkkk | C, DC, Z | |
SUBWF | Вычитание W из f | 1 | 00 0010 dfff ffff | C, DC, Z | 1, 2 |
SWAPF | Обмен местами тетрад вf | 1 | 00 1110 dfff ffff | 1, 2 | |
TRIS | Загрузка регистра TRIS | 1 | 00 0000 0110 0fff | ||
XORLW | Исключающее ИЛИ константы и W | 1 | 11 1010 kkkk kkkk | Z | |
XORWF | Исключающее ИЛИ W и f | 1 | 00 0110 dfff ffff | 1, 2 |
Примечание:
- Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включенного на ввод, находится "1", а внешнее устройство формирует на этом выводе "0", то в этом разряде данных будет записан "0".
- Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMRO, будет сброшен.
- Если в результате выполнения команды изменяется счетчик команд, или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выплняется как NOP.