Специальные особенности микроконтроллеров

Специальные особенности – уникальные особенности микроконтроллера, обеспечивающие одно или более из следующих свойств проектируемого изделия:

а) уменьшить стоимость устройства;

б) увеличить надежность системы;

в) предоставить дополнительные возможности разработчикам при проектировании устройства.

К специальным особенностям относятся:

1) биты конфигурации;

2) интегрированная схема сброса по включению питания (POR);

3) схема сброса по снижению напряжения питания (BOR);

4) сторожевой таймер;

5) режим энергосбережения (SLEEP);

6) интегрированный тактовый RC генератор;

7) внутрисхемное программирование.

Рассмотрим назначение блоков структуры МК, приведенной на рис. 10.1.

Ядро микроконтроллера

Тактовый генератор предназначен для формирования тактового сигнала МК. Тактовый сигнал необходим для выполнения инструкций микроконтроллера и работы периферийных модулей. Внутренний машинный цикл микроконтроллера (tcy) состоит из четырех периодов тактового сигнала. В любом МК семейства PICmicro предусмотрена возможность использования как внутренней, так и внешней времязадающей цепи тактового генератора. Схемы подключения внешней и особенности настройки внутренней времязадающей цепей тактового генератора приводятся в техническом описании каждого конкретного МК.

Схема сброса предназначена для перевода микроконтроллера в исходное состояние с заведомо известными параметрами работы. Источник сброса микроконтроллера может быть идентифицирован с помощью битов состояния. Микроконтроллеры PICmicro имеют следующие виды сброса:

1) сброс по включению питания (POR);

2) сброс по сигналу -MCLR в нормальном режиме работы;

3) сброс по сигналу -MCLR в режиме SLEEP;

4) сброс по переполнению WDT в нормальном режиме;

5) сброс по снижению напряжения питания (BOR);

6) сброс по ошибке паритета (PER).

Большинство регистров не изменяются после любого вида сброса, но после сброса по включению питания POR они содержат неизвестное значение. Некоторые регистры сбрасываются в начальное состояние при сбросах POR, BOR, -MCLR и WDT в нормальном режиме, -MCLR в режиме SLEEP, PER.

Центральное процессорное устройство (ЦПУ) предназначено для детектирования команд, расположенных в памяти программ, и управления работой микроконтроллера. Большинство команд микроконтроллера обращаются к ячейкам памяти данных. В состав ЦПУ входит блок регистров:

W– регистр-аккумулятор, используемый при выполнении большинства операций с данными МК;

STATUS – содержит флаги состояния АЛУ, флаги причины сброса микроконтроллера и биты управления банками памяти данных;

OPTION_REG – содержит биты управления предварительным делителем TMR0/WDT, активным фронтом внешнего прерывания RB0/INT, подтягивающими резисторами на входах PORTB;

PCON – содержит до четырех дополнительных битов регистра STATUS (с их помощью можно определить источник сброса).

Арифметико-логическое устройство (АЛУ) требуется для работы с памятью данных. АЛУ выполняет арифметические, логические операции и управляет флагами состояния, расположенными в регистре STATUS. Выполнение ряда команд приводит к изменению битов состояния в зависимости от полученного результата.

Направление потока данных АЛУ выбирается с помощью мультиплексора MUX, определяющего, будет ли АЛУ работать с данными, поступающими с шины данных МК, или с командами, поступающими от регистра инструкций.

Организация памяти. МК содержит два независимых блока памяти: память программ и память данных. Каждый блок имеет собственную шину данных и адреса. Отдельным блоком памяти, предназначенным для временного хранения служебных данных, служит 8-уровневый стек. Многие МК содержат также энергонезависимую память данных (EEPROM).

Память программ – это ПЗУ (или ППЗУ), в котором расположены коды команд программы пользователя или какие-либо константы. Для адресации ячеек памяти программ используется счетчик команд. Микроконтроллеры семейства PICmicro имеют счетчик команд (РС) с различной разрядностью, определяемой максимальным объемом памяти программ семейства. Так, микроконтроллеры среднего семейства имеют 13-разрядный счетчик команд, способный адресовать 8Кх14 слов памяти программ, и 14-разрядную шину данных памяти программ.

Память программ разделена на 4 страницы по 2К слов каждая (0000h-07FFh, 0800h-0FFFh, 1000h-17FFh, 1800h-1FFFh). У различных типов МК аппаратно реализована только определенная часть всей доступной памяти программ. В памяти программ может размещаться калибровочная информация.

Для перехода между страницами памяти программ следует изменить старшие биты регистра счетчика команд PC записью в регистр PCLATH (старший байт счетчика команд). Изменив значение регистра PCLATH и выполнив команду ветвления, PC пересечет границу страницы памяти программ без вмешательства пользователя.

Для микроконтроллеров, имеющих память программ меньше 3 Кслов, обращение к памяти программ выше фактически реализованного значения приведет к циклической адресации. Например, в микроконтроллере с памятью программ
4 Кслов при попытке перехода по адресу 17FFh будет выполнен переход по адресу 07FFh.

В микроконтроллерах с памятью программ 2 Кслов управление страницами памяти не требуется.

Аппаратный стек поддерживает до 8 уровней вложенности подпрограмм пользователя, включая обработку прерываний. В стеке сохраняется адрес возврата в основную программу.

В микроконтроллерах среднего семейства PICmicro реализован 8-уровневый 13-разрядный аппаратный стек. Стек не имеет отображения на память программ и память данных, нельзя записать или прочитать данные из стека. Значение счетчика команд заносится в вершину стека при выполнении инструкций перехода на подпрограмму (CALL) или обработку прерываний. Чтение из стека и запись в счетчик команд PC происходят автоматически при выполнении инструкций возврата из подпрограммы или обработки прерываний.

Память данных состоит из регистров общего (GPR) и специального (SFR) назначения. Регистры общего назначения (GPR) для хранения данных программы размещаются в различных банках памяти данных. Управление банками памяти выполняется битами 5-7 в регистре STATUS. Регистры специального назначения (SFR) управляют периферийными модулями и функциями МК.

Память данных допускает прямую и косвенную адресацию. При прямой адресации для указания банка памяти данных необходимо использовать биты PR1:PR0 регистра STATUS. При косвенной адресации адрес регистра сохраняется в специальном регистре FSR, а в бите IRP регистра STATUS указывается, к какой паре банков памяти данных выполняется обращение (Банк 0/Банк 1 или Банк 2/Банк 3).

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

1. EECON1 (содержит биты управления чтением/записью EEPROM памяти данных).

2. EECON2 (нефизический регистр, предназначенный для защиты от случайной записи в EEPROM память данных).

3. EEDATA (для хранения 8-разрядных данных /чтения).

4. EEADR (содержит адрес ячейки EEPROM памяти данных).

Прерывания. Микроконтроллеры PICmicro среднего семейства могут иметь несколько источников прерываний. Для каждого периферийного модуля назначен отдельный источник прерываний, хотя некоторые периферийные модули содержат несколько источников прерываний (например, модуль USART).

Ниже приводятся возможные источники прерываний в микроконтроллерах PICmicro среднего семейства.

1. Внешний источник прерываний INT.

2. Переполнение таймера TMR0.

3. Изменение уровня сигнала на входах PORTB (выводы RB7:RB4).

4. Изменение выходного уровня компаратора.

5. Прерывание от ведомого параллельного порта.

6. Прерывания от USART.

7. Прерывание от приемника.

8. Прерывание от передатчика.

9. Завершение преобразования АЦП.

10. Прерывания от LCD.

11. Завершение цикла записи в EEPROM память данных.

12. Переполнение таймера TMR1.

13. Переполнение таймера TMR2.

14. Прерывания от модуля ССР.

15. Прерывания от модуля SSP.

В микроконтроллерах среднего семейства присутствует как минимум один регистр, управляющий прерываниями. Это регистр INTCON.

Если в микроконтроллере есть дополнительные периферийные модули, то будут реализованы регистры для управления прерываниями от них (регистр маски, чтобы разрешить/запретить прерывания; регистр флагов прерываний, указывающий на возникшее прерывание). В зависимости от типа микроконтроллера в нем могут быть реализованы регистры PIE1, PIR1, PIE2, PIR2.

Если новые микроконтроллеры будут содержать больше источников прерываний, то будут реализованы регистры PIR3 и PIE3.

Порты ввода-вывода

Универсальные порты ввода/вывода могут рассматриваться как самые простые периферийные модули. Они позволяют микроконтроллерам PICmicro контролировать работу и управлять другими устройствами. С целью расширения функциональных возможностей некоторые каналы портов ввода/вывода мультиплицированы с другими периферийными модулями.

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

Для большинства каналов портов ввода/вывода регистры TRIS управляют направлением данных на выводе. Бит TRIS<x> управляет направлением данных на канале PORT<x>. Если бит TRIS установлен в "1", то соответствующий канал порта ввода/вывода работает как вход, а если бит TRIS сброшен в "0", то канал ввода/вывода работает как выход.

Регистр PORT – защелка данных, выводимых на порт ввода/вывода. При чтении регистра PORT возвращается состояние выводов порта. Это значит, что необходима некоторая осторожность при выполнении команд со структурой "чтение-модификация-запись" для изменения логического уровня на выходах порта.

Обратите внимание на операции "чтение-модификация-запись" (например, BSF и BCF). Сначала происходит чтение состояния выводов порта и изменение полученного значения, а затем выполняется запись в выходную защелку порта.

Когда периферийный модуль подключен к выводу порта, функциональные возможности канала порта ввода/вывода могут измениться в соответствии с требованиями периферийного модуля. Например, модули АЦП или LCD настраивают соответствующие каналы портов ввода/вывода для работы с периферийным модулем при сбросе микроконтроллера.

При включении некоторых периферийных модулей отменяется действие битов TRIS. Поэтому следует избегать команд "чтение-модификация-запись" с регистрами TRIS (например, BSF, BCF, XORWF и т.д.). Обратитесь к описанию соответствующего периферийного модуля для правильной настройки битов TRIS.

В табл. 10.1 приведено краткое описание функций, которые могут быть мультиплицированы к каналам портов ввода/вывода.

Таблица 10.1

Имя вывода Тип вывода Тип буфера Описание
AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7 AN8 AN9 AN10 AN11 AN12 AN13 AN14 AN15 I I I I I I I I I I I I I I I I Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговый Аналоговые входы
avdd Р Р Аналоговое питание
avss Р Р Аналоговый общий
С1 С2 I I Аналоговый Аналоговый Напряжение LCD Напряжение LCD
ССР1   ССР2 I/O   I/O ST   ST Вывод Захват/Сравнение/ШИМ модуля ССР1 Вывод Захват/Сравнение/ШИМ модуля ССР2
CDAC О Аналоговый Токовый вывод АЦП. Обычно используется для подключения внешнего конденсатора, чтобы формировать линейное уменьшение напряжения
СК I/O ST Тактовый сигнал USART в синхронном режиме. Всегда связан с функциями вывода ТХ (см. ТХ, RX, DT)
CLKIN     CLKOUT I     О ST/CMOS Вход внешнего тактового сигнала. Всегда связан с функциями вывода OSC1 (см. OSC1/CLKIN, OSC2/CLKOUT). Вывод тактового генератора. Подключается кварцевый/керамический резонатор в HS,XT, LP режиме генератора. В RC режиме генератора на выводе OSC2 присутствует сигнал CLKOUT с 1/4 частоты OSC1, равной циклам выполнения команд. Всегда связан с функциями вывода OSC2

Продолжение табл. 10.1

