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

Примечания:

  1. 9-й бит счетчика команд будет установлен в 0 любой инструкцией, которая производит запись в регистр PC, кроме команды GOTO. (Просмотрите документацию по конкретному микроконтроллеру, раздел Память / Косвенная адресация данных / Регистры INDF и FSR (Memory Section/indirect Data Addressing, INDF and FSR Registers)
  2. Когда регистр ввода вывода используется для модификации самого себя (MOVF PORTB, 1), то для записи будут использоваться значения 0/1 непосредственно с ножек микроконтролера, а не значение записаное в выходную защелку порта. (См. схему устройства ноги ввода вывода из даташита.) Например если в защелку записана единица, а порт сконфигурен на ввод данных и снаружи на этом выводе логический 0, то в PORTB будет записан 0! Смысл в том, что выход защелки отделен от ножки контроллера тристабильным буфером и на вход считывается именно нога контроллера, которая за буфером. Поэтому вроде писали в порт 1, а читается 0, вот он то и пишется обратно.
  3. Инструкция TRIS f, где f=5,6, или 7 пишет значение аккумулятора W регистр управления тристабильным состоянием выходов защелок портов PORTA , B или C соответственно. 1 переводит выход в высокоимпендансное состояние и отключает от ноги выход защелки. Смысл весь в том что входной защелки у контроллера нет и нога читается прямо в шину. А на выход есть защелка у которой есть регистр управления состоянием выхода TRIS. Поэтому если выход защелки включен, то что пишем на вывод, то и читается взад, а если выход в Z состоянии, то что мы там писали на вывод не важно, все равно защелка от ноги оторвана, а взад читается то, что на ноге, а там может быть все что угодно.
  4. Если команда оперирует с регистром TMR0(и при этом d=1), тогда предделитель обнуляется (если он относится к модулю Timer 0)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: