Вы находитесь на странице: 1из 12

Основы систем автоматического

контроля, управления и
регулирования (САК, САУ,САР)
ЛЕКЦИЯ 16. АВТОМАТИЧЕСКОЕ УПРАВЛЕНИЕ.
МИКРОКОНТРОЛЛЕР PIC16F84. ПРЕРЫВАНИЯ
 Очень часто вне ядра ЦПУ происходят различные события, требующие немедленной
реакции процессора. Подавляющее большинство контроллеров способны реагировать
на самые разнообразные события такого рода, нарушающие их нормальное
функционирование. Что же касается микроконтроллеров, то запросы на обслуживание
могут исходить как от встроенных периферийных устройств, например при
переполнении таймера, так и извне от источника, совершенно не связанного с
микроконтроллером. По меньшей мере, по сигналу внешнего сброса микроконтроллер
должен перейти к первой команде программы. Аналогичным образом, в качестве
реакции на внешний запрос на обслуживание, или прерывание, микроконтроллер
должен перейти к специальной подпрограмме, называемой подпрограммой
обработки прерывания.
 Простой пример, демонстрирующий необходимость быстрой реакции на событие. В
данном случае нам необходимо измерить время между точками R сигнала
электрокардиограммы (ЭКГ), который, по определению, является внешним событием
реального времени. Временное разрешение должно быть не менее 0.1 мс, а
наибольший интервал между максимальными значениями сигнала скорее всего не
превысит 1.5 с.
 Для измерения этого интервала с заданными параметрами можно было бы
использовать независимый 16-битный счетчик, работающий на частоте 10 кГц.
 Все микроконтроллеры среднего уровня имеют 8-битный счетчик, счетный регистр которого расположен
по адресу h ‘01'. На рисунке показано, как можно с помощью регистра h '3F' организовать 16-битный
счетчик.
 Состояние счетчика можно считать из двух указанных регистров в любой момент времени. Если
состояние счетчика, соответствующее последней точке R, было сохранено в двух временных регистрах, то,
вычитая состояние счетчика, соответствующее текущей точке R, получим требуемую длительность.
 Следующей задачей является обнаружение
максимального уровня сигнала, поскольку сердце
пациента, по определению, не синхронизировано с
микроконтроллером!
 Один из возможных способов определения точки R
заключается в непрерывном считывании этого сигнала
и обработки его по алгоритму выделения максимума.
В данном случае для обеспечения заданного
временного разрешения применение метода
последовательного опроса (polling) потребует
проведения измерений 10.000 раз в секунду.
Учитывая, что частота сердцебиения обычно
составляет около 60 ударов в минуту, 99 .99% времени
будет затрачено впустую. Более того, это означает, что
большая часть вычислительной мощности процессора
будет затрачена на обнаружение одного события из
10.000.
С учетом случайного характера внешних событий отклик процессора
на запрос прерывания будет выглядеть следующим образом:
 1. Завершение исполнения текущей команды.
 2. Автоматическое сохранение, по меньшей мере, состояния
счетчика команд (РС) -это необходимо для возврата из обработчика
прерывания. Некоторые процессоры (такие как микроконтроллеры
PIC старшего семейства) могут также автоматически сохранять
содержимое регистра STATUS и других внутренних регистров.
 3. Переход к соответствующей процедуре обработки прерывания.
 4. Выполнение требуемых действий.
 5. Восстановление состояния процессора и возврат к тому месту
основной программы, в котором произошло прерывание.

Возникновение сигнала прерывания приводит к тому, что микроконтроллер прекращает выполнение текущей
задачи, сохраняет свое состояние в прерываемой фоновой программе в стеке и переходит к выполнению
специальной подпрограммы, называемой процедурой обработки прерывания (lnterгupt Seгvice Routine -ISR).
Эта высокоприоритетная процедура представляет собой обычную подпрограмму, которая выполняется при
наступлении заданного события.
 Конкретные детали отклика на запрос
прерывания в некоторой степени отличаются от
процессора к процессору. В микроконтроллерах
семейства среднего уровня реакция на
прерывание осуществляется следующим образом
(см. рисунок):
 1. При выполнении каждой команды процессор
проверяет наличие запроса прерывания от
разрешенного источника.
 2. Если такой запрос отсутствует,
микроконтроллер просто переходит к
выполнению следующей команды, и описанный
процесс повторяется.
 3. При наличии запроса следующие три машинных цикла затрачиваются на передачу управления
процедуре обработки прерывания. Из этих циклов первый является холостыми, а во время двух
оставшихся производится сброс конвейера. Эта задержка длительностью от З до 4 машинных циклов
между подачей внешнего сигнала на вывод INT и моментом выполнения 1-й команды обработчика
называется задержкой обработки прерывания (interrupt latency).
 4. Во время этой задержки микроконтроллеры PIC выполняют следующие операции:
 а) Запрещается вся система прерываний, что гарантирует блокирование всех прерываний на