СМРА СМРВ O O – – Выход компаратора А Выход компаратора В
СОМ0 СОМ1 COM2 COM3 L L L L – – – ­– Общий драйвер 0 LCD Общий драйвер 1 LCD Общий драйвер 2 LCD Общий драйвер 3 LCD
-CS I TTL Вход выбора микросхемы ведомого параллельного порта
DT I/O ST Сигнал данных USART в синхронном режиме. Всегда связан с функциями вывода RX
GP0     GP1     GP2 GP3 GP4 GP5 I/O     I/O     I/O I I/O I/O TTL/ST     TTL/ST     ST TTL TTL TTL TTL буфер в режиме порта ввода/вывода. Буфер с триггером Шмидта в режиме последовательного программирования. TTL буфер в режиме порта ввода/вывода. Буфер с триггером Шмитта в режиме последовательного программирования.   GP – двунаправленный порт ввода / вывода. На некоторых входах порта могут быть программно включены внутрен­ние подтягивающие резисторы
INT I ST Вход внешних прерываний
-mclr/ vpp I/P ST Вход сброса микроконтроллера (активный низкий логический уровень) или вход напряжения программирования
NC Эти выводы должны быть оставлены неподключенными
OSC1 I ST/CMOS Вход тактового генератора или вход внешнего тактового сигнала Входной буфер с триггером Шмидта в RC режиме генератора. КМОП буфер в остальных режимах
OSC2 О Вывод тактового генератора. Подключается кварцевый/керамический резонатор в HS.XT, LP режиме генератора. В RC режиме генератора на выводе OSC2 присутствует сигнал CLKOUT с 1/4 частоты OSC1, равной циклам выполнения команд
PBTN I ST Вход с внутренним подтягивающим резистором. Может использоваться для генерации прерываний

Продолжение табл. 10.1

PSP0 PSP1 PSP2 PSP3 PSP4 PSP5 PSP6 PSP7 I/O I/O I/O I/O I/O I/O I/O I/O TTL TTL TTL TTL TTL TTL TTL TTL Ведомый параллельный порт для связи с микропроцессором. Выводы имеют входной буфер TTL, когда модуль PSP включен
RA0 RA1 RA2 RA3 RA4 RA5 I/O I/O I/O I/O I/O I/O TTL TTL TTL TTL ST TTL PORTA – двунаправленный порт ввода / вывода     RA4 имеет выход с открытым стоком
RB0 RB1 RB2   RB3 RB4   RB5   RB6     RB7 I/O I/O I/O   I/O I/O   I/O   I/O     I/O TTL TTL TTL   TTL TTL   TTL   TTL/ST     TTL/ST PORTB – двунаправленный порт ввода / вывода. На входах порта могут быть программно включены внутренние подтягивающие резисторы   Прерывание по изменению уровня сигнала на входе Прерывание по изменению уровня сигнала на входе Прерывание по изменению уровня сигнала на входе. Тактовый вход в режиме программирования. Буфер ТТЛ в нормальном режиме. Буфер с триггером Шмитта в режиме программирования Прерывание по изменению уровня сигнала на входе. Вывод данных в режиме программирования. Буфер ТТЛ в нормальном режиме. Буфер с триггером Шмитта в режиме программирования
RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 I/O I/O I/O I/O I/O I/O I/O I/O ST ST ST ST ST ST ST ST PORTC – двунаправленный порт ввода / вывода
-RD I TTL Управление чтением ведомого параллельного порта

Продолжение табл. 10.1

RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 I/O I/O I/O I/O I/O I/O I/O I/O ST ST ST ST ST ST ST ST PORTD – двунаправленный порт ввода/вывода
RE0 RE1 RE2 RE3 RE4 RE5 RE6 RE7 I/O I/O I/O I/O I/O I/O I/O I/O ST ST ST ST ST ST ST ST PORTE – двунаправленный порт ввода/вывода
REFA   REFB O   O CMOS   CMOS Выход А программируемого источника опорного напряжения Выход В программируемого источника опорного напряжения
RF0 RF1 RF2 RF3 RF4 RF5 RF6 RF7 I/O I/O I/O I/O I/O I/O I/O I/O ST ST ST ST ST ST ST ST PORTF – цифровые входы или порт драйвера сегментов LCD
RG0 RG1 RG2 RG3 RG4 RG5 RG6 RG7 I/O I/O I/O I/O I/O I/O I/O I/O ST ST ST ST ST ST ST ST PORTG – цифровые входы или порт драйвера сегментов LCD
RX I ST Вывод приемника в асинхронном режиме USART
SCL SCLA SCLB SDA SDAA SDAB I/O I/O I/O I/O I/O I/O ST ST ST ST ST ST Вывод тактового сигнала в режиме I2С Вывод тактового сигнала интерфейса I2С Вывод тактового сигнала интерфейса I2С Вывод данных в режиме I2С Вывод данных интерфейса I2С Вывод данных интерфейса I2С

