Система команд 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.









