Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Краткие теоретические сведения
Внешние прерывания инициируются сигналами на входах INT0 (вывод Р3.2) и INT1 (вывод Р3.3). Микроконтроллер реагирует на прерывание, если установлен соответствующий флаг в регистре TCON (IE0 или IE1) (TCON образовано от слов Timer Control, IE – Interrupt Enable). Флаг ЕА (Enable interrupt) разрешает работу всех прерываний, для каждого из которых установлен бит в TCON. Прерывания INT0 и INT1 (от слова interrupt) могут быть вызваны уровнем или переходом сигнала из 1 в 0 на входах микроконтроллера. Тип прерывания определяют управляющие биты IT0, IT1 (interrupt type) в регистре TCON. Если один из этих битов ITi (i=0,1) установлен, то прерывание вызывается по перепаду 1-0 на соответствующем входе INTi (i=0,1) микроконтроллера. Если биты ITi (i=0,1) сброшены, то прерывание вызывается при наличии низкого уровня на соответствующем входе. Когда все рассмотренные выше биты (ITi, IЕi, (i=0,1), ЕА) установлены соответствующим образом, то при возникновении прерывания инициируется вызов соответствующей программы–обработчика прерывания. Сброс флага IЕi, (i=0,1), выполняется автоматически в случае, если прерывание вызвано перепадом сигнала на входе INTi (i=0,1). Если же вход прерывания INTi (i=0,1) настроен на срабатывание по низкому уровню, то состояние IЕi, (i=0,1) должна отслеживать программа-обработчик данного прерывания. Внешние прерывания INT0 и INT1 могут (если разрешены) вызываться либо установкой низкого уровня на соответствующем выводе микроконтроллера (на реальном объекте), либо программной установкой битов Р3.2 и/или Р3.3 (в среде моделирования микроконтроллера). Вектора внешних прерываний следующие: 0х03Н –INT0, 0x13Н – INT1. Другими словами, если прерывание происходит по INT0 (INT1), то адрес программы-обработчика прерывания содержится по адресу 0х03Н (0х13Н). Запись адресов происходит на этапе работы редактора связей (линкёра). Разработаем структуру МПС и напишем программный модуль, обеспечивающий изменение состояния светодиода по запросу от специальной кнопки. Функциональная схема МПС представлена на рис. 6. К выводу P3.2 (INT0) подключена кнопка. Для подавления дребезга использован RS-триггер. По нажатию кнопки на вывод Р3.2 подается сигнал низкого уровня, что приводит к вызову программы -обработчика прерывания. Соответствующий программный модуль представлен ниже. Для запуска обработчика прерывания необходимо смоделировать нажатие кнопки.
#include <REG51.H>
sbit s=P0^1;
sbit I=P3^2;
Рис.6. Функциональная схема подключения к ВЕ51 кнопки и светодиода
void PP() interrupt 0
{
//моделирование отжатой кнопки
I=1;
//запрещение прерываний //(команда необязательная – //по усмотрению разработчика программы)
EA=0;
//изменение состояния светодиода
s=~s;
//снятие блокировки прерывания; //обязательно, если присутствует EA=0;
EA=1;
}
main()
{
EA=1;//снятие блокировки прерывания
EX0=1;//разрешение внешнего прерывания
IT0=1;//тип прерывания – пр срезу
for(;;);//бесконечный цикл
}
Ключевое слово interrupt используется для объявления функции, с которой оно применяется, как обработчика прерывания. В среде KeilµVision после слова interrupt пишется приоритет прерывания в соответствии в табл. 3. Микроконтроллер ВЕ51 позволяет использовать 5 типов прерываний (два внешних прерывания, два прерывания таймеров и прерывание последовательного порта). В табл. 3 приведены перечень прерываний, их вектора и приоритеты.
Таблица 3 Вектора и преоритеты прерываний
В других средах, например, при использовании компилятора ICC8051, обработчик прерываний описывается следующим образом:
void PР() interrupt [0x003] {}
PР() – имя обработчика прерывания, а в квадратных скобках указывается вектор прерывания.
|