- •Лабораторная робота №2. Система прерываний. Опрос дискретных датчиков.
- •Теоретические сведения
- •Сигнал контактной пары
- •Система прерываний микроконтроллера AtMega8515
- •Структура прерываний
- •Доступ к клавишам клавиатуры
- •Порядок выполнения лабораторной работы.
- •Контрольные вопросы:
- •Варианты индивидуальных заданий
Лабораторная робота №2. Система прерываний. Опрос дискретных датчиков.
Тема: Система прерываний. Опрос дискретных датчиков.
Цель работы: Изучение режимов работы системы прерывания ОЭВМ, программная обработка дискретных сигналов
Теоретические сведения
Опрос дискретных сигналов. Для ввода информации широко применяются кнопочные переключатели и контактные клавиатуры. Сигнал таких переключателей формируется путем замыкания (размыкания) электрической цепи. Сигнал, формируемый контактной парой, сопровождается дребезгом, длительность которого составляет ~8-12мс см. рис. 4.1.
Сигнал контактной пары
Для устранения дребезга в получаемом сигнале на выходе контактной пары устанавливают специальные формирователи. Пример такого формирователя основанного на принципе непосредственной установки RS-триггера приведён на рис. 4.2..
Схема устранения дребезга с помощью RS-триггера
Для уменьшения аппаратных затрат применяют программное подавление дребезга. Оно заключается в повторном опросе контактной пары с задержкой в 12мс, при совпадении результатов опроса кнопка была нажата, иначе в результате первого опроса был зафиксирован дребезг.
Система прерываний микроконтроллера AtMega8515
Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внешним или внутренним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу должна находиться команда относительного перехода к подпрограмме обработки прерывания. Кроме того, последней командой подпрограммы обработки прерываний должна быть команда RETI, которая обеспечивает возврат в основную программу и восстановление предварительно сохраненного счетчика команд.
Микроконтроллеры семейства MEGA имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $001, отведены под таблицу векторов прерывания. Каждому прерыванию соответствует адрес в этой таблице, и именно этот адрес загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице определяет также и приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Начальные адреса векторов прерываний даны в таблице 4.1. Там же даны названия сигналов, которые используются при программировании обработки прерываний на языке С (см. файл iom8515.h)
Начальные адреса векторов прерываний
-
Источник прерывания
Адрес
Название сингала в С
Внешнее прерывание 0
$001
SIG_INTERRUPT0
Внешнее прерывание 1
$002
SIG_INTERRUPT1
Прерывание по захвату 1
$003
SIG_INPUT_CAPTURE1
Совпадение таймера 1А
$004
SIG_OUTPUT_COMPARE1A
Совпадение таймера 1B
$005
SIG_OUTPUT_COMPARE1B
Переполнение таймера 1
$006
SIG_OVERFLOW1
Переполнение таймера 0
$007
SIG_OVERFLOW0
Прерывание SPI
$008
SIG_SPI
Последовательный порт
$009
SIG_UART_RECV
Опустошение последовательного порта
$00a
SIG_UART_DATA
Окончание передачи последовательного порта
$00b
SIG_UART_TRANS
Аналоговый компаратор
$00c
SIG_COMPARATOR
Для разрешения прерываний флаг I регистра SREG должен быть установлен в «1» командой sei. Разрешение или запрещение (маскирование) отдельных прерываний производится установкой или сбросом соответствующих разрядов
Микроконтроллеры семейства Mega поддерживают очередь прерываний, которая работает следующим образом: если условия генерации одного или более прерываний возникают в то время, когда флаг общего прерывания сброшен (все прерывания запрещены), соответствующие флаги устанавливаются в «1» и остаются в этом состоянии до установки общего флага разрешения прерываний. После разрешения прерываний выполняется их обработка в соответствии с приоритетом.
Наименьшее время отклика для любого прерывания составляет 4 машинных цикла. В течение этих циклов происходит сохранение счетчика команд в стеке. В течение следующих двух циклов выполняется команда перехода к подпрограмме обработки прерывания. Если прерывание произойдет во время выполнения команды, длящейся несколько циклов, то генерация прерывания происходит только после выполнения этой команды.
Возврат в основную программу происходит 4 машинных цикла, в течение которых происходит восстановление счетчика команд из стека. После выхода из прерывания процессор всегда выполняет одну команду основной программы, прежде чем обслужить одно отложенное прерывание.
