44950

Однокристальные микроконтроллеры серии PIC

Лекция

Коммуникация, связь, радиоэлектроника и цифровые приборы

Микроконтроллеры семейств PIC (Peripheral Interface Controller) компании Microchip, обладающие особой популярностью, построены на основе передовых технологий микроконтроллеров. Им свойственны следующие особенности: электрически программируемые пользователем ППЗУ, минимальное энергопотребление, высокая производительность, хорошо развитая RISC-архитектура

Русский

2014-10-12

231 KB

85 чел.

  1.  Однокристальные микроконтроллеры серии PIC

Микроконтроллеры семейств PIC (Peripheral Interface Controller) компании Microchip, обладающие особой популярностью, построены на основе передовых технологий микроконтроллеров. Им свойственны  следующие особенности: электрически программируемые пользователем ППЗУ, минимальное энергопотребление, высокая производительность, хорошо развитая RISC-архитектура, функциональная законченность и минимальные размеры.

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

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

В настоящее время компания Microchip выпускает пять основных семейств 8-разрядных RISC-микроконтроллеров, совместимых снизу вверх по программному коду:

  •  PIC12CXXX – семейство микроконтроллеров, выпускаемые в виде миниатюрных изделий, содержащих всего 8-выводов. Они выпускаются как с 12-разрядной (33 команды), так и с 14-разрядной (35 команд) системой команд и содержат встроенный тактовый генератор, таймер/счетчик, сторожевой таймер, схему управления прерываниями. В составе этого семейства имеются микроконтроллеры со встроенным 8-разрядным четырехканальным АЦП;
  •  PIC16C5X – базовое семейство микроконтроллеров с 12-разрядными командами (33 команды), выпускаемые в 18-, 20- и 28-выводных корпусах. Эти микроконтроллеры, обладающие минимальной периферией и способные работать при малом напряжении питания (до 2 В) удобны для применения в переносных конструкциях;
  •  PIC16CXXX – семейство микроконтроллеров среднего уровня с 14-разрядными командами (35 команд). Это многочисленное семейство, объединяет микроконтроллеры с разнообразными периферийными устройствами, в число которых входят аналоговые компараторы, аналогово-цифровые преобразователи, контроллеры последовательных интерфейсов SPI, USART и I2C, таймеры-счетчики, модули захвата/сравнения, широтно-импульсные модуляторы, сторожевые таймеры, супервизорные схемы и так далее;
  •  PIC17CXXX – семейство высокопроизводительных микроконтроллеров с расширенной системой команд 16-разрядного формата (58 команд), работающие на частоте до 33 МГц и с объемом памяти программ до 16 Кслов. Кроме обширной периферии, 16-уровневого аппаратного стека и векторной системы прерываний, почти все микроконтроллеры этого семейства имеют встроенный аппаратный умножитель 8х8, выполняющий операцию умножения за один машинный цикл. Являются одними из самых быстродействующих в классе 8-разрядных микроконтроллеров;
  •  PIC18CXXX – семейство высокопроизводительных микроконтроллеров с расширенной системой команд 16-разрядного формата (75 команд) и встроенным 10-разрядным АЦП, работающие на частоте до 40 МГц. Содержат 31-уровневый аппаратный стек, встроенную память команд до 32 Кслов и способны адресовать до 4 Кбайт памяти данных и до 2 Мбайт внешней памяти программ. Расширенное RISC-ядро микроконтроллеров данного семейства оптимизировано под использование нового Си-компилятора.

Широкая номенклатура микроконтроллеров PIC обеспечивает использование их в устройствах, предназначенных для разнообразных сфер применения.

Микроконтроллеры PIC выпускаются с однократно программируемой памятью программ (OTP, One-Time Programmable), с возможностью внутрисхемного программирования (Flash-память) или масочным ПЗУ. Тип памяти программ определяется буквами в наименовании микросхемы: С – EPROM; CR – ROM; F – FLASH. Наличие в составе микроконтроллеров Flash-памяти программ облегчает создание и отладку прототипов промышленных образцов изделий.

  1.  Микроконтроллеры семейства PIC16F8X
  2.  Основные характеристики

Состав, структуру и возможности аппаратных средств микроконтроллеров будем рассматривать на примере микроконтроллеров среднего семейства (Mid-Range), а для реализаций конкретных программных структур будем применять микроконтроллер PIC16F84A, как наиболее популярный и удобный для первоначального изучения. Этот микроконтроллер, как и все микроконтроллеры среднего семейства, построен по гарвардской архитектуре с RISC-процессором, обладающим следующими основными особенностями:

  •  используются только 35 простых команд;
  •  все команды выполняются за один цикл (4 такта генератора), кроме команд перехода, которые выполняются за 2 цикла;
  •  рабочая частота 0 Гц ... 10 МГц;
  •  раздельные шины данных (8 бит) и команд (14 бит);
  •  1024 х 14 память программ, выполненная на ПЗУ или электрически перепрограммируемой Flash- памяти;
  •  15 восьмиразрядных регистров специальных функций (SFR);
  •  восьмиуровневый аппаратный стек;
  •  прямая, косвенная и относительная адресация данных и команд;
  •  68 восьмиразрядных регистров общего назначения (GPR);
  •  четыре источника прерывания:

внешний вход RB0/INT;

переполнение таймера   TMR0;

изменение сигналов на линиях порта   B;

завершение записи данных в память EEPROM;

  •  64 x 8 электрически перепрограммируемая EEPROM память данных с возможностью выполнения 1000000 циклов стирания/записи и сохранением данных в течение как минимум 40 лет;
  •  сторожевой (Watchdog) таймер   WDT с собственным встроенным генератором, обеспечивающим повышенную надежность;
  •  число выводов корпуса микросхемы 18.

Микроконтроллер PIC16F84A обладает следующими возможностями ввода/вывода:

  •  13 линий ввода-вывода с индивидуальной установкой направления обмена;
  •  высокий втекающий/вытекающий ток, достаточный для управления светодиодами;
  •  8-битный таймер/счетчик TMR0 с 8-битным программируемым предварительным делителем.
  1.  Архитектура микроконтроллера PIC16F84A

Упрощенная структурная схема микроконтроллера PIC16F84A приведена на рисунке 1.1.

Архитектура микроконтроллеров PIC16F84X, как и всех микроконтроллеров среднего семейства, основана на концепции раздельных шин и областей памяти для данных и для команд (гарвардская архитектура). Шина данных и память данных (ОЗУ) – имеют ширину 8 бит, а программная шина и программная память (ПЗУ) имеют ширину 14 бит. Такая концепция обеспечивает простую, но мощную систему команд, разработанную так, что битовые, байтовые и регистровые операции работают с высокой скоростью и с перекрытием по времени выборок команд и циклов выполнения. 14-битовая ширина программной памяти обеспечивает выборку 14-битовой команды в один цикл. Двухступенчатый конвейер обеспечивает одновременную выборку и исполнение команды. Все команды выполняются за один цикл, исключая команды переходов.

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

Рисунок 1.1

Микроконтроллер содержит 8-разрядное АЛУ и рабочий регистр   W. АЛУ является арифметическим модулем общего назначения и выполняет арифметические и логические функции над содержимым рабочего регистра и любого из регистров контроллера. АЛУ может выполнять операции сложения, вычитания, сдвига и логические операции. Если не указано иное, то арифметические операции выполняются в дополнительном двоичном коде.

В зависимости от результата операции, АЛУ может изменять значения бит регистра   STATUS: C (Carry), DC (Digit carry) и Z (Zero).

Цикл выполнения команды состоит из четырех тактов: Q1...Q4. Выборка команды и ее выполнение совмещены по времени таким образом, что выборка команды занимает один цикл, а выполнение – следующий цикл. Эффективное время выполнения команды составляет один цикл. Если команда изменяет счетчик команд (например, команда GOTO), то для ее выполнения потребуется два цикла.

Выборка инструкции из памяти кода начинается с увеличения счетчика команд на 1 и выборки команды по соответствующему смещению, после чего выбранная команда защелкивается в регистре команд. Выборка текущей инструкции происходит параллельно во времени с декодированием и исполнением предыдущей инструкции за счет того, что для этих операций задействованы различные независимые друг от друга аппаратные блоки микроконтроллера. В течение тактов Q2, Q3 и Q4 происходит декодирование и выполнение команды. В такте Q2 считывается память данных (чтение операнда), а запись происходит в такте Q4.

  1.  Организация памяти программ и стека

Счетчик команд в микроконтроллерах PIC имеет ширину 13 бит и способен адресовать 8Кх14бит объема программной памяти. Однако физически на кристаллах микроконтроллера PIC16F84A реализован 1Кх14 памяти и счетчик команд в нем имеет ширину 10 бит.

В памяти программ есть выделенные адреса. Вектор сброса находится по адресу 0000h, вектор прерывания – по адресу 0004h. Обычно по адресу 0004h располагается подпрограмма идентификации и обработки прерываний, а по адресу 0000h – команда перехода на метку, расположенную за подпрограммой обработки прерываний.

  1.  Организация памяти данных

Память данных микроконтроллера разбита на две области (см. Рисунок 1.2). Первые 12 адресов – это область регистров специальных функций (SFR, Special Function Registers), а вторая – область регистров общего назначения (GPR, General Purpose Registers). Некоторые регистры специального назначения продублированы в обоих банках, а некоторые расположены в банке 1 отдельно. Область SFR управляет работой прибора.

Банк 0

Банк 1

00

INDF

80

INDF

01

TMR0

81

OPTION

02

PCL

82

PCL

03

STATUS

83

STATUS

04

FSR

84

FSR

05

PORTA

85

TRISA

06

PORTB

86

TRISB

07

87

08

EEDATA

88

EECON1

09

EEADR

89

EECON2

0A

PCLATCH

8A

PCLATCH

0B

INTCON

8B

INTCON

0C

8C

.

.

.

.

.

.

4F

8F

Рисунок 1.2

Обе области разбиты в свою очередь на банки 0 и 1. Банк 0 выбирается обнулением бита RP0   регистра статуса (STATUS), а установка бита RP0 в единицу осуществляет выбор банка 1. Каждый банк в микроконтроллере PIC16F84A имеет протяженность 80 байт, т.е. память данных существует только до адреса 04Fh.

Регистры с адресами 0Ch-4Fh могут использоваться как регистры общего назначения, которые представляют собой статическое ОЗУ. Адреса регистров общего назначения банка 1 отображаются на банк 0. Следовательно, когда установлен банк 1, то обращение к адресам 8Ch-CFh фактически адресует банк 0.

В регистре статуса помимо бита RP0 есть еще бит RP1, что позволяет обращаться к четырем страницам (банкам) будущих модификаций этого кристалла.

К ячейкам ОЗУ можно адресоваться прямо, используя абсолютный адрес каждого регистра, или косвенно, через регистр указатель FSR. Косвенная адресация использует текущее значение разрядов RP1:RP0 для доступа к банкам. Это относится и к EEPROM памяти данных.

  1.  Регистры специального назначения (SFR)

Названия и адреса этих регистров стандартны (неизменны) и манипулировать ими (назначать свои), в отличие от регистров общего назначения, нельзя. А раз это так, то единственное, что можно с ними сделать, так это только изменить их содержимое, т.е. произвести те или иные манипуляции с их битами (установить те или иные из них их в 0 или 1). В зависимости от этих манипуляций, электронная “начинка” микроконтроллера приобретает свойства, обеспечивающие функционирование программы (а значит и устройства) по замыслу программиста.

Некоторые регистры SFR дублируются (отображаются) в обеих банках (см. рисунок 1.2). Работа с большей частью регистров SFR происходит в нулевом банке. При этом, содержимое регистров SFR нулевого банка дублируется (отображается) в первом банке.

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

С регистрами SFR и с их битами будем разбираться по мере их использования в рассматриваемых далее программах. А пока рассмотрим структуру счетчика команд, обеспечивающего последовательность выполнения команд программы.

  1.  Счетчик команд

Счетчик команд PCL и PCLATH имеет разрядность 13 бит. Младший байт счетчика (PCL) доступен для чтения и записи и находится в регистре   02h. Старший байт счетчика команд не может быть напрямую записан или считан и берется из регистра   PClath (PC latch high), адрес которого 0Ah. Содержимое PCLATH передается в старший байт счетчика команд, когда он загружается новым значением.

В зависимости от того, загружается ли в счетчик команд новое значение во время выполнения команд call, goto, или в младший байт счетчика команд (PCL) производится запись, – старшие биты счетчика команд загружаются из PCLATH разными способами, как показано на рисунке 1.3.

Рисунок 1.3

Команды call и goto оперируют 11-разрядным адресным диапазоном, достаточным для смещения в пределах страницы программной памяти объемом 2К слов. Для МК подгруппы PIC16F8X этого хватает. С целью обеспечения возможности расширения памяти команд для будущих моделей МК предусмотрена загрузка двух старших бит счетчика команд из регистра   PCLATH<4:3>. При использовании команд call и goto пользователь должен убедиться в том, что эти страничные биты запрограммированы для выхода на нужную страницу. При выполнении команды CALL или выполнении прерывания весь 13-битный счетчик команд помещается в стек, поэтому для возвращения из подпрограммы не нужны манипуляции с разрядами PCLATH<4:3>.

Микроконтроллеры подгруппы PIC16F8X игнорируют значения бит PCLATH<4:3>, которые используются для обращения к страницам 1, 2 и 3 программной памяти. Однако применять биты PCLATH<4:3> в качестве ячеек памяти общего назначения не рекомендуется, так как это может повлиять на совместимость с будущими поколениями изделий.

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

Микроконтроллеры подгруппы PIC16F8X имеют восьмиуровневый аппаратный стек шириной 13 бит. Область стека не принадлежит ни к программной области, ни к области данных, а указатель стека пользователю недоступен. Текущее значение счетчика команд посылается в стек, когда выполняется команда CALL или производится обработка прерывания. При выполнении процедуры возврата из подпрограммы (команды RETLW, RETFIE или RETURN) содержимое счетчика команд восстанавливается из стека. Регистр   PCLATH при операциях со стеком не изменяется.

Стек работает как циклический буфер. Следовательно, после того как стек был загружен 8 раз, девятая загрузка перепишет значение первой. Десятая загрузка перепишет вторую и т.д. Если стек был выгружен 9 раз, счетчик команд становится таким же, как после первой выгрузки.

Признаков положения стека в контроллере не предусмотрено, поэтому пользователь должен самостоятельно следить за уровнем вложения подпрограмм.

  1.  Команды микроконтроллеров семейства PIC16F8X

Микроконтроллер PIC16F84A имеет простую и эффективную систему команд, состоящую всего из 35 команд. В таблице 1.1 приведены описания полей команд и применяемые при описании команд обозначения.

Таблица 1.1

Поле

Описание

f 

Адрес регистра

w 

Рабочий регистр

b 

Номер бита в 8-разрядном регистре

k 

Константа

d 

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

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

[ ]

Необязательные параметры

( )

Содержимое

Присвоение

< >

Поле номера бита

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

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

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

Каждая команда МК подгруппы PIC16F8X представляет собой 14-битовое слово, разделенное на код операции (OpCode), и поле для одного и более операндов. Основные форматы команд микроконтроллера изображены на рисунке 1.3.

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

13

8

7

6

0

OpCode

d

f

d = 0 – w;     d = 0 – f;     f – регистр адресі

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

13

10

9

7

6

0

OpCode

b

f

b – бит нөмірі;     f – регистр адресі

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

13

8

7

0

OpCode

k

k константа

Команды CALL и GOTO

13

11

10

0

OpCode

k

k константа

Рисунок 1.3 

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

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

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

Система команд PIC16F8X включает в себя команды работы с байтами, с битами, операции с константами и команды управления (см. таблицу 1.2).

Таблица 1.2

Мнемоника

Описание команды

Циклы

Биты

состояния

Прим.

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.
  4.  Команды работы с байтами

Команды работы с байтами используются в микроконтроллерах 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 следует иметь в виду, она осуществляется вычитание осуществляется путем прибавления дополнительного кода второго операнда. т.е. вместо операции d = f – w в действительности выполняется d = f + (-w). 

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

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

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

Установка и сброс отдельных битов производится командами BSF f, b и BCF f, b. Любой доступный для записи бит в регистровой памяти может быть модифицирован таким способом. При этом гарантируется, что ни один из остальных битов регистра не будет изменен.

Однако при работе с портами ввода/вывода последнее утверждение не всегда справедливо. Связано это с тем, что значение числа, считываемого из регистра порта, зависит от конфигурации его выводов в качестве входов или выходов данных.

В системе команд, рассматриваемого микроконтроллера, отсутствуют команды условного перехода. Вместо них имеются такие, которые позволяют пропустить выполнение следующей команды. В частности, рассмотренные выше команды INCFSZ f, d и DECFSZ f, d удобны для организации циклов в программе.

Для управления процессом выполнения программы используются команды работы с битами BTFSC f, b и BTFSS f, b, позволяющие пропустить выполнение следующей команды программы в зависимости от состояния определенного бита в заданном регистре.

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

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

Команды работы с константами используют при выполнении операции c явно заданными операндами, которые являются частью команды.

Команда MOVLW k используется для записи константы k в рабочий регистр w. Содержимое регистра STATUS при этом не изменяется.

Команда ADDLW k прибавляет непосредственно заданную величину k содержимому регистра w. Эта команда изменяет значения битов нуля, переноса и десятичного переноса таким же образом, как и команда ADDWF f, d.

Команда SUBLW k вычитает содержимое регистра w из заданного значения константы k. В отличие от SUBWF f, d, результат выполнения команды SUBLW k можно представить в следующем виде: w = k + (w ^ 0x0FF) + 1. С помощью этой команды удобно изменять знак содержимого регистра w, используя ее следующим образом: SUBLW 0.

Команды логических операций ANDLW k, IORLW k и XORLW k выполняют побитно соответствующие операции над содержимым регистра w и непосредственно заданной константой k. Эти команды, как и команды работы с байтами, устанавливают только бит нуля в регистре STATUS в соответствии с результатом операции. Полученный результат сохраняется в регистре w.

С помощью команды IORLW 0 удобно определять равенство нулю содержимого регистра w. В зависимости от результата этой операции бит нуля будет установлен в 1 или сброшен в 0.

Команда RETLW k используется для возврата из подпрограммы с установкой начальных условий в регистр w, а также для реализации табличных преобразований, что будет описано ниже. Перед возвращением из подпрограммы эта команда осуществляет загрузку непосредственно заданной величины в рабочий регистр w.

Команды GOTO k, CALL k, RETURN и RETFIE используются для управления программой.

Команды GOTO k и CALL k могут явно задавать адрес перехода в пределах определенной страницы, размер которой зависит от типа микроконтроллера: 256/512 адресов для младших моделей, 2К адресов для микроконтроллеров PIC среднего уровня (включая PIC16F8X) и 8К адресов для старших моделей микроконтроллеров. Если адрес перехода выходит за пределы страницы, то регистр PCLATH должен содержать правильную информацию о новой странице.

Команда CALL k выполняется практически так же, как и GOTO k, за исключением того, что указатель на следующую страницу сохраняется в стеке счетчика команд.

Для PIC МК средней группы существует три различных способа возврата из подпрограммы, определяемые командами RETLW k, RETURN и RETFIE. При каждом из этих способов значение адреса извлекается из вершины стека и загружается в счетчик команд. Эти адреса используются для возврата из подпрограмм или прерываний.

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

Команда RETFIE используется для возврата из прерывания. Она реализуется аналогично команде RETURN за исключением того, что при ее выполнении устанавливается в 1 бит GIE в регистре управления прерываниями INTCON. Это позволяет после выполнения данной команды немедленно перейти к обработке прерываний, ожидающих своей очереди. В противном случае перед окончанием обработки потребовалась бы проверка наличия запросов других прерываний, и, в случае их поступления, переход к их обработке.

Существует всего две команды, служащие для непосредственного управления функционированием микроконтроллера. Первая из них – CLRWDT – используется для сброса   сторожевого таймера. Вторая – SLEEP – обеспечивает сохранение текущего состояния микроконтроллера в режиме ожидания, пока не произойдет какое-либо внешнее событие, которое позволит микроконтроллеру PIC продолжить выполнение программы.

Команда CLRWDT сбрасывает в 0 содержимое сторожевого таймера   WDT и пределителя (если он используется для установки интервала времени срабатывания WDT), запуская сначала отсчет времени сторожевого таймера. Целью введения команды CLRWDT является предотвращение перезапуска микроконтроллера при нормальном выполнении программы.

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

Второй целью использования команды SLEEP является реализация в микроконтроллере режима ожидания какого-либо события. Существует три события, способные вывести микроконтроллер из режима ожидания. Первым из них является подача сигнала запуска на вход сброса микроконтроллера, что приведет к перезапуску процессора и началу выполнения программы с нулевого адреса. Второй способ – поступление сигнала “пробуждения” микроконтроллера от сторожевого таймера. Третьим способом “пробуждения” является прерывание от какого-либо внешнего источника. При любом способе “пробуждения” использование команды SLEEP позволяет избежать необходимости организации циклов ожидания, а также снизить потребляемую системой мощность.

При этом необходимо иметь в виду, что выход микроконтроллера из режима ожидания занимает, по меньшей мере, 1024 такта. Поэтому команду SLEEP нельзя использовать в тех случаях, когда требуется быстрая реакция на внешнее событие.

  1.  Особенности программирования и отладки микроконтроллеров

Анализ архитектуры микроконтроллеров PIC с точки зрения их программирования и отладки систем позволяет сделать следующие выводы:

  •  RISC-система команд обеспечивает высокую скорость выполнения инструкций, но вызывает затруднения и снижение производительности при программировании нетривиальных алгоритмов. Поскольку все инструкции в системе команд являются одноадресными, загрузка константы в любой из регистров требует двух инструкций. Вначале нужно загрузить константу в рабочий регистр w, а затем переслать его содержимое в нужную ячейку памяти данных (movlw k, movwf f);
  •  аналогично, все бинарные арифметико-логические операции приходится выполнять с привлечением рабочего регистра w; 
  •  высокое быстродействие достигается в значительной степени за счет применения конвейера команд. Инструкции ветвления, изменяющие счетчик команд (безусловный переход, вычисляемый переход), не используют инструкцию из очереди, поэтому выполняются за два машинных цикла и снижают темп выполнения программы. Кроме того, сам анализ условий в архитектуре микроконтроллеров PIC требует выполнения “лишних” команд;
  •  наличие одного вектора прерываний, отсутствие развитого механизма обработки запросов по приоритетам и вложенных прерываний затрудняют решение сколько-нибудь сложных задач управления. При приходе запроса от любого из источников выполняется переход на процедуру обработки по единственному вектору. В процедуре приходится по битам признаков определять источник, причем условия ветвления, как указывалось выше, анализируются сложно, и все это увеличивает время реакции. После обработки прерывания нужно самостоятельно очистить бит запроса. Из-за отсутствия вложенных прерываний возможно длительное ожидание обработки запросом от источника с более высоким приоритетом;
  •  аппаратный стек глубиной 8 слов не имеет признака переполнения и ограничивает вложенность процедур. За тем, чтобы он не переполнялся, программист должен следить самостоятельно;
  •  память данных состоит из банков, для определения текущего банка используются биты регистров STATUS (для PIC16) или BSR (для PIC17). На этапе трансляции принадлежность указанного регистра текущему активному банку проверить невозможно, для этого требуется моделирование хода выполнения программы;
  •  память программ разбита на страницы размером 2К слов. Для перехода на нужный адрес по командам CALL и GOTO должны быть правильно установлены биты выбора текущей страницы в регистре PCLATH. На этапе трансляции невозможно проверить корректность передачи управления во время выполнения, для этого также требуется моделирование выполнения программы;
  •  ограниченность ресурсов микроконтроллеров PIC делает проблематичным их программирование на языках высокого уровня.

Указанные особенности архитектуры микроконтроллеров PIC компенсируются чрезвычайно низкой ценой, поэтому такие изделия (особенно семейства PIC16) весьма популярны. В настоящее время их используют даже вместо логических ИС средней степени интеграции. Но реализовать все преимущества этих микроконтроллеров можно только при наличии средств программирования и отладки, адекватных по цене и функциональным возможностям решаемым задачам. Важнейшие требования к инструментальным средствам для микроконтроллеров, ориентированным на выполнение функций ввода-вывода, можно сформулировать следующим образом:

  •  основным назначением этих средств является поддержка программирования на языке ассемблер и перенос программы на плату системы управления;
  •  мощные драйверы портов ввода/вывода, состояние которых однозначно описывается значениями в регистрах управления, упрощают функцию замещения электрофизических параметров прототипной БИС, поэтому такие порты можно имитировать с помощью БИС программируемой логики;
  •  стоимость инструментальных средств должна соответствовать невысокой стоимости одноплатного контроллера.
  1.  

  1.  

  1.  

Разберемся с битами некоторых регистров. Расставим приоритеты: в первую очередь, с целью недопущения “путаницы”, сначала рассмотрим рабочие биты, а о флагах разговор будет отдельно. С этой же целью, на первых порах, не будем вдаваться в некоторые необязательные, для начинающих, детали (о них – позднее).

В регистре STATUS  (см. рисунок 1.3) расположены три рабочих бита (5,6,7), из которых нас, пока, интересует только 5-й бит с названием RP0. Именно этим битом переключаются банки (0 - нулевой банк, 1 - первый банк). На момент старта (начала исполнения) программы, в ПИКе всегда автоматически (по умолчанию) выставляется нулевой банк. Бит RP1 устанавливается равным нулю и для смены банка достаточно изменять только значение бита RP0 (по умолчанию RP0 устанавливается в 0).

Регистр STATUS

7

6

5

4

3

2

1

0

IRP

RP1

RP0

TO’

PD’

Z

DC

C

Рисунок 1.3

Учитывая то, что 7-й бит (IRP) также, по умолчанию, устанавливается в 0, и в PIC16F84A 2-го и 3-го банка просто нет (они есть в более сложных микроконтроллерах), то про биты 6 и 7 можно просто “забыть” (конечно, условно, до поры до времени). Итак: в регистре STATUS, в приложении к PIC16F84A, имеется всего один рабочий бит переключения банков RP0.

Направление работы выводов портов А и В можно устанавливать в любых комбинациях с помощью регистров TRISA и TRISB соответственно. Регистры TRISA и TRISB имеют 5 и 8 рабочих бита соответственно (по количеству выводов портов А и В). Их адреса - 85h и 86h. Если какой-нибудь из битов этих регистров устанавливается в 1, то соответствующий вывод порта работает “на вход”, то есть, принимает данные с выхода внешнего устройства, подключенного к этому выводу. Если бит TRISA/TRISB устанавливается в 0, то соответствующий вывод порта уже сам является источником сигнала для подключенного к этому выводу, входа внешнего устройства, и программа может управлять этим внешним устройством (например, светодиодом или каким-то другим исполнительным устройством).

Так как регистры TRISA и TRISB находятся в 1-м банке, то, при работе с ними, необходимо перейти в 1-й банк, произвести необходимые изменения битов и вернуться в 0-й банк (если далее работа происходит в нулевом банке).

Регистры PORTA и PORTB управляют защелками портов А и В. Защелка это аппаратно реализованное устройство оперативной памяти, а проще говоря, триггер. Биты регистров PORTA и PORTB управляют этими триггерами.

Следует четко уяснить следующее: биты регистров PORTA и PORTB защелками управляют всегда, но не всегда данные с выходов защелок присутствуют на выводах портов. Выходы защелок портов подключаются к выводам портов только при работе этих выводов “на выход”. При работе выводов портов на вход, выходы защелок от соответствующих выводов портов отключаются.

В отличие от выводов порта В, к которым могут быть либо подключены, либо отключены внутренние, подтягивающие резисторы, выводы порта А внутренней “подтяжки” не имеют. Таким образом, если они настроены на работу на вход, то к ним нужно подключать внешние подтягивающие резисторы. Если нужно организовать счет импульсов (задействован TMR0), то роль подтягивающего резистора для вывода RA4/TOCKI может выполнять, например, коллекторная нагрузка внешнего устройства.

  1.  

PAGE   \* MERGEFORMAT1


 

А также другие работы, которые могут Вас заинтересовать

27096. Система управления базами данных (СУБД). Функции и объекты СУБД 78 KB
  Функции и объекты СУБД Система управления базами данных СУБД совокупность программных и лингвистических средств общего или специального назначения обеспечивающих управление созданием и использованием баз данных. Функции СУБД: управление данными во внешней памяти на дисках; управление данными в оперативной памяти с использованием диского кэша; журнализация измененийрезервное копирование и восстановление базыданных после сбоев; поддержка языков БД язык определения данных язык манипулирования данных. Объекты СУБД: К объектам СУБД...
27097. Таблицы реляционной базы данных: структура, требования. Основные типы данных и типы полей 155.5 KB
  Основные типы данных и типы полей Реляционная СУБД Система управления реляционными базами данных СУБД управляющая реляционными базами данных. Реляционная база данных база данных основанная на реляционной модели данных. Использование реляционных баз данных было предложено доктором Коддом из компании IBM в 1970 году.
27099. Задачи и этапы проектирования и создания баз данных. Жизненный цикл базы данных 589.59 KB
  Жизненный цикл базы данных Основные задачи: Обеспечение хранения в БД всей необходимой информации. Обеспечение возможности получения данных по всем необходимым запросам. Сокращение избыточности и дублирования данных.
27100. Запросы к базе данных. Виды запросов. Язык SQL. Запросы по образцу (QBE) 37 KB
  Запросы по образцу QBE Запрос query – это средство выбора необходимой информации из базы данных. Вопрос сформированный по отношению к базе данных и есть запрос.QBE запрос по образцу – средство для отыскания необходимой информации в базе данных.
27101. Нормализация данных в базе данных. Виды аномалий 40 KB
  Виды аномалий Нормализация таблиц базы данных это процесс организации данных в базе данных включающий создание таблиц и установление отношений между ними в соответствии с правилами которые обеспечивают защиту данных и делают базу данных более гибкой устраняя избыточность и несогласованные зависимости. Главная цель нормализации базы данных устранение избыточности и дублирования информации. В идеале при нормализации надо добиться чтобы любое значение хранилось в базе в одном экземпляре причем значение это не должно быть получено...
27102. Периферийные устройства персонального компьютера 33 KB
  Принтер print печатать – устройство для вывода на печать текстовой и графической информации. Плоттер графопостроитель – устройство для вывода на бумагу больших рисунков чертежей и другой графической информации. Манипулятор мышь mouse – устройство облегчающее ввод информации в компьютер. Дисковод CDROM – устройство для чтения информации записанной на лазерных компактдисках CD ROM – Compact Disk Read Only Memory что в переводе означает компактдиск с памятью только для чтения.
27103. Характеристика стека TCP/IP 18.93 KB
  Стек TCP IP получил своё название от основных протоколов TCP Transmission Control Protocol и IP Internet Protocol разработанных в 70е г.Kahn в работе €œA protocol for packet network interconnection€ IEEE Transaction on Communications Vol. HTTP Hyper Text Transfer Protocol – протокол передачи гипертекстовых документов используется для реализации приложений WWW Word Wide Web всемирной паутины. FTP File Transfer Protocol – протокол передачи и приёма файлов.
27104. Организация и протоколы электронной почты. E-mail 644.2 KB
  Технологии ISDN ATM Ethernet. Модель стека TCP IP Уровни OSI Протоколы стека TCP IP Уровни стека TCP IP Прикладной Application HTTP FTP Telnet Прикладной Application Представительный Presentation Сеансовый Session Транспортный Transport TCP UDP Транспортный Transport Сетевой Network IP ARP ICMP RIP OSPF Сетевой Network Канальный Data Link ТехнологииСетевые интерфейсыEthernet ATM Физический Physical Физический Physical Приведём краткую характеристику основных протоколов стека. Технология чаще всего...