Система команд PIC-контроллеров серии
PIC16FXXX
Каждая команда представляет собой
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 или регистр, заданный в
команде |
[]: |
Необязательные параметры |
(): |
Содержание |
-->: |
Присвоение |
<>: |
Битовое поле |
О: |
Из набора |
Microchip - AsterPicAsm |
Функция |
Циклы |
Код команды |
Биты состояния |
Примеp |
ADDLW
- ADD kkH |
Сложение константы и W |
1 |
11 111x kkkk kkkk |
C, DC, Z |
ADD 05H |
ADDWF
- ADD ff / ADD ff W |
Сложение W c f |
1 |
00 0111 dfff ffff |
C, DC, Z |
ADD 3C / ADD 3CW |
ANDLW
- AND kkH |
Логическое И константы и W |
1 |
11 1001 kkkk kkkk |
Z |
AND 05H |
ANDWF
- AND ff / AND ff W |
Логическое И W и f |
1 |
00 0101 dfff ffff |
Z |
AND 3C / AND 3CW |
BCF
- RES ff,b |
Сброс бита в регистре f |
1 |
01 00bb bfff ffff |
|
RES 01,7 |
BSF
- SET ff,b |
Установка бита в регистре f |
1 |
01 01bb bfff ffff |
|
SET 01,7 |
BTFSC
- JBR ff,b |
Пропустить команду, если бит в f равен нулю |
1 (2) |
01 10bb bfff ffff |
|
JBR 2D,3 |
BTFSS
- JBS ff,b |
Пропустить команду, если бит в f равен единице |
1 (2) |
01 11bb bfff ffff |
|
JBS 2D,3 |
CALL
- JSR kkkk |
Вызов подпрограммы |
2 |
10 0kkk kkkk kkkk |
|
JSR 01B6 |
CLRF
- CLR ff |
Сброс регистра f |
1 |
00 0001 1fff ffff |
Z |
CLR 3C |
CLRW
- CLRW / CLR |
Сброс регистра W |
1 |
00 0001 0xxx xxxx |
Z |
CLR |
CLRWDT
- WDT |
Сброс сторожевого таймера WDT |
1 |
00 0000 0110 0100 |
__ __
TO, PD |
WDT |
COMF
- CPL ff / CPL ffW |
Инверсия регистра f |
1 |
00 1001 dfff ffff |
Z |
CPL 3C / CPL 3CW |
DECF
- DEC ff / DEC ffW |
Декремент регистра f |
1 |
00 0011 dfff ffff |
Z |
DEC 3C / DEC 3CW |
DECFSZ
- DEZ ff / DEZ ffW |
Декремент f, пропустить команду, если 0 |
1 (2) |
00 1011 dfff ffff |
|
DEZ 3C / DEZ 3CW |
GOTO
- JMP kkkk |
Переход по адресу |
2 |
10 1kkk kkkk kkkk |
|
JMP 02D5 |
INCF
- INC ff / INC ffW |
Инкремент регистра f |
1 |
00 1010 dfff ffff |
Z |
INC 3C / INC 3CW |
INCFSZ
- INZ ff / INZ ffW |
Инкремент f, пропустить команду, если 0 |
1 (2) |
00 1111 dfff ffff |
|
INZ 3C / INZ 3CW |
IORLW
- ORA kkH |
Логическое ИЛИ константы и W |
1 |
11 1000 kkkk kkkk |
Z |
ORA 05H |
IORWF
- ORA ff / ORA ffW |
Логическое ИЛИ W и f |
1 |
00 0100 dfff ffff |
Z |
ORA 3C / ORA 3CW |
MOVF
- LDA ff / LDA ffW |
Пересылка регистра f |
1 |
00 1000 dfff ffff |
Z |
LDA 3C / LDA 3CW |
MOVLW
- LDA kkH |
Пересылка константы в W |
1 |
11 00xx kkkk kkkk |
|
LDA 3AH |
MOVWF
- STA ff |
Пересылка W в f |
1 |
00 0000 1fff ffff |
|
STA 3C |
NOP
- NOP |
Холостая команда |
1 |
00 0000 0xx0 0000 |
|
NOP |
OPTION |
Загрузка регистра OPTION |
1 |
00 0000 0110 0010 |
|
|
RETFIE
- RTI |
Возврат из прерывания |
2 |
00 0000 0000 1001 |
|
RTI |
RETLW
- RET kk |
Возврат из подпрог. с загрузкой константы в W |
2 |
11 01xx kkkk kkkk |
|
RET 33 |
RETURN
- RTS |
Возврат из подпрограммы |
2 |
00 0000 0000 1000 |
|
RTS |
RLF
- RLA ff / RLA ffW |
Сдвиг f влево через перенос |
1 |
00 1101 dfff ffff |
C |
RLA 3C / RLA 3CW |
RRF
- RRA / RRA ffW |
Сдвиг f вправо через перенос |
1 |
00 1100 dfff ffff |
C |
RRA3C / RRA 3CW |
SLEEP
- SLP |
Переход в режим SLEEP |
1 |
00 0000 0110 0011 |
__ __
TO, PD |
SLP |
SUBLW
- SUB kkH |
Вычитание W из константы |
1 |
11 110x kkkk kkkk |
C, DC, Z |
SUB 05H |
SUBWF
- SUB ff / SUB ff W |
Вычитание W из f |
1 |
00 0010 dfff ffff |
C, DC, Z |
SUB 3C / SUB 3CW |
SWAPF
- SPA ff / SPA ffW |
Обмен местами тетрад вf |
1 |
00 1110 dfff ffff |
|
SPA 3C / SPA 3CW |
TRIS |
Загрузка регистра TRIS |
1 |
00 0000 0110 0fff |
|
|
XORLW
- XOR kkH |
Исключающее ИЛИ константы и W |
1 |
11 1010 kkkk kkkk |
Z |
XOR 05H |
XORWF
- XOR ff / XOR ff W |
Исключающее ИЛИ W и f |
1 |
00 0110 dfff ffff |
Z |
XOR 3C / XOR 3CW |
|