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