
В данной статье представлена система команд для микроконтроллеров семейства PIC16C5X. Она будем полезна тем кто работает с этими микроконтроллерами не так давно и не помнит всех команд. В приведенной таблице можно видеть мнемонику каждой команды, краткое описание, цикл, 12-ти битный код и какие флаги изменяются при выполнении команды.
БАЙТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ
Мнемоника |
Краткое описание |
Циклов |
12-ти битный код |
Изменяет флаги |
Прим. |
ADDWF f,d |
Сложение W и f |
1 |
0001 11DF FFFF |
C, DC, Z |
1, 2, 4 |
ANDWF f,d |
Поразрядная операция «И» W и f |
1 |
0001 01DF FFFF |
Z |
2, 4 |
CLRF f |
Очистка регистра f |
1 |
0000 011F FFFF |
Z |
4 |
CLRW |
Очистка регистра W |
1 |
0000 0100 0000 |
Z |
|
COMF f,d |
Инвертирование битов регистра f |
1 |
0010 01DF FFFF |
Z |
|
DECF f,d |
Уменьшение значения регистра f |
1 |
0000 11DF FFFF |
Z |
2, 4 |
DECFSZ f,d |
Уменьшение значения регистра f, пропуск следующей инструкции если результат равен нулю. |
1(2) |
0010 11DF FFFF |
нет |
2, 4 |
INCF f,d |
Увеличение значения регистра f на 1 |
1 |
0010 10DF FFFF |
Z |
2, 4 |
INCFSZ f,d |
Увеличение значения регистра f, пропуск следующей инструкции если результат равен нулю. |
1(2) |
0011 11DF FFFF |
нет |
2, 4 |
IORLW k |
Логическая операция включающего ИЛИ с символом и W |
1 |
1101 KKKK KKKK |
Z |
2, 4 |
IORWF f,d |
Логическая операция включающего ИЛИ W и f |
1 |
0001 00DF FFFF |
Z |
|
MOVF f,d |
Пересылка содержимого регистра f |
1 |
0000 00DF FFFF |
Z |
2, 4 |
MOVWF f |
Пересылка содержимого регистра W в регистр f |
1 |
0000 001F FFFF |
нет |
1, 4 |
NOP |
Пустая команда |
1 |
0000 0000 0000 |
нет |
|
RLF f,d |
Циклический сдвиг влево через флаг переноса |
1 |
0011 01DF FFFF |
Z |
2, 4 |
RRF f,d |
Циклический сдвига вправо через флаг переноса |
1 |
0011 00DF FFFF |
Z |
2, 4 |
SUBWF f,d |
Вычитание W из f |
1 |
0000 10DF FFFF |
C, DC, Z |
1, 2, 4 |
SWAPF f,d |
Обмен местами полу-байт регистра f |
1 |
0011 10DF FFFF |
нет |
2, 4 |
XORWF f,d |
Логическая операция исключающего ИЛИ с W и f |
1 |
0001 10DF FFFF |
Z |
2, 4 |
БИТ-ОРИЕНТИРОВАННЫЕ КОМАНДЫ
Мнемоника |
Краткое описание |
Циклов |
12-ти битный код |
Изменяет флаги |
Прим. |
BCF f,d |
Очистка бита в f |
1 |
0100 BBBF FFFF |
нет |
2, 4 |
BSF f,b |
Установка бита в f |
1 |
0101 BBBF FFFF |
нет |
2, 4 |
BTFSC f,b |
Проверка на равенство бита нулю, пропускаем след. команду если да. |
1(2) |
0110 BBBF FFFF |
нет |
|
BTFSS f,b |
Проверка на равенство бита 1, пропускаем след. команду если да. |
1(2) |
0111 BBBF FFFF |
нет |
|
СИМВОЛЬНЫЕ КОМАНДЫ И КОМАНДЫ ВЕТВЛЕНИЯ
Мнемоника |
Краткое описание |
Циклов |
12-ти битный код |
Изменяет флаги |
Прим. |
ANDLW k |
Логическая операция «И» с символом и W |
1 |
1110 KKKK KKKK |
Z |
|
CALL k |
Вызов процедуры |
2 |
1001 KKKK KKKK |
нет |
1 |
CLRWDT |
Сброс Сторожевого Таймера (WDT) |
1 |
0000 0000 0100 |
TO, PD |
|
GOTO k |
Безусловный переход |
2 |
101K KKKK KKKK |
нет |
|
MOVLW k |
Пересылка литеры в регистр W |
1 |
1100 KKKK KKKK |
нет |
|
OPTION |
Загрузка данных в регистр OPTION |
1 |
0000 0000 0010 |
нет |
|
RETLW k |
Возврат с литерой в W |
2 |
1000 KKKK KKKK |
нет |
|
SLEEP |
Переход в режим «сна» |
1 |
0000 0000 0011 |
TO, PD |
|
TRIS f |
Загрузка данных в регистр TRIS |
1 |
0000 0000 0FFF |
нет |
3 |
XORLW k |
Логическая операция исключающего ИЛИ с символом и W |
1 |
1111 KKKK KKKK |
Z |
|
Примечания:
- 9-й бит счетчика команд будет установлен в 0 любой инструкцией, которая производит запись в регистр PC, кроме команды GOTO. (Просмотрите документацию по конкретному микроконтроллеру, раздел Память / Косвенная адресация данных / Регистры INDF и FSR (Memory Section/indirect Data Addressing, INDF and FSR Registers)
- Когда регистр ввода вывода используется для модификации самого себя (MOVF PORTB, 1), то для записи будут использоваться значения 0/1 непосредственно с ножек микроконтролера, а не значение записаное в выходную защелку порта. (См. схему устройства ноги ввода вывода из даташита.) Например если в защелку записана единица, а порт сконфигурен на ввод данных и снаружи на этом выводе логический 0, то в PORTB будет записан 0! Смысл в том, что выход защелки отделен от ножки контроллера тристабильным буфером и на вход считывается именно нога контроллера, которая за буфером. Поэтому вроде писали в порт 1, а читается 0, вот он то и пишется обратно.
- Инструкция TRIS f, где f=5,6, или 7 пишет значение аккумулятора W регистр управления тристабильным состоянием выходов защелок портов PORTA , B или C соответственно. 1 переводит выход в высокоимпендансное состояние и отключает от ноги выход защелки. Смысл весь в том что входной защелки у контроллера нет и нога читается прямо в шину. А на выход есть защелка у которой есть регистр управления состоянием выхода TRIS. Поэтому если выход защелки включен, то что пишем на вывод, то и читается взад, а если выход в Z состоянии, то что мы там писали на вывод не важно, все равно защелка от ноги оторвана, а взад читается то, что на ноге, а там может быть все что угодно.
- Если команда оперирует с регистром TMR0(и при этом d=1), тогда предделитель обнуляется (если он относится к модулю Timer 0)