Содержание
Перечень и форматы команд
Микроконтроллеры подгруппы 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 или регистр, заданный в команде |
[ ] | Необязательные параметры |
( ) | Содержание |
→ | Присвоение |
Поле номера бита | |
Из набора |
Для команд работы с байтами 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 | C ,DC ,Z | 1, 2 | |
ANDWF f, d | Логическое И W и f | Z | 1, 2 | |
CLRF f | Сброс регистра f | Z | ||
CLRW | Сброс регистра W | Z | ||
COMF f, d | Инверсия регистра f | Z | 1, 2 | |
DECF f, d | Декремент регистра f | Z | 1, 2 | |
DECFSZ f, d | Декремент f, пропустить команду, если 0 | 1(2) | 1, 2, 3 | |
INCF f, d | Инкремент регистра f | Z | 1, 2 | |
INCFSZ f, d | Инкремент f, пропустить команду, если 0 | 1(2) | 1, 2, 3 | |
IORWF f, d | Логическое ИЛИ W и f | Z | 1, 2 | |
MOVF f, d | Пересылка регистра f | Z | 1, 2 | |
MOVWF f | Пересылка W в f | |||
NOP – | Холостая команда | |||
RLF f, d | Сдвиг f влево через перенос | C | 1, 2 | |
RRF f, d | Сдвиг f вправо через перенос | C | 1, 2 | |
SUBWF f, d | Вычитание W из f | C,DC,Z | 1, 2 | |
SWAPF f, d | Обмен местами тетрад в f | 1, 2 | ||
XORWF f, d | Исключающее ИЛИ W и f | Z | 1, 2 | |
BCF f, b | Сброс бита в регистре f | 1, 2 | ||
BSF f, b | Установка бита в регистре f | 1, 2 | ||
BTFSC f, b | Пропустить команду, если бит в f равен нулю | 1(2) | ||
BTFSS f, b | Пропустить команду, если бит в f равен единице | 1(2) | ||
ADDLW k | Сложение константы и W | C, DC, Z | ||
ANDLW k | Логическое И константы и W | Z | ||
CALL k | Вызов подпрограммы | |||
CLRWDT – | Сброс сторожевого таймера WDT | /TO, /P | ||
GOTO k | Переход по адресу | |||
IORLW k | Логическое ИЛИ константы и W | Z | ||
MOVLW k | Пересылка константы в W | |||
RETFIE – | Возврат из прерывания | |||
RETLW k | Возврат из подпрограммы с загрузкой константы в W | |||
RETURN – | Возврат из подпрограммы | |||
SLEEP – | Переход в режим SLEEP | /TO, /P | ||
SUBLW k | Вычитание W из константы | C, DC, Z | ||
XORLW k | Исключающее ИЛИ константы и W | Z | ||
Примечания к таблице:
|
Команды работы с байтами
Команды работы с байтами используются в 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 состоит из одних нулей, его легко ввести в память программ вместо любой другой команды, не прибегая к стиранию и репрограммированию всей памяти программ.
Команды работы с битами
Отличительной особенностью данной группы команд является то, что они оперируют с однобитными операндами, в качестве которых используются отдельные биты регистров МК.
Установка и сброс отдельных битов производится командами BSF f, b и BCF f, b. Любой доступный для записи бит в регистровой памяти может быть модифицирован таким способом. При этом гарантируется, что ни один из остальных битов регистра не будет изменен.
Однако при работе с портами ввода/вывода последнее утверждение не всегда справедливо. Связано это с тем, что значение числа, считываемого из регистра порта, зависит от конфигурации его выводов в качестве входов или выходов данных.
В системе команд, рассматриваемых PIC МК, отсутствуют команды условного перехода. Вместо них имеются такие, которые позволяют пропустить выполнение следующей команды. В частности, рассмотренные выше команды INCFSZ f, d и DECFSZ f, d удобны для организации циклов в программе.
Для управления процессом выполнения программы используются команды работы с битами BTFSC f, b и BTFSS f, b, позволяющие пропустить выполнение следующей команды программы в зависимости от состояния определенного бита в заданном регистре.
Если в качестве заданного регистра используется регистр STATUS, то можно организовать управление переходами программы в зависимости от состояния битов признаков результата операции, как предусмотрено в микропроцессорах стандартной архитектуры.
Последнее изменение этой страницы: 2016-04-23; Нарушение авторского права страницы
5.3.1. Перечень и форматы команд
Микроконтроллеры подгруппы PIC16F8X имеют простую и эффективную систему команд, состоящую всего из 35 команд.
Каждая команда МК подгруппы PIC16F8X представляет собой 14-битовое слово, разделенное на код операции (OPCODE), и поле для одного и более операндов, которые могут участвовать или не участвовать в этой команде. Система командPIC16F8X является ортогональной и включает в себя команды работы с байтами, команды работы с битами и операции с константами и команды управления. Втаблице 5.10приведены описания полей команд.
Таблица 5.10. Описания полей команд МК семейства PIC16CXXX.
Номер бита в 8-разрядном регистре
Не используется. Ассемблер формирует код с x=0
d=0– результат в регистреw
d=1– результат в регистреf
По умолчанию d=1
Бит разрешения всех прерываний
Регистр назначения: рабочий регистр w или регистр, заданный в команде
Поле номера бита
Для команд работы с байтами fобозначает регистр, с которым производится действие;d– бит, определяющий, куда положить результат. Еслиd =0, то результат будет помещен в регистрw, приd=1результат будет помещен в регистр «f», упомянутый в команде.
Для команд работы с битами bобозначает номер бита, участвующего в команде, аf– это регистр, в котором данный бит расположен.
Для команд передачи управления и операций с константами, kобозначает восьми- или одиннадцатибитную константу.
Почти все команды выполняются в течение одного командного цикла. В двух случаях исполнение команды занимает два командных цикла:
проверка условия и переход;
изменение программного счетчика как результат выполнения команды.
Один командный цикл состоит из четырех периодов генератора. Таким образом, длягенераторас частотой 4 МГц время исполнения командного цикла будет 1 мкс.
Основные форматы команд МК изображены на рис. 5.15.
Система командМК подгруппы PIC16F8X приведена втабл. 5.11.
Рис. 5.15.Основные форматы команд.
Таблица 5.11. Система команд МК подгруппы PIC16F8X.
5.2.4. Организация памяти программ и стека
Счетчик команд в МК PIC16F8Х имеет ширину 13 бит и способен адресовать 8Кх14бит объема программной памяти. Однако физически на кристаллах PIC16F83 и PIC16CR83 имеется только 512х14 памяти (адреса 0000h-01FFh ), а в МК PIC16F84 и PIC16CR84 – 1Кх14 памяти (адреса 0000h-03FFh ). Обращение к адресам выше 1FFh ( 3FFh ) фактически есть адресация в те же первые 512 адресов (первые 1К адресов).
Организация памяти программ и стека приведена на рис. 5.4.
В памяти программ есть выделенные адреса. Вектор сброса находится по адресу 0000h , вектор прерывания – по адресу 0004h . Обычно по адресу 0004h располагается подпрограмма идентификации и обработки прерываний , а по адресу 0000h – команда перехода на метку, расположенную за подпрограммой обработки прерываний .
5.2.5. Организация памяти данных
Память данных МК разбита на две области. Первые 12 адресов – это область регистров специальных функций ( SFR ), а вторая – область регистров общего назначения ( GPR ). Область SFR управляет работой прибора.
Обе области разбиты в свою очередь на банки 0 и 1. Банк 0 выбирается обнулением бита RP0 регистра статуса ( STATUS ). Установка бита RP0 в единицу выбирает банк 1. Каждый банк имеет протяженность 128 байт. Однако для PIC16F83 и PIC16CR83 память данных существует только до адреса 02Fh , а для PIC16F84 и PIC16CR84 – до адреса 04Fh .
На рис. 5.5 изображена организация памяти данных.
Некоторые регистры специального назначения продублированы в обоих банках, а некоторые расположены в банке 1 отдельно.
Регистры с адресами 0Ch – 4Fh могут использоваться как регистры общего назначения, которые представляют собой статическое ОЗУ. Адреса регистров общего назначения банка 1 отображаются на банк 0. Следовательно, когда установлен банк 1, то обращение к адресам 8Ch – CFh фактически адресует банк 0.
В регистре статуса помимо бита RP0 есть еще бит RP1 , что позволяет обращаться к четырем страницам (банкам) будущих модификаций этого кристалла.
К ячейкам ОЗУ можно адресоваться прямо, используя абсолютный адрес каждого регистра , или косвенно, через регистр указатель FSR . Косвенная адресация использует текущее значение разрядов RP1:RP0 для доступа к банкам. Это относится и к EEPROM памяти данных. В обоих случаях можно адресовать до 512 регистров .
5.2.6. Регистры специального назначения
Регистр статуса ( STATUS ) содержит признаки операции (арифметические флаги) АЛУ , состояние контроллера при сбросе и биты выбора страниц для памяти данных. Назначение бит регистра приведено в табл. 5.3.
R/W-0 | R/W-0 | R/W-0 | R-1 | R-1 | R/W-x | R/W-x | R/W-x |
IRP | RP1 | RP0 | /TO | /PD | Z | DC | C |
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
Бит 7: IRP : бит выбора страницы банка данных (используется при косвенной адресации ) 0 = банк 0,1 (00h – FFh) 1 = банк 2,3 (100h – 1FFh) Бит IRP не используется в МК подгруппы PIC16F8X Биты 6-5: RP1:RP0 : биты выбора страницы банка данных (используются при прямой адресации ) 00 = банк 0 (00h – 7Fh) 01 = банк 1 (80h – FFh) 10 = банк 2 (100h – 17Fh) 11 = банк 3 (180h – 1FFh) В МК подгруппы PIC16F8X используется только бит RP0 Бит 4: /TO : бит срабатывания сторожевого таймера 1 = после включения питания, а также командами CLRWDT и SLEEP 0 = по завершении выдержки сторожевого таймера Бит 3: /PD : бит снижения потребляемой мощности 1 = после включения питания, а также командой CLRWDT 0 = по команде SLEEP Бит 2: Z : бит нулевого результата 1 = результат арифметической или логической операции нулевой 0 = результат арифметической или логической операции ненулевой Бит 1: DC : бит десятичного переноса/заема (для команд ADDWF и ADDLW ) 1 = имеет место перенос из 4-го разряда 0 = нет переноса из 4-го разряда Бит 0: C : бит переноса/заема (для команд ADDWF и ADDLW ) 1 = имеет место перенос из самого старшего разряда 0 = нет переноса из самого старшего разряда Примечание: вычитание осуществляется путем прибавления дополнительного кода второго операнда. При выполнении команд сдвига этот бит загружается из младшего или старшего разряда сдвигаемого источника. Здесь и далее: R — читаемый бит; W — записываемый бит; S — устанавливаемый бит; U — неиспользуемый бит (читается как "0"); -n = 0 или 1 — значение бита после сброса. Регистр статуса доступен для любой команды так же, как любой другой регистр . Однако если регистр STATUS является регистром назначения для команды, влияющей на биты Z , DC или C , то запись в эти три бита запрещается. Кроме того, биты /TO и /PD устанавливаются аппаратно и не могут быть записаны в статус программно. Это следует иметь в виду при выполнении команды с использованием регистра статуса. Например, команда CLRF STATUS обнулит все биты, кроме битов /TO и /PD , а затем установит бит Z=1 . После выполнения этой команды регистр статуса может и не иметь нулевого значения (из-за битов /TO и /PD ) STATUS=000uu1uu , где u – неизменяемое состояние. Поэтому рекомендуется для изменения регистра статуса использовать только команды битовой установки BCF , BSF , MOVWF , которые не изменяют остальные биты статуса. Воздействие всех команд на биты статуса рассматривается в разделе " Описание системы команд". Регистр конфигурации ( OPTION ) является доступным по чтению и записи регистром , который содержит управляющие биты для конфигурации предварительного делителя (предделителя), внешних прерываний , таймера , а также резисторов " pull -up" на выводах PORTB . Назначение бит регистра приведено в табл. 5.4. |
R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 |
/RBPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
Бит 7: /RBPU : бит установки резисторов " pull -up" на выводах PORTB 0 = резисторы " pull -up" подключены 1 = резисторы " pull -up" отключены Бит 6: INTEDG : бит выбора перехода сигнала прерывания 0 = прерывание по спаду сигнала на выводе RB0/INT 1 = прерывание по фронту сигнала на выводе RB0/INT Бит 5: T0CS : бит выбора источника сигнала таймера TMR0 0 = внутренний тактовый сигнал ( CLKOUT ) 1 = переход на выводе RA4/T0CKI Бит 4: T0SE : бит выбора перехода источника сигнала для TMR0 0 = приращение по фронту сигнала на выводе RA4/T0CKI 1 = приращение по спаду сигнала на выводе RA4/T0CKI Бит 3: PSA : бит назначения пределителя 0 = предделитель подключен к TMR0 1 = предделитель подключен к сторожевому таймеру WDT |
|||||||
Биты 2-0: PS2:PS0: биты выбора коэффициента деления пределителя |
Значения бит | Скорость TMR0 | Скорость WDT |
---|---|---|
000 | 1:2 | 1:1 |
001 | 1:4 | 1:2 |
010 | 1:8 | 1:4 |
011 | 1:16 | 1:8 |
100 | 1:32 | 1:16 |
101 | 1:64 | 1:32 |
110 | 1:128 | 1:64 |
111 | 1:256 | 1:128 |
В том случае, когда предделитель обслуживает сторожевой таймер WDT , таймеру TMR0 назначается коэффициент предварительного деления 1:1.
Регистр условий прерывания ( INTCON ) является доступным по чтению и записи регистром , который содержит биты доступа для всех источников прерываний . Назначение бит регистра приведено в табл. 5.5.
R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-0 | R/W-x |
GIE | EEIE | T0IE | INTE | RBIE | T0IF | INTF | RBIF |
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
Бит 7: GIE : бит разрешения всех прерываний 0 = запрещены все прерывания 1 = разрешены все незамаскированные прерывания Бит 6: EEIE : бит разрешения прерывания записи в EEPROM 0 = запрещены прерывания записи в EEPROM 1 = разрешены прерывания записи в EEPROM Бит 5: T0IE : бит разрешения прерывания по переполнению TMR0 0 = запрещены прерывания от TMR0 1 = разрешены прерывания от TMR0 Бит 4: INTE : бит разрешения прерываний по входу RB0/INT 0 = запрещены прерывания по входу RB0/INT 1 = разрешены прерывания по входу RB0/INT Бит 3: RBIE : бит разрешения прерываний по изменению PORTB 0 = запрещены прерывания по изменению PORTB 1 = разрешены прерывания по изменению PORTB Бит 2: T0IF : бит запроса прерывания по переполнению TMR0 0 = прерывание по переполнению TMR0 отсутствует 1 = прерывание по переполнению TMR0 имеет место Бит 1: INTF : бит запроса прерывания по входу RB0/INT 0 = прерывание по входу RB0/INT отсутствует 1 = прерывание по входу RB0/INT имеет место Бит 0: RBTF : бит запроса прерывания по изменению PORTB 0 = ни на одном из входов RB7:RB4 состояние не изменилось 1 = хотя бы на одном из входов RB7:RB4 изменилось состояние Бит разрешения всех прерываний GIE сбрасывается автоматически при следующих обстоятельствах:
Прерывание INT может вывести процессор из режима SLEEP , если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет: будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP . Сброс битов – запросов прерываний – должен осуществляться соответствующей программой обработки. |