время обработки текущего. Это осуществляется сбросом 7-ro бита регистра управления
прерываниями INTCON, который помечен как флаг общего разрешения прерываний (GIE).
 б) Состояние 13-битного счетчика команд заносится в стек точно так же, как и при выполнении
команды call. Как и в случае подпрограмм, эта операция позволяет процессору после выхода из
процедуры обработки прерывания вернуться к выполнению прерванной фоновой программы.
Поскольку в РIС-микроконтроллерах среднего уровня реализован 8-уровневый аппаратный
стек, из обработчика прерывания можно вызывать до семи вложенных друг в друга
подпрограмм.
 в) Первая команда обработчика прерывания всегда размешается по адресу h'004' памяти
программ. Так что завершающий этап рассматриваемой последовательности состоит в
занесении в РС указанного адреса, называемого вектором прерывания. Разумеется, если код
обработчика прерывания находится в каком-либо другом месте памяти программ, то первой
командой будет команда goto.

 5. Как и все подпрограммы, процедура обработки прерывания должна завершаться командой


возврата. Однако при прерывании необходимо не только извлечь из стека сохраненное значение
РС, но и установить бит GIE регистра INTCON для разрешения последующих прерываний.
 Хотя большинство представителей микроконтроллеров PIC
среднего уровня поддерживают прерывания от различных
источников, три из этих источников во всех без исключения
устройствах связаны с регистром INTCON, как показано на
рисунке. Этими основными источниками являются:
 А) Внешний сигнал, подаваемый на вывод INT. Это
внешнее прерывание может генерироваться либо по
нарастающему , либо по спадающему фронту входного
сигнала, что определяется состоянием бита INTEDG
регистра OPTION_REG. Этот сигнал проходит через
вентиль Исключающее или, выполняющий в данном случае
роль программируемого инвертора.
 Б) Изменение состояния любого из четырех старших
выводов порта В (регистр h ‘06’) с момента последнего
чтения из этого порта.
 В) Переполнение счетного регистра таймера/счетчика
TMR0 (регистр h'01 ‘) с h'FF' до h'00’.

 С каждым из четырех источников прерываний связан


соответствующий бит флага прерывания. Например, при
появлении на 6-м выводе микроконтроллера
отрицательного перепада сигнала будет установлен флаг
INTF (бит 1). Это произойдет независимо от того,
разрешена работа системы прерываний или нет.
 Каждый флаг прерывания имеет соответствующий бит разрешения прерывания. Так,
флагу INTF соответствует бит INTE. Это позволяет программисту произвольным образом
маскировать источники прерывания в любом сочетании.
 На самом деле каждый из флагов прерывания логически умножается (AND) на
соответствующий бит маски прерывания. На рисунке 2-й элемент И показывает этот
механизм для внешнего прерывания. Например, если требуется разрешить прерывания как
от вывода INT, так и от Таймера 0, то придется установить биты 7, 5 и 4, т:е. выполнить
команды
 movlw b’10110000’
 movwf INTCON
 Биты разрешения прерывания можно изменять точно так же, как и обычные биты
регистров. При сбросе микроконтроллера все маскирующие биты обнуляются, тем самым
запрещая прерывания от соответствующих источников. Что же касается именно PICl6F84,
то в этой модели прерывание может генерироваться также при завершении цикла записи
во внутреннюю ЕЕРRОМ-память данных. В регистре INTCON для флага EEIF не хватило
места, поэтому этот флаг разместили в 4-м бите регистра управления EEPR(JM - регистре
EECON 1.
 Чтобы проиллюстрировать программные аспекты обработки
прерываний, рассмотрим задачу подсчета числа посетителей
в небольшом магазине. Одним из возможных решений было
бы использование пары маломощный лазер - фотоэлемент,
расположенных по бокам от входной двери. При пересечении
луча покупателем на управляющий микроконтроллер
поступит сигнал запроса в виде прямоугольного импульса как
показано на рисунке. В этот момент микроконтроллер может
быть занят выполнением своей основной задачи, например
организацией обмена данными между торговым терминалом
и основным компостером склада.
 Предположим, что при каждом проходе покупателя в магазин
инкрементируется регистр, который мы назовем EVENТ.
Разумеется, покупатели будут еще и выходить из магазина,
однако, если проход достаточно узкий, мы можем просто
разделить общее количество проходов на два, чтобы получить
реальное число посетителей.
 Это накладывает ограничения на максимальное число
посетителей, однако указанное ограничение можно легко
преодолеть, задействовав дополнительные регистры.
Предположим также, что в начале рабочего дня наша система
сбрасывается. Таким образом, максимальное число
посетителей, регистрируемое нашей системой, составит 126.

Вам также может понравиться