Система команд микроконтроллера PIC16F877

Каждая команда микроконтроллера состоит из одного 14-разрядного слова разделенного на код операции, определяющий действие команды, один или несколько операндов, указывающих на данные, над которыми будет проводиться действие.

Полный список команд представлен в табл.2, табл.3, табл.4. Команды разделены на следующие группы:

· байтовые команды (табл.2);

· битовые команды (табл.3);

· команды управления и операций с константами (табл.4).

На рис. 4 показан формат команд трех основных групп.

Для байт-ориентированных команд:

·  является указателем регистра и определяет, какой регистр должен использоваться в команде;

·  указателем адресата результата и определяет, где будет сохранен результат.

Если , результат сохраняется в регистре W.

Если , результат сохраняется в регистре, который используется в команде.

В бит-ориентированных командах:

·  определяет номер бита участвующего в операции;

·  — указатель регистра, который содержит этот бит.

В командах управления или операциях с константами:

·  представляет восемь или одиннадцать бит константы.

Рисунок 4 - Формат команд трех основных групп микроконтроллера PIC16F877.

 

Все команды выполняются за один машинный цикл, кроме команд условия, в которых замещается значение программного счетчика. В случае выполнения команды за два машинных цикла, во втором цикле выполняется инструкция NOP. Один машинный цикл состоит из четырех тактов генератора. Для тактового генератора с частотой 4 МГц команда выполняется за 2 мкс.

Таблица 2. Байтовые команды

Мнемоника команды Операция Циклы Код команды Флажки Примечание
ADDWF f, d Сложение (W + f  d) 1 00 0111 dfff ffff C.DC.Z 1,2
ANDWF f, d Логическое "И" (W and f  d) 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 Декремент f 1 00 0011 dfff ffff Z 1,2
DECFSZ f, d Декремент f, пропуск если "0" 1(2) 00 1011 dfff ffff   1,2,3
INCF f, d Инкремент f 1 00 1010 dfff ffff Z 1,2
INCFSZ f, d Инкремент f, пропуск если "0" 1(2) 00 1111 dfff ffff   1,2,3
IORWF f, d Логическое "ИЛИ" (W or f  d) 1 00 0100 dfff ffff Z 1,2
MOVF f, d Пересылка (f  W) 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 Сдвиг влево через перенос 1 00 1101 dfff ffff С 1,2
RRF f, d Сдвиг вправо через перенос 1 00 1100 dfff ffff C 1, 2
SUBWF f, d Вычитание (f  W  d) 1 00 0010 dfff ffff C,DC,Z 1, 2
SWAPF f, d Обменять полубайты f 1 00 1110 dfff ffff   1,2
XOFWF f, d Исключающее "ИЛИ" (W or f  d) 1 00 0110 dfff ffff Z 1,2

 

Таблица 3. Битовые команды

Мнемоника команды Операция Циклы Код команды Флажки Примечание
BCF f. b Обнулить бит b в f 1 01 00bb bfff ffff   1,2
BSF f, b Установить бит b в f 1 01 0lbb bfff ffff   1,2
BTFSC f, b Тест бита b в f, пропуск если "0" 1(2) 01 l0bb bfff ffff   3
BTFSS f, b Тест бита b в f пропуск если "1" 1(2) 01 11bb bfff ffff   3

 

Таблица 4. Команды управления и операций с константами   

Мнемоника команды Операция Циклы Код команды Флажки Примечание
ADDLW к Сложение (k + W  W) 1 11 111x kkkk kkkk C,DC,Z  
ANDLW к Логическое "И" (k and W  W) 1 11 1001 kkkk kkkk Z  
CALL k Вызов подпрограммы k 2 10 0kkk kkkk kkkk    
CLRWDT - Обнулить WDT 1 00 0000 0110 0100 TO,PD  
GOTO k Переход к адресу k 2 10 1kkk kkkk kkkk    
IORLW k Логическое "ИЛИ" (К or W  W) 1 11 1000 kkkk kkkk Z  
MOVLW k Пересылка (k  W) 1 11 00xx kkkk kkkk    
RETFIE - Возврат из прерывания 2 00 0000 0000 1001    
RETLW k Возврат с константой 2 11 01xx kkkk kkkk    
RETURN - Возврат из подпрограммы 2 00 0000 0000 1000    
SLEEP - Останов 1 00 0000 0110 0011 TO,PD  
SUBLW k Вычитание (k  W  W) 1 11 110х kkkk kkkk C,DC,Z  
XORLW k Исключающее "ИЛИ"(k or W  W) 1 11 1010 kkkk kkkk Z  

 

    Примечание 1. Если регистр ввода/вывода изменяется, то исходным значением будет величина, считанная непосредственно с контактов.

    Примечание 2. Если команда модифицирует регистр TMR0, то предделитель будет обнулен.

    Примечание 3. Если в счетчик программ записывается адрес (т.е. условие проверки "истина"), то команда выполняется за два цикла. Второй цикл выполняется как команда NOP.

Пример программы для микроконтроллера PIC16F877

list p=16f877; директива определения процессора #include <p16f877.inc>; подключение списка определений переменных процессора __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF; '__CONFIG' - директива определения битов конфигурации процессора; ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХw_temp EQU 0x70; переменная для сохранения текущего состояния при обработке прерывания status_temp EQU 0x71; переменная для сохранения текущего состояния при обработке; прерывания ORG 0x000; размещение команд по адресу сброса процессора clrf PCLATH; очистка старших бит счетчика команд goto main; переход на основную программу ORG 0x004; размещение команд по вектору прерывания процессора movwf  w_temp; сохранение текущего значения регистра W movf STATUS,w; сохранение текущего значения регистра STATUS movwf status_temp;  ПРЕРЫВАЮЩАЯ ПРОГРАММАmovf status_temp,w; восстановление значения регистра STATUS movwf STATUSswapf w_temp,fswapf w_temp,w; восстановление значения регистра W retfie; возврат в основную программу main; ОСНОВНАЯ ПРОГРАММАEND; директива конца программы

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: