Опубликован: 25.07.2003 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 10:

Специальные функции и система команд микроконтроллеров серии PIC

< Лекция 9 || Лекция 10: 123 || Лекция 11 >

5.3. Система команд микроконтроллеров подгруппы PIC16F8X

5.3.1. Перечень и форматы команд

Микроконтроллеры подгруппы PIC16F8X имеют простую и эффективную систему команд, состоящую всего из 35 команд.

Каждая команда МК подгруппы PIC16F8X представляет собой 14-битовое слово, разделенное на код операции (OPCODE), и поле для одного и более операндов, которые могут участвовать или не участвовать в этой команде. Система команд PIC16F8X является ортогональной и включает в себя команды работы с байтами, команды работы с битами и операции с константами и команды управления. В таблице 5.10 приведены описания полей команд.

Таблица 5.10. Описания полей команд МК семейства PIC16CXXX.
Поле Описание
f Адрес регистра
w Рабочий регистр
b Номер бита в 8-разрядном регистре
k Константа
x Не используется. Ассемблер формирует код с x=0
d

Регистр назначения:

d=0 – результат в регистре w

d=1 – результат в регистре f

По умолчанию d=1

label Имя метки
TOS Beршина стека
PC Счетчик команд
PCLATH Регистр PCLATH
GIE Бит разрешения всех прерываний
WDT Сторожевой таймер
/TO Тайм-аут
/PD Выключение питания
dest Регистр назначения: рабочий регистр w или регистр, заданный в команде
[ ] Необязательные параметры
( ) Содержание
\to Присвоение
< > Поле номера бита
\in Из набора

Для команд работы с байтами f обозначает регистр, с которым производится действие; d – бит, определяющий, куда положить результат. Если d =0, то результат будет помещен в регистр w, при d=1 результат будет помещен в регистр " f ", упомянутый в команде.

Для команд работы с битами b обозначает номер бита, участвующего в команде, а f – это регистр, в котором данный бит расположен.

Для команд передачи управления и операций с константами, k обозначает восьми- или одиннадцатибитную константу.

Почти все команды выполняются в течение одного командного цикла. В двух случаях исполнение команды занимает два командных цикла:

  • проверка условия и переход;
  • изменение программного счетчика как результат выполнения команды.

Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время исполнения командного цикла будет 1 мкс.

Основные форматы команд МК изображены на рис. 5.15.

Система команд МК подгруппы PIC16F8X приведена в табл. 5.11.

Основные форматы команд.

Рис. 5.15. Основные форматы команд.
Таблица 5.11. Система команд МК подгруппы PIC16F8X.
Мнемоника Описание команды Циклы Биты состояния Прим.
ADDWF f, d Сложение W с f 1 C, DC, Z 1, 2
ANDWF f, d Логическое И W и f 1 Z 1, 2
CLRF f Сброс регистра f 1 Z 2
CLRW Сброс регистра W 1 Z
COMF f, d Инверсия регистра f 1 Z 1, 2
DECF f, d Декремент регистра f 1 Z 1, 2
DECFSZ f, d Декремент f, пропустить команду, если 0 1(2) 1, 2, 3
INCF f, d Инкремент регистра f 1 Z 1, 2
INCFSZ f, d Инкремент f, пропустить команду, если 0 1(2) 1, 2, 3
IORWF f, d Логическое ИЛИ W и f 1 Z 1, 2
MOVF f, d Пересылка регистра f 1 Z 1, 2
MOVWF f Пересылка W в f 1
NOP - Холостая команда 1
RLF f, d Сдвиг f влево через перенос 1 C 1, 2
RRF f, d Сдвиг f вправо через перенос 1 C 1, 2
SUBWF f, d Вычитание W из f 1 C, DC, Z 1, 2
SWAPF f, d Обмен местами тетрад в f 1 1, 2
XORWF f, d Исключающее ИЛИ W и f 1 Z 1, 2
BCF f, b Сброс бита в регистре f 1 1, 2
BSF f, b Установка бита в регистре f 1 1, 2
BTFSC f, b Пропустить команду, если бит в f равен нулю 1(2) 3
BTFSS f, b Пропустить команду, если бит в f равен единице 1(2) 3
ADDLW k Сложение константы и W 1 C, DC, Z
ANDLW k Логическое И константы и W 1 Z
CALL k Вызов подпрограммы 2
CLRWDT - Сброс сторожевого таймера WDT 1 /TO, /P
GOTO k Переход по адресу 2
IORLW k Логическое ИЛИ константы и W 1 Z
MOVLW k Пересылка константы в W 1
RETFIE - Возврат из прерывания 2
RETLW k Возврат из подпрограммы с загрузкой константы в W 2
RETURN - Возврат из подпрограммы 2
SLEEP - Переход в режим SLEEP 1 /TO, /P
SUBLW k Вычитание W из константы 1 C, DC, Z
XORLW k Исключающее ИЛИ константы и W 1 Z

Примечания к таблице:

  1. Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1 ), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включенного на ввод, находится "1", а внешнее устройство формирует на этом выводе "0", то в разряде данных будет записан "0".
  2. Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1 ), то предварительный делитель, если он подключен к TMRO, будет сброшен.
  3. Если в результате выполнения команды изменяется счетчик команд или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выполняется как NOP.

5.3.2. Команды работы с байтами

Команды работы с байтами используются в PIC МК для пересылки данных между регистрами и выполнения математических операций над их содержимым. Несмотря на относительно небольшой набор команд, они позволяют реализовать целый ряд операций. Это связано, в частности, с возможностью указать в команде адрес размещения результата операции.

Преимуществом системы команд является также возможность использования различных способов обращения к регистрам. Адрес регистра может быть указан непосредственно в команде соответствующим 7-битовым полем f. При этом доступ возможен только к данным, расположенным в пределах текущего банка данных. Адресация данных может осуществляться и с помощью индексного регистра FSR, путем обращения к регистру косвенной адресации INDF, расположенному по нулевому адресу.

Пересылка данных выполняется с помощью двух команд: MOVF и MOVWF, назначение которых существенно различается. Команда MOVF используется для установки бита нулевого результата в зависимости от содержимого определенного регистра и может применяться для его загрузки в регистр w. Команда MOVWF используется для записи содержимого рабочего регистра w в указанный регистр МК. Если в качестве этого регистра указывается INDF, то адрес регистра назначения выбирается из регистра FSR. При выполнении данной команды биты состояния не изменяются.

Специальные команды CLRF f и CLRW применяются для очистки регистров МК. Команда CLRF f записывает ноль в указанный регистр, а команда CLRW – в рабочий регистр. При этом необходимо помнить, что они также устанавливают соответствующее значение бита нуля.

Наиболее часто используемой арифметической операцией является сложение, которое выполняется командой ADDWF f,d. Эта операция может изменять все биты состояния. Бит нуля устанавливается в 1, если при выполнении логической операции "И" над полученным результатом и числом 0x0FF (255) получается ноль. Бит переноса устанавливается в 1, если результат превышает число 0x0FF. Бит десятичного переноса устанавливается в 1, если сумма четырех младших битов результата превышает 0x0F (15).

При использовании операции вычитания SUBWF f, d следует иметь в виду, что в PIC МК она выполняет операцию сложения с отрицательным числом. То есть вместо операции d = f – w в действительности выполняется d = f + (-w). Отрицательное значение содержимого w вычисляется по формуле Negw = (Posw ^ 0x0FF) + 1.

Команды логических операций ANDWF f, d, IORWF f, d и XORWF f, d позволяют выполнять основные логические операции над соответствующими битами содержимого указанного регистра и регистра w. Бит нуля в регистре STATUS устанавливается в 1 или сбрасывается в 0 в зависимости от значения полученного результата. Команду XORWF f, d удобно использовать для проверки содержимого некоторого регистра. Для этого необходимо загрузить заданное число в регистр w и выполнить операцию XORWF f, d над содержимым проверяемого регистра и w. Если содержимое регистра равно содержимому w, то результат операции будет равен нулю, и бит нуля установится в 1.

Команда COMF f, d используется для инвертирования значений всех битов в регистре источника. Следует отметить, что эта команда не делает число отрицательным, то есть не переводит его в дополнительный код. Отрицательное число Neg может быть получено из положительного Pos следующим образом: Neg = (Pos ^ 0x0FF) + 1.

Команда SWAPF f, d меняет местами тетрады в регистре. Как и в остальных командах данной группы, результат выполнения может быть записан как в регистре w, так и в регистре-источнике. Данная команда не меняет значения какого либо из битов состояния, что может использоваться для восстановления содержимого контекстных регистров перед возвратом из прерывания. Команду SWAPF f, d можно применять, в частности, для хранения двух цифр в одном регистре, переставляя их в зависимости от того, какую из них вы хотите использовать. С помощью команды SWAPF f, d удобно разделить байт на две тетрады для их последующего отображения на дисплее.

Основной функцией команд циклического сдвига RLF f, d и RRF f, d является сдвиг содержимого регистра влево или вправо на один бит с записью на место младшего значащего бита значения бита переноса или, соответственно, установления бита переноса в соответствии со значением старшего значащего бита. Команды циклического сдвига могут использоваться для умножения и деления на число 2 в степени n. Они также служат для реализации последовательного ввода или вывода данных и позиционирования байта для того, чтобы можно было тестировать значение отдельных битов.

Команды инкремента INCF f, d и декремента DECF f, d используются для изменения содержимого регистра на 1. После выполнения команд инкремента и декремента может измениться только бит нуля. Изменения бита переноса, если результат превысит значение 0x0FF при инкременте или окажется меньше 0 при декременте, не происходит.

Для реализации условных переходов в программе существуют команды инкремента и декремента с пропуском команды при нулевом результате: INCFSZ f, d и DECFSZ f, d. С точки зрения обработки данных они работают аналогично командам INCF f, d и DECF f, d. Основное отличие от этих команд заключается в том, что при нулевом результате выполнения команды INCFSZ f, d или DECFSZ f, d пропускается следующая за ней команда. Это означает, что команды INCFSZ f, d и DECFSZ f, d могут использоваться для организации программных циклов. Другая особенность этих команд состоит в том, что они не влияют на содержимое битов состояния регистра STATUS.

Команда NOP означает отсутствие операции. Традиционно она используется для двух целей. Первая – обеспечение синхронизации программы с временными характеристиками различных устройств системы. Вторым возможным вариантом является использование команды NOP для удаления части программного кода. Вследствие того, что код команды NOP состоит из одних нулей, его легко ввести в память программ вместо любой другой команды, не прибегая к стиранию и репрограммированию всей памяти программ.

< Лекция 9 || Лекция 10: 123 || Лекция 11 >
Татьяна Фёдорова
Татьяна Фёдорова
Виктор Радкевич
Виктор Радкевич

Ответил на все тесты и сдал экзамен по курсу "Основы микропроцессорной техники". Результаты на сайе в зачетке не отображаются. Синхронизацию выполнял. 

Ирина Ткаченко
Ирина Ткаченко
Россия, Москва
Николай Ткаченко
Николай Ткаченко
Россия