Справочник по среднему семейству микроконтроллеров PICmicro
.pdfООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545
Раздел 29. Система команд
Содержание
29.1 |
Введение .................................................................................................................................................... |
29-2 |
29.2 |
Формат команд........................................................................................................................................... |
29-4 |
29.3 |
Обращение к регистрам специального назначения ............................................................................... |
29-5 |
29.3.1 STATUS как регистр назначения при выполнении команды......................................................... |
29-5 |
|
29.3.2 PCL как источник данных и регистр назначения при выполнении команды.............................. |
29-5 |
|
29.3.3 Битовые операции ............................................................................................................................. |
29-5 |
|
29.4 |
Такты выполнения команд........................................................................................................................ |
29-6 |
29.5 |
Описание команд....................................................................................................................................... |
29-7 |
29.6 |
Ответы на часто задаваемые вопросы ................................................................................................. |
29-44 |
29.7 |
Дополнительная литература .................................................................................................................. |
29-46 |
29
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
29-1 |
Раздел 29. Система команд |
DS33023A |
|
|
29.1 Введение
Каждая команда состоит из одного 14 - разрядного слова, разделенного на код операции (OPCODE), определяющий тип команды и один или несколько операндов, определяющие операцию команды. Полный список команд смотрите в таблице 29-1.
Система команд аккумуляторного типа, ортогональна и разделена на три основных группы:
•Байт ориентированные команды;
•Бит ориентированные команды;
•Команды управления и операций с константами. Описание полей кода операции смотрите в таблице 29-2.
Для байт ориентированных команд 'f' является указателем регистра, а 'd' указателем адресата результата.
Указатель регистра определяет, какой регистр должен использоваться в команде. Указатель адресата определяет, где будет сохранен результат. Если 'd'=0, результат сохраняется в регистре W. Если 'd'=1, результат сохраняется в регистре, который используется в команде.
Вбит ориентированных командах 'b' определяет номер бита участвующего в операции, а 'f' - указатель регистра, который содержит этот бит.
Вкомандах управления или операциях с константами 'k' представляет восемь или одиннадцать бит константы или значения литералов.
Все команды выполняются за один машинный цикл, кроме команд условия, в которых получен истинный результат и инструкций изменяющих значение счетчика команд PC. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 4 МГц все команды выполняются за 1мкс, если условие истинно или изменяется счетчик команд PC, команда выполняется за 2мкс.
29-2 |
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545
Таблица 29-1 Список команд микроконтроллеров среднего семейства
Мнемоника |
|
|
|
Описание |
|
|
Циклов |
14-разрядный код |
Изм. |
Прим. |
|||||
команды |
|
|
|
|
|
Бит 13 |
|
Бит 0 |
флаги |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
Байт ориентированные команды |
|
|
|
|
||||
ADDWF |
f,d |
Сложение W и f |
|
|
|
|
|
1 |
00 0111 |
dfff ffff |
C,DC,Z |
1,2 |
|||
ANDWF |
f,d |
Побитное 'И' W и f |
|
|
|
|
1 |
00 0101 |
dfff ffff |
Z |
1,2 |
||||
CLRF |
f |
Очистить f |
|
|
|
|
|
|
1 |
00 0001 |
1fff ffff |
Z |
2 |
||
CLRW |
- |
Очистить W |
|
|
|
|
|
|
1 |
00 0001 |
0xxx xxxx |
Z |
|
||
COMF |
f,d |
Инвертировать f |
|
|
|
|
|
1 |
00 1001 |
dfff ffff |
Z |
1,2 |
|||
DECF |
f,d |
Вычесть 1 из f |
|
|
|
|
|
1 |
00 0011 |
dfff ffff |
Z |
1,2 |
|||
DECFSZ |
f,d |
Вычесть 1 из f и пропустить если 0 |
|
1(2) |
00 1011 |
dfff ffff |
|
1,2,3 |
|||||||
INCF |
f,d |
Прибавить 1 к f |
|
|
|
|
|
1 |
00 1010 |
dfff ffff |
Z |
1,2 |
|||
INCFSZ |
f,d |
Прибавить 1 к f и пропустить если 0 |
1(2) |
00 1111 |
dfff ffff |
|
1,2,3 |
||||||||
IORWF |
f,d |
Побитное 'ИЛИ' W и f |
|
|
|
1 |
00 0100 |
dfff ffff |
Z |
1,2 |
|||||
MOVF |
f,d |
Переслать f |
|
|
|
|
|
|
1 |
00 1000 |
dfff ffff |
Z |
1,2 |
||
MOVWF |
f |
Переслать W в f |
|
|
|
|
|
1 |
00 0000 |
1fff ffff |
|
|
|||
NOP |
- |
Нет операции |
|
|
|
|
|
1 |
00 0000 |
0xx0 0000 |
|
|
|||
RLF |
f,d |
Циклический сдвиг f влево через перенос |
1 |
00 1101 |
dfff ffff |
C |
1,2 |
||||||||
RRF |
f,d |
Циклический сдвиг f вправо через перенос |
1 |
00 1100 |
dfff ffff |
C |
1,2 |
||||||||
SUBWF |
f,d |
Вычесть W из f |
|
|
|
|
|
1 |
00 0010 |
dfff ffff |
C,DC,Z |
1,2 |
|||
SWAPF |
f,d |
Поменять местами полубайты в регистре f |
1 |
00 1110 |
dfff ffff |
|
1,2 |
||||||||
XORWF |
f,d |
Побитное 'исключающее ИЛИ' W и f |
1 |
00 0110 |
dfff ffff |
Z |
1,2 |
||||||||
|
|
|
|
|
|
|
Бит ориентированные |
команды |
|
|
|
|
|
||
BCF |
f,b |
Очистить бит b в регистре f |
|
|
1 |
01 00bb bfff ffff |
|
1,2 |
|||||||
BSF |
f,b |
Установить бит b в регистре f |
|
|
1 |
01 01bb bfff ffff |
|
1,2 |
|||||||
BTFSC |
f,b |
Проверить |
бит |
b |
в |
регистре |
f, |
пропустить |
1(2) |
01 10bb bfff ffff |
|
3 |
|||
если 0 |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BTFSS |
f,b |
Проверить |
бит |
b |
в |
регистре |
f, |
пропустить |
1(2) |
01 11bb bfff ffff |
|
3 |
|||
если 1 |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Команды управления и операций с константами |
|
|
|
|
|||||||
ADDLW |
k |
Сложить константу с W |
|
|
1 |
11 111x |
kkkk kkkk |
C,DC,Z |
|
||||||
ANDLW |
k |
Побитное 'И' константы и W |
|
|
1 |
11 1001 |
kkkk kkkk |
Z |
|
||||||
CALL |
k |
Вызов подпрограммы |
|
|
|
2 |
10 0kkk kkkk kkkk |
|
|
||||||
CLRWDT |
- |
Очистить WDT |
|
|
|
|
|
1 |
00 0000 |
0110 0100 |
-TO,-PD |
|
|||
GOTO |
k |
Безусловный переход |
|
|
|
2 |
10 1kkk kkkk kkkk |
|
|
||||||
IORLW |
k |
Побитное 'ИЛИ' константы и W |
|
|
1 |
11 1000 |
kkkk kkkk |
Z |
|
||||||
MOVLW |
k |
Переслать константу в W |
|
|
1 |
11 00xx kkkk kkkk |
|
|
|||||||
RETFIE |
- |
Возврат |
из |
подпрограммы с |
разрешением |
2 |
00 0000 |
0000 1001 |
|
|
|||||
прерываний |
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
RETLW |
k |
Возврат |
из подпрограммы |
с |
загрузкой |
2 |
11 01xx kkkk kkkk |
|
|
||||||
константы в W |
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
RETURN |
- |
Возврат из подпрограммы |
|
|
2 |
00 0000 |
0000 1000 |
|
|
||||||
SLEEP |
- |
Перейти в режим SLEEP |
|
|
1 |
00 0000 |
0110 0011 |
-TO,-PD |
|
||||||
SUBLW |
k |
Вычесть W из константы |
|
|
1 |
11 110x |
kkkk kkkk |
C,DC,Z |
|
||||||
XORLW |
k |
Побитное 'исключающее ИЛИ' константы и W |
1 |
11 1010 |
kkkk kkkk |
Z |
|
Примечания:
1. При выполнении операции "чтение - модификация - запись" с портом ввода/вывода (например MOVF PORTB,1) исходные значения считываются с выводов порта, а не из выходных защелок. Например, если в выходной защелке было записана '1', а на соответствующем выходе низкий уровень сигнала, то обратно будет записано значение '0'.
2.При выполнении записи в TMR0 (и d=1) предделитель TMR0 сбрасывается, если он подключен к модулю TMR0.
3.Если условие истинно или изменяется значение счетчика команд PC, то инструкция выполняется за два цикла. Во втором цикле выполняется команда NOP.
29
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
29-3 |
Раздел 29. Система команд |
DS33023A |
|
|
29.2 Формат команд
На рисунке 29-1 показано формат трех групп команд. Код команды может быть от 3 до 6 бит, что позволяет реализовать 35 команд.
Примечание 1. Любой не реализованный код операции сохранен для последующих разработок. Использование недокументированного кода операции может привести к непредсказуемым последствиям.
Примечание 2. Для совместимости программного обеспечения со следующими версиями микроконтроллеров PICmicro не используйте команды TRIS и OPTION.
Во всех примерах используется следующий формат шестнадцатеричных чисел: 0xhh, где h - шестнадцатеричная цифра.
Представление двоичного числа:
00000100b, где b - указатель двоичного числа.
Рис. 29-1 Общий формат команд микроконтроллеров среднего семейства
|
Байт ориентированные операции с регистрами |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|||
13 |
|
|
|
8 |
7 |
6 |
0 |
|
d = 0 - результат сохраняется в w |
|
||
|
|
|
|
|
|
|
|
|
|
d = 1 - результат сохраняется в f |
|
|
|
|
OPCODE |
|
|
d |
f (№ в файле) |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
f - 7-разрядный адрес регистра |
|
|
Бит ориентированные операции с регистрами |
|||||||||||
|
|
|
||||||||||
13 |
|
|
10 |
9 |
7 |
6 |
0 |
|
b - 3-разрядный номер бита в регистре |
|
||
|
|
|
f - 7-разрядный адрес регистра |
|
||||||||
|
|
OPCODE |
|
|
|
b |
f (№ в файле) |
|
|
|
||
|
|
|
|
|
|
|
|
|
||||
|
Команды управления и операций с константами |
|
|
|||||||||
|
Общее |
|
|
|
|
|
|
|
|
|
||
13 |
|
|
|
8 |
7 |
|
0 |
|
k - 8-разрядное значение |
|
||
|
|
OPCODE |
|
|
|
k (константа) |
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
Только для инструкций CALL и GOTO |
|
|
|
|
|||||||
13 |
11 |
|
10 |
|
|
|
|
0 |
|
k - 11-разрядное значение |
|
|
|
OPCODE |
|
|
|
|
k (константа) |
|
|
|
|||
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29-4 |
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
|
|
ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545 |
|
|
|
|
|
|
|
Таблица 29-2 Описание полей кода операции |
|
|
Поле |
Описание |
|
f Адрес регистра (от 0x00 до 0x7F)
w Рабочий регистр (аккумулятор)
b Номер бита в 8-разрядном регистре
kКонстанта (данные или метка)
x Не имеет значения (0 или 1). Ассемблер генерирует x=0 для совместимости программы микроконтроллера с инструментальными средствами
dУказатель адресата результата операции: d = 0 - результат сохраняется в регистре w d = 1 - результат сохраняется в регистре f По умолчанию d = 1
label |
Имя метки |
TOS |
Вершина стека |
PC |
Счетчик команд |
PCLATH |
Буфер старшего байта счетчика команд |
GIE |
Бит глобального разрешения прерываний |
WDT |
Сторожевой таймер |
-TO |
Флаг переполнения WDT |
-PD |
Флаг сброса по включению питания |
dest |
Приемник, регистр w или регистр памяти |
[ ] |
Дополнительные параметры |
( ) |
Содержимое |
→ |
Присвоение |
<> Битовое поле
Из набора
Курсив Термин, определяемый пользователем
29.3 Обращение к регистрам специального назначения
Система команд микроконтроллеров PICmicro среднего семейства позволяет напрямую обращаться ко всем регистрам, включая регистры общего назначения. Существуют нюансы обращения к некоторым регистрам, которые должен учитывать разработчик программного обеспечения.
29.3.1 STATUS как регистр назначения при выполнении команды
Если обращение к регистру STATUS выполняется командой, которая воздействует на флаги Z, DC и C, то изменение этих трех битов командой заблокирована. Эти биты сбрасываются или устанавливаются согласно логике ядра микроконтроллера. Команды изменения регистра STATUS также не воздействуют на биты -TO и -PD. Поэтому результат выполнения команды с регистром STATUS может отличаться от ожидаемого. Например, команда CLRF STATUS сбросит три старших бита и установит бит Z (состояние регистра STATUS после выполнения команды 000uu1uu, где u - не изменяемый бит).
29.3.2 PCL как источник данных и регистр назначения при выполнении команды
Команды чтения, записи и "чтение - модификация - запись" регистра PCL могут иметь следующие результаты:
Чтение PCL: Запись PCL:
"Чтение - модификация - запись":
PCL → dest; PCLATH не изменяется.
PCLATH → |
PCH; |
|
|
8 |
- разрядное значение → |
PCL. |
|
PCL → операнд АЛУ; |
|
||
PCLATH → |
PCH; |
|
|
8 |
- разрядный результат → |
PCL. |
Где PCH - старший байт счетчика команд (не адресуемый регистр), PCLATH - буфер старшего байта счетчика команд, dest - регистр назначения.
29.3.3 Битовые операции |
29 |
При изменении любого бита регистра сначала регистр полностью читается из памяти данных, изменяется бит, |
|
обратно данные записываются в регистр ("чтение - модификация - запись"). Необходимо учитывать этот факт при |
|
обращении к некоторым регистрам специального назначения (например, регистры портов). |
|
Примечание. Изменение состояния управляющих битов (включая флаги прерываний) выполняется в такте Q1, поэтому не возникает проблем при обращении командой "чтение - модификация - запись" к регистрам, содержащим эти биты.
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
29-5 |
Раздел 29. Система команд |
DS33023A |
|
|
29.4 Такты выполнения команд
Каждый цикл команды (TCY) состоит из четырех тактов (Q1-Q4). Такт Q равен по длительности периоду тактового генератора (TOSC). Такты Q обеспечивают жесткую синхронизацию декодирования, чтения данных, обработки данных, записи результата для каждого цикла команды. На диаграмме показано соотношение тактов Q к циклу команды.
Цикл команды (TCY), состоящий из 4-х тактов, обобщенно выглядит следующим образом: Q1: Детектирование команды или принудительной пустой операции (NOP) Q2: Операция чтения данных или отсутствие операции
Q3: Обработка данных
Q4: Операция записи данных или отсутствие операции Детальный состав операций команды по тактам Q смотрите в описании команды.
Рис. 29-2 Временная диаграмма циклического повторения тактов Q
29-6 |
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545
29.5 Описание команд
ADDLW Сложить константу с W
Синтаксис: |
[label] |
ADDLW |
k |
|
|
||
Операнды: |
0 ≤ k ≤ 255 |
|
|
|
|
||
Операция: |
(W) + k → |
(W) |
|
|
|
|
|
Измен. флаги: |
C, DC, Z |
|
|
|
|
|
|
Код: |
11 |
|
111x |
|
kkkk |
kkkk |
|
Описание: |
Содержимое |
регистра W складывается с 8 - разрядной |
|||||
константой 'k'. Результат сохраняется в регистре W. |
|||||||
|
|||||||
Слов: |
1 |
|
|
|
|
|
|
Циклов: |
1 |
|
|
|
|
|
|
Выполнение |
|
|
|
|
|
|
|
команды по тактам |
Q1 |
|
Q2 |
|
Q3 |
Q4 |
|
|
|
|
|||||
|
Декодирование |
Чтение |
|
Выполнение |
Запись в |
||
|
команды |
|
константы 'k' |
регистр W |
|||
|
|
|
|||||
Пример 1: |
ADDLW |
|
0x15 |
|
|
|
|
|
До выполнения команды |
|
|
|
|||
|
|
|
W = 0x10 |
|
|
|
После выполнения команды
W = 0x25
Пример 2: |
ADDLW |
MYREG |
|
До выполнения команды |
|
|
|
W = 0x10 |
|
|
MYREG = 0x37 (адрес регистра) |
|
После выполнения команды |
|
|
|
W = 0x47 |
Пример 3: |
ADDLW |
HIGH (LU_TABLE) |
|
До выполнения команды |
W = 0x10
LU_TABLE = 0x9375 (адрес в памяти программ)
После выполнения команды
W = 0xA3
29
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
29-7 |
Раздел 29. Система команд |
DS33023A |
|
|
ADDWF Сложение W и f
Синтаксис:
Операнды:
Операция: Измен. флаги: Код:
Описание:
[label] |
ADDWF |
f,d |
|
|||
0 ≤ |
f ≤ 127 |
|
|
|
|
|
d |
[0,1] |
|
|
|
|
|
(W) + (f) → |
(dest) |
|
|
|
||
C, DC, Z |
|
|
|
|
|
|
|
00 |
|
0111 |
|
dfff |
ffff |
|
|
|
|
|
|
|
Сложить содержимое регистров W и 'f'. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре 'f'.
Слов: |
1 |
|
|
|
Циклов: |
1 |
|
|
|
Выполнение |
|
|
|
|
команды по тактам |
Q1 |
Q2 |
Q3 |
Q4 |
|
||||
|
Декодирование |
Чтение |
Выполнение |
Запись |
|
команды |
регистра 'f' |
результата |
|
|
|
|||
Пример 1: |
ADDWF |
FSR,0 |
|
|
До выполнения команды
W = 0x17 FSR = 0xC2
После выполнения команды
W = 0xD9
FSR = 0xC2
Пример 2: |
ADDWF |
INDF,1 |
До выполнения команды
W = 0x17 FSR = 0xC2
Значение регистра с адресом в FSR = 0x20 После выполнения команды
W = 0x17 FSR = 0xC2
Значение регистра с адресом в FSR = 0x37
Пример 3: |
ADDWF |
PCL,0 |
Случай 1 |
До выполнения команды |
|
|
|
W = 0x10 |
|
|
PCL = 0x37 |
|
|
C = x |
|
После выполнения команды |
|
|
|
PCL = 0x47 |
|
|
C = 0 |
Случай 2 |
До выполнения команды |
|
|
|
W = 0x10 |
PCL = 0xF7
PCH = 0x08 C = x
После выполнения команды
PCL = 0x07
PCH = 0x08 C = 1
29-8 |
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
ООО "Микро-Чип" - поставка комплектующих Microchip тел.: (095) 737-7545
ANDLW |
Побитное 'И' константы и W |
|||||
Синтаксис: |
[label] |
ANDLW |
k |
|
|
|
Операнды: |
0 ≤ k ≤ |
255 |
|
|
|
|
Операция: |
(W) .AND. k → |
(W) |
|
|
|
|
Измен. флаги: |
Z |
|
|
|
|
|
Код: |
11 |
1001 |
|
kkkk |
kkkk |
|
|
Выполняется |
побитное 'И' |
содержимого регистра W и |
|||
Описание: |
8 - разрядной константы 'k'. Результат сохраняется в |
|||||
|
регистре W. |
|
|
|
|
|
Слов: |
1 |
|
|
|
|
|
Циклов: |
1 |
|
|
|
|
|
Выполнение |
|
|
|
|
|
|
команды по тактам |
Q1 |
|
Q2 |
|
Q3 |
Q4 |
|
|
|
||||
|
Декодирование |
Чтение |
|
Выполнение |
Запись в |
|
|
команды |
константы 'k' |
регистр W |
|||
|
|
|||||
Пример 1: |
ANDLW |
0x5F (0101 1111) |
|
До выполнения команды
W = 0xA3 (1010 0011)
После выполнения команды
W = 0x03 (0000 0011)
Пример 2: |
ANDLW |
MYREG |
|
До выполнения команды |
|
|
|
W = 0xA3 |
|
|
MYREG = 0x37 (адрес регистра) |
|
После выполнения команды |
|
|
|
W = 0x23 |
Пример 3: |
ANDLW |
HIGH (LU_TABLE) |
|
До выполнения команды |
W = 0xA3
LU_TABLE = 0x9375 (адрес в памяти программ)
После выполнения команды
W = 0x83
29
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |
29-9 |
Раздел 29. Система команд |
DS33023A |
|
|
ANDWF |
Побитное 'И' W и f |
|
|||||
Синтаксис: |
[label] |
ANDWF |
f,d |
|
|||
Операнды: |
0 ≤ |
f ≤ |
127 |
|
|
|
|
d |
[0,1] |
|
|
|
|
||
Операция: |
|
|
|
|
|||
(W) .AND. (f) → |
(dest) |
|
|
|
|||
Измен. флаги: |
Z |
|
|
|
|
|
|
Код: |
|
00 |
0101 |
|
dfff |
ffff |
|
|
Выполняется |
побитное 'И' |
содержимого регистров W и 'f'. |
||||
Описание: |
Если d=0, результат сохраняется в регистре W. Если d=1, |
||||||
|
результат сохраняется в регистре 'f'. |
|
|||||
Слов: |
1 |
|
|
|
|
|
|
Циклов: |
1 |
|
|
|
|
|
|
Выполнение |
|
|
|
|
|
|
|
команды по тактам |
Q1 |
|
Q2 |
|
Q3 |
Q4 |
|
|
|
|
|||||
|
Декодирование |
Чтение |
|
Выполнение |
Запись |
||
|
|
команды |
регистра 'f' |
|
результата |
||
|
|
|
|
||||
Пример 1: |
ANDWF |
FSR,1 |
|
|
|
||
|
До выполнения команды |
|
|
|
W = 0x17 (0001 0111) FSR = 0xC2 (1100 0010)
После выполнения команды
W = 0x17
FSR = 0x02 (0000 0010)
Пример 2: |
ANDWF |
FSR,0 |
До выполнения команды
W = 0x17 (0001 0111) FSR = 0xC2 (1100 0010)
После выполнения команды
W = 0x02 (0000 0010) FSR = 0xC2
Пример 3: |
ANDWF |
INDF,1 |
До выполнения команды
W = 0x17 FSR = 0xC2
Значение регистра с адресом в FSR = 0x5A После выполнения команды
W = 0x17 FSR = 0xC2
Значение регистра с адресом в FSR = 0x15
29-10 |
WWW.MICROCHIP.RU – поставки и техподдержка на русском языке |