Окончание табл. 10.1

SCK SDI SDO -SS I/O I O I ST Вход/выход тактового сигнала в режиме SPI Вывод приемника SPI Вывод передатчика SPI Вход выбора ведомого SPI
SEG00:SEG31 I/L ST Драйверы сегментов LCD от 00 до 31
SUM O AN AN1 подтверждение перехода. Можно подключить конденсатор
T0CKI I ST Вход внешнего тактового сигнала для TMR0
T1CKI T1OSO T1OSI I O I ST CMOS CMOS Вход внешнего тактового сигнала для TMR1 Выход генератора TMR1 Вход генератора TMR1
ТХ O Выход передатчика USART в асинхронном режиме (см. RX)
VLCD1 VLCD2 VLCD3 Р Р Р – – – Напряжение LCD Напряжение LCD Напряжение LCD
VLCDADJ I Аналоговый Напряжение LCD
Vref I Аналоговый Вход верхнего опорного напряжения. Вывод входа опорного напряжения присутствует на микроконтроллерах с компараторами
Vref + I Аналоговый Вход верхнего опорного напряжения Обычно мультиплицируется на аналоговый вход
Vref - I Аналоговый Вход нижнего опорного напряжения Обычно мультиплицируется на аналоговый вход
VREG О Вывод управления внешним компонентом N-FET для регулировки напряжения
Vss Р Общий вывод для внутренней логики и портов ввода/вывода
VDD Р Положительное напряжение питания для внутренней логики и портов ввода/вывода
-WR     Управление записью в ведомый параллельный порт (см. -RD, -CS)

Обозначения: TTL – входной буфер ТТЛ; CMOS – КМОП совместимый вход или выход; I – вход; L – драйвер LCD; ST – входной буфер с триггером Шмита; О – выход; Р – питание.

Возможна ситуация, когда на один вывод мультиплицируется несколько функций. При использовании вывода периферийным модулем действие битов регистра TRIS может быть заблокировано (например, для АЦП или LCD модуля).

Периферийные модули

PSP – ведомый параллельный порт. С помощью 8-разрядного ведомого параллельного порта можно организовать интерфейс связи с другим микроконтроллером или персональным компьютером. В микроконтроллерах, выпускаемых в настоящее время, ведомый параллельный порт мультиплицирован только с PORTD, PORTE.

В режиме ведомого порта данные асинхронно читаются или записываются внешними сигналами -RD или -WR соответственно. Установка бита PSPMODE в "1" принудительно настраивает выводы -RD, -WR и -CS как входы.

TMR0 – TMR2 – таймеры-счетчики, которые в зависимости от конкретной модификации МК могут служить счетчиками (внешних тактовых импульсов или импульсов тактового генератора МК) или программируемыми делителями частоты. Обычно таймеры TMR0, TMR2 – 8-разрядные, таймер TMR1 – 16-разрядный.

Модули ССР используются для реализации функций работы с ШИМ сигналами. Обычно МК содержит 2 модуля ССР. Каждый модуль ССР содержит 16-разрядный регистр, который может использоваться в качестве: 16-разрядного регистра захвата данных; 16-разрядного регистра сравнения; двух 8-разрядных (ведущий и ведомый) регистров ШИМ.

Модули управляются регистрами CCPxCON.

Модуль SSP –модуль синхронного последовательного порта (SSP) может использоваться для связи с периферийными устройствами, например с другими микроконтроллерами. Периферийными устройствами могут быть: EEPROM память, сдвиговые регистры, драйверы ЖКИ, АЦП и др. Модуль SSP может работать в одном из двух режимов.

1. Последовательный периферийный интерфейс (SPI);

2. Inter-Integrated Circuit (I2C):

– ведомый режим;

– контроль состояния портов ввода/ввода для обнаружения битов START, STOP с целью упрощения программного обеспечения в режиме ведущего и при конкуренции на шине.

