Система прерывания микроконтроллера МК-51

Прерывание — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его. На прерывания в микроконтроллерах нужно реагировать быстро – в реальном режиме времени.

 

Общая структура системы прерываний МК-51 ®на рис.

 

Микроконтроллеры семейства МК-51 обеспечивают поддержку пяти источников прерываний: 1)двух внешних прерываний, поступающих по входам INT0 и INT1 (линии порта Р3: Р3.2 и Р3.3 соответственно); 2)двух прерываний от таймеров/счетчиков Т/С0 и Т/С1; 3)прерывание от последовательного порта.

бит Функция
0 IT0 Настройка вида прерывания INT0
1 IE0 Флаг запроса прерывания INT0
2 IT1 Настройка вида прерывания INT1
3 IE1 Флаг запроса прерывания INT1
4 TR0 Включение в работу таймера/счетчика 0
5 TF0 Флаг переполнения (запрос прерывания)таймера/счетчика 0
6 TR1 Включение в работу таймера/счетчика 1
7 TF1 Флаг переполнения (запрос прерывания)таймера/счетчика 1

 

Запросы на прерывание фиксируются в р-рах специальных функций МК: флаги IE0, IE1, TF0, TF1 запросов на прерывание от INT0, INT1, T/C0 и T/C1 содержатся в регистре управления TCON (табл.1), а флаги RI и TI запросов на прерывание от последовательного порта - в регистре SCON управления последовательным портом.

Флаги TF0 и TF1 устанавливаются аппаратно при переполнении соответствующего таймера/счетчика (точнее, при переходе T/Cx из состояния "все единицы" в состояние "все нули").

Флаги IE0 и IE1 устанавливаются аппаратно от внешних прерываний IT0 и IT1 соответственно. Внешний запрос может вызвать установку флага либо при низком уровне сигнала на соответствующем входе, либо при переключении этого сигнала с высокого уровня на низкий (с частотой, не превышающей половины частоты внешней синхронизации МК).

Настройка на тип запроса осуществляется программной установкой бит IT0 и IT1 в регистре управления TCON. Установка ITx = 0 настраивает систему прерывания на запрос по низкому уровню сигнала, ITx = 1 - запрос на прерывание по спаду сигнала.

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

Флаги TF0 и TF1 сбрасываются аппаратно при передаче управления программе обработки соответствующего прерывания.

 

Сброс флагов IEx выполняется аппаратно при обслуживании прерывания только в том случае, если прерывание было настроено на восприятие спада сигнала INTx. Если прерывание было настроено на восприятие уровня сигнала запроса, то сброс флага IEx должна выполнять программа обслуживания прерывания, воздействуя на источник прерывания для снятия им запроса.

бит Функция
7 EA Запрет прерывания от всех источников
6 - Не используется
5 - Не используется
4 ES Запрет прерывания от последовательного порта
3 ET1 Запрет прерывания от таймера/счетчика T/C1
2 EX1 Запрет прерывания от внешнего источника INT1
1 ET0 Запрет прерывания от таймера/счетчика T/C0
0 EX0 Запрет прерывания от внешнего источника INT0

Флаги TI и RI сбрасываются только программным путем.

Каждый вид прерывания индивидуально разрешается или запрещается установкой или сбросом соответствующих разрядов регистра разрешения прерывания IE. Этот регистр содержит также и бит общего запрещения всех прерываний.

Формат регистра IE приведен в табл.2

бит Функция
7 - Не используется
6 - Не используется
5 - Не используется
4 PS Приоритет прерыванияот последовательного порта
3 PT1 Приоритет прерывания от таймера/счетчика T/C1
2 PX1 Приоритет прерыванияот внешнего источника INT1
1 PT0 Приоритет прерывания от таймера/счетчика T/C0
0 PX0 Приоритет прерыванияот внешнего источника INT0

 

Каждому виду прерывания может быть программно присвоен один из двух возможных приоритетов: 0 - низший или 1 - высший. Настройка приоритетов осуществляется установкой или сбросом соответствующего бита регистра приоритетов прерываний IP.

Формат регистра IP приведен в табл.3

 

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

В случае одновременного поступления нескольких запросов на прерывания с одинаковым приоритетом порядок их обработки определяется аппаратными средствами микроконтроллера и не может быть изменен программно. Этот порядок соответствует последовательности опроса флагов запросов прерываний, имеющей следующий вид: IT0 ÞTF0 ÞIT1 ÞTF1 Þ (RI, TI).

 

Аппаратно реализуемый вызов обработчика прерываний состоит из следующих действий:

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

 

Источник прерывания Адреса точек входа
Внешнее прерывания(ITO) 03h
Таймер-счетчик(TFO) 0Bh
Внешнее прерывания(IT1) 13h
Таймер-счетчик(TF1) 1Bh
Последовательный порт(R1 или T1) 23h

 Точки входа в обработчик прерывания для каждого источника прерываний аппаратно зафиксированы.

Значения точек входа в обработчик прерывания приведены в табл.4

 

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

 

При переходе на подпрограмму обработки прерывания автоматически независимо от состояния регистра IE запрещаются все прерывания, которые имеют уровень приоритета, равный уровню приоритета обслуживаемого прерывания, - то есть вложенные прерывания с равным уровнем приоритета запрещены. Таким образом, низкоприоритетное прерывание (имеющее "0" в соответствующем разряде регистра IP) может прерываться высокоприоритетным (имеющим "1" в соответствующем разряде регистра IP), но не низкоприоритетным. Обслуживание высокоприоритетного прерывания не может быть прервано другим источником.

 

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


 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: