В данной статье представлена система команд для микроконтроллеров семейства 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)