Модуль управляется регистрами SSPSTAT и SSPCON. Прием и передача данных SSP осуществляются с помощью приемного/передающего регистра сдвига (SSPSR) и буферного регистра (SSBUF). В регистре SSPSR выполняется сдвиг данных из микроконтроллера или в микроконтроллер старшим битом вперед. В регистре SSPBUF сохраняются записанные данные, пока не будут получены новые. Восемь бит данных, принятые в регистр SSPSR, переписываются в SSPBUF, устанавливается в "1" флаг полного приемного буфера BF (SSPSTAT<0>) и флаг прерывания SSPIF.

Модуль USART– это один из модулей последовательного порта ввода/вывода (имеет существенные отличия от модуля SSP), который может работать в полнодуплексном асинхронном режиме для связи с терминалами, персональными компьютерами или в синхронном полудуплексном режиме для связи с микросхемами ЦАП, АЦП, последовательными EEPROM и т.д.

USART может работать в одном из трех режимов:

– асинхронный, полный дуплекс;

– ведущий синхронный, полудуплекс;

– ведомый синхронный, полудуплекс.

Для управления модулем используются 2 регистра – регистр управления и статуса приемника RCSTA, а также регистр управления и статуса передатчика TXSTA.

Для задания скорости обмена данными применяется специальный генератор BRG. Период выходного сигнала BRG задается с помощью регистра SPBRG.

Источник опорного напряжения,как правило, используется совместно с модулем компараторов. Входной ток выводов компаратора очень мал, поэтому ИОН имеет малую нагрузочную способность. Модуль содержит 16 последовательно включенных резисторов, обеспечивающих выбор нужного напряжения. Резисторы разделены на сегменты для организации двух диапазонов напряжений VREF.

В регистре VRCON находятся биты управления источником опорного напряжения.

Модуль компараторовсодержит два аналоговых компаратора, выводы которых мультиплицированы с каналами ввода/вывода. Выход интегрированного источника опорного напряжения может быть подключен на вход компараторов.

В регистре CMCON находятся биты управления модулем компараторов.

Модуль 10-разрядного АЦПимеет до восьми входных каналов. Входной аналоговый сигнал через коммутатор каналов заряжает внутренний конденсатор АЦП CHOLD. Модуль АЦП преобразует напряжение, удерживаемое на конденсаторе CHOLD, в соответствующий 10-разрядный цифровой код методом последовательного приближения. Источник верхнего и нижнего опорного напряжения может быть программно выбран с выводов VDD, VSS, AN3/VREF+ или AN2/VREF-.

Допускается работа модуля АЦП в SLEEP режиме микроконтроллера, при этом в качестве источника тактовых импульсов для АЦП должен быть выбран RC-генератор. Для управления АЦП в микроконтроллере используются 4 регистра:

1) регистр результата ADRESH (старший байт);

2) регистр результата ADRESL (младший байт);

3) регистр управления ADCON0;

4) регистр управления ADCON1.

Модуль LCD (реализован только в микроконтроллерах PIC16C92x (923, 924, 925, 926)) формирует все необходимые сигналы синхронизации для управления статическими или мультиплицированными ЖКИ с поддержкой до тридцати двух сегментов, четырех общих выводов и управления пикселями ЖКИ (вывод информации на ЖКИ).

Для управления модулем LCD используются три регистра (LCDCON, LCDSE и LCDPS), с помощью которых можно настроить параметры работы модуля, и до 16 регистров данных (LCD00 – LCD15), в которых сохраняется массив данных пикселей. В нормальном режиме работы состояние регистров управления должно соответствовать применяемому ЖКИ.

Подробное описание всех МК PICmicro приводится на сайте www.microchip.com. МК среднего семейства описаны также в [12].

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

Полный список команд смотрите в табл. 10.2.

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

1. Байт ориентированные команды.

2. Бит ориентированные команды.

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

Для байт ориентированных команд "f" – указатель регистра, а "d" – указатель адресата результата. Указатель регистра определяет, какой регистр должен использоваться в команде. Указатель адресата определяет, где сохраняется результат.

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

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

В командах управления или операциях с константами "к" представляет восемь или одиннадцать бит константы или значения литералов.

Все команды выполняются за один машинный цикл, кроме команд условия, в которых получен истинный результат, и инструкций, изменяющих значение счетчика команд PC (такие команды выполняются за два машинных цикла).

В случае выполнения команды за два машинных цикла во втором цикле выполняется инструкция NOP.

