Меню Рубрики

Где хранится указатель стека микроконтроллеров подгруппы pic16f8х

Содержание

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

Микроконтроллеры подгруппы 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
Примечания к таблице:

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

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

Команды работы с байтами используются в 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.

Таблица 5.3. Назначение бит регистра STATUS (адрес 03h, 83h).

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.

Читайте также:  Блюда из антоновских яблок
Таблица 5.4. Назначение бит регистра OPTION (адрес 81h).

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.

Таблица 5.5. Назначение бит регистра INTCON (адреса 0Bh, 8Bh).

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 сбрасывается автоматически при следующих обстоятельствах:

  • по включению питания;
  • по внешнему сигналу /MCLR при нормальной работе;
  • по внешнему сигналу /MCLR в режиме SLEEP ;
  • по окончанию задержки таймера WDT при нормальной работе;
  • по окончанию задержки таймера WDT в режиме SLEEP .

Прерывание INT может вывести процессор из режима SLEEP , если перед входом в этот режим бит INTE был установлен в единицу. Состояние бита GIE также определяет: будет ли процессор переходить на подпрограмму прерывания после выхода из режима SLEEP .

Сброс битов – запросов прерываний – должен осуществляться соответствующей программой обработки.

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

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