Академический Документы
Профессиональный Документы
Культура Документы
контроля, управления и
регулирования (САК, САУ,САР)
ЛЕКЦИЯ 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.