Таблица 10.2

Мнемоника команды   Описание     Циклов 14-разрядный код Флаги Примечание
Бит 13 Бит 0
Байт ориентированные команды
ADDWF f, d Сложение W и f 00 0111 dfff ffff C,DC,Z 1,2
ANDWF f, d Побитное "И" W и f 00 0101 dfff ffff   1,2
CLRF f Очистить f 00 0001 1fff ffff Z
CLRW Очистить W 00 0001 0xxxx Z  
COMF f, d Инвертировать f 00 1001 dfff ffff Z 1,2
DECF f, d Вычесть 1 из f 00 0011 dfff ffff Z 1,2
DECFSZ f, d Вычесть 1 из f и пропустить, если 0 1(2) 00 1011 dfff ffff   1,2,3

Продолжение табл. 10.2

INCF f, d Прибавить 1 к f 00 1010 dfff ffff Z 1,2
INCFSZ f, d Прибавить 1 к f и пропустить, если 0 1(2) 00 1111 dfff fff   1,2,3
IORWF f, d Побитное "ИЛИ" W и f 00 0100 dfff ffff Z 1,2
MOVF f, d Переслать f 00 1000 dfff ffff Z 1,2
MOVWF f Переслать W в f 00 0000 1fff ffff    
NOP Нет операции 00 0000 0xx0    
RLF f, d Циклический сдвиг f влево через перенос 00 1101 dfff ffff C 1,2
RRF f, d Циклический сдвиг f вправо через перенос 00 1100 dfff ffff C 1,2
SUBWF f, d Вычесть W из f 00 0010 dfff ffff C,DC,Z 1,2
SWAPF f, d Поменять местами полубайты в регистре f 00 1110 dfff ffff   1,2
XORWF f, d Побитное "Исключающее ИЛИ" W и f 00 0110 dfff ffff Z 1,2
Бит ориентированные команды
BCF f, b Очистить бит b в регистре f 01 00bb bfff ffff   1,2
BSF f, b Установить бит b в регистре f 01 01bb bfff ffff   1,2
BTFSC f, b Проверить бит b в регистре f, пропустить, если 0 1(2) 01 10bb bfff ffff  
BTFSS f, b Проверить бит b в регистре f, пропустить, если 1 1(2) 01 11bb bfff ffff  
Команды управления и операций с константами
ADDLW k Сложить константу с W 11 111x kkk kkkk C,DC,Z  
ANDLW k Побитное "И" константы и W 11 1001 kkkk kkkk Z  
CALL k Вызов подпрограммы 10 0kkk kkkk kkkk    
CLRWDT Очистить WDT 00 0000 0110 0100 -T0,-PD  

Окончание табл. 10.2

GOTO k Безусловный переход 10 Ikkk kkkk kkkk    
IORLW k Побитное "ИЛИ" константы и W 11 1000 kkkk kkkk Z  
MOVLW k Переслать константу в W 11 00xx kkkk kkkk    
RETFIE Возврат из подпрограммы с разрешением прерываний 00 0000 0000 1001    
RETLW k Возврат из подпрограммы с загрузкой константы в W 11 0lxx kkkk kkkk    
RETURN Возврат из подпрограммы 00 0000 0000 1000    
SLEEP Перейти в режим SLEEP 00 0000 0110 0011 -T0, -PD  
SUBLW k Вычесть W из константы 11 110x kkkk kkkk C, DC,Z  
XORLW k Побитное "Исключающее ИЛИ" константы и W 11 1010 kkkk kkkk Z  

Примечание.

1. При выполнении операции "чтение-модификация-запись" с портом ввода/вывода (например, MOVF PORTB.1) исходные значения считываются с выводов порта, а не из выходных защелок. Например, если в выходной защелке была записана "1", а на соответствующем выходе "0", то обратно будет записан "0".

2. При выполнении записи в TMR0 (и d=1) предделитель TMR0 сбрасывается, если он подключен к модулю TMR0.

Примеры применения микроконтроллеров PICmicro

10.2.1. Устройство управления четырьмя светодиодами

На рис. 10.2 приведена схема устройства для управления четырьмя светодиодами.

Специальные особенности микроконтроллеров - student2.ru

Рис. 10.2. Принципиальная схема устройства управления светодиодами

Ниже приводится текст программы "бегущий огонь" для данной схемы.

; WALKLEDS.ASM  
  LIST P=16C84    
;        
PORTB EQU    
TRISB EQU 86h    
OPTREG EQU 81h    
STATUS EQU    
CARRY EQU    
RP0 EQU    
MSB EQU ; номер бита для крайнего слева  
светодиода  
      ;  
  CLRF PORTB ; погасить все светодиоды  
  BSF STATUS, RP0 ; выбрать регистровый банк 1  
  CLRF TRISB^80h ; установить все разряды PORTB  
на вывод информации  
  MOVWF 0Ah  
  MOVLW OPTREG^80h ; настроить предварительный
делитель в WDT на (1:4)
  BCF STATUS, RP0 ; выбрать регистровый банк 0
  INCF PORTB, F ; включить крайний справа
светодиод
  BCF STATUS, CARRY ; очистить флаг CARRY
LEFT SLEEP   ; подождать тайм-аута WDT
  RLF PORTB, F ; сдвинуть содержимое индикатора
влево
  BTFSS PORTB, MSB ; достигли крайней левой позиции?
  GOTO LEFT ; если нет – цикл
RIGHT SLEEP   ; подождать тайм-аута WDT
  RRF PORTB, F ; сдвинуть содержимое индикатора
вправо
  BTFSS PORTB, 0 ; достигли крайней левой позиции?
  GOTO RIGHT ; если нет – цикл
  GOTO LEFT ; начать новый цикл
  END    
           

Программа "бегущий огонь" предназначена для использования четырех светодиодов, но можно изменять значение MSB для использования большего количества светодиодов: для количества светодиодов 5, 6, 7 и 8 значения MSB должны быть 4, 5, 6 и 7 соответственно.

10.2.2. Управление ЖКИ с помощью последовательного адаптера

Несмотря на широкое применение символьных жидкокристаллических дисплеев (ЖКД), использование ЖКИ по-прежнему остается одним из распространенных способов реализации цифровых отсчетных устройств в измерительной аппаратуре с малым энергопотреблением. Это обусловлено прежде всего тем, что ЖКИ, в отличие от ЖКД, имеют более широкий диапазон рабочих температур и напряжений, а также широкий диапазон габаритов символов.

Управление ЖКИ с помощью микроконтроллеров PIC16C92x, имеющих LCD модуль, не всегда представляется целесообразным.

Для управления ЖКИ можно использовать как последовательные, так и параллельные адаптеры. Управление параллельным адаптером реализуется очень просто, применением команды MOVWF PORTx для записи подготовленных данных в регистр адаптера. Однако использование параллельных адаптеров не всегда является оптимальным (например, если все порты ввода/вывода используются по нескольким назначениям и (или) количество этих портов небольшое).

Применение последовательного адаптера требует наличия у микроконтроллера всего трех свободных (или относительно свободных) линий ввода/вывода.

Фирма Microchip Technology Incorporated производит очень удобный и недорогой последовательный адаптер символьного 32-сегментного ЖКИ AY0438.

На рис. 10.3 приводится функциональная схема управления ЖКИ через адаптер AY0438 микроконтроллерами среднего семейства.

Ниже приводится текст программы, написанной для MPASM, реализующей управление ЖКИ.

; AY0438.ASM

LIST p=16C71, f=inhx8m

;******************************************************************

; Соединение выводов PORTB с адаптером AY0438:

; PORTB.0 ® CLK (тактовый сигнал для сдвига данных в регистре AY0438)

; PORTB.1 ® DATA IN (входные данные для регистра сдвига AY0438)

; PORTB.2 ® LOAD (сигнал окончания загрузки данных в регистр сдвига AY0438)

;

; ЖКИ соединяется с AY0438 следующим образом:

; Старший разряд ® сегменты с 1-го по 7-й

; Третий разряд ® сегменты с 9-го по 15-й

; Второй разряд ® сегменты с 17-го по 23-й

; Младший разряд ® сегменты с 25-го по 31-й

; Выводы децимальных точек индикатора не присоединены, но мог<

Наши рекомендации