Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл3_06.unlocked.docx
Скачиваний:
27
Добавлен:
09.02.2015
Размер:
635.45 Кб
Скачать

Д. Системапрерываний микроконтроллера

Микроконтроллер имеет автовекторную систему прерываний с двумя внешними и тремя внутренними источниками. Регистры специальных функций, связанные с прерыва- ниями и таблица векторов приведены на рис. 3.19.

Регистр разрешения прерываний (IE)

Таблица векторов прерываний

N бита

7

6

5

4

3

2

1

0

IE

EA

-

-

ES

ET1

EX1

ET0

EX0

Регистр приоритетов прерываний (IP)

Источник

Флаг

Вектор

Внешнее INT0

IE0

03H

Таймер Т/С0

TF0

0BH

Внешнее INT1

IE1

13H

Таймер Т/С1

TF1

1BH

Приемопередатчик

T1+R1

23H

IP

-

-

-

PS

PT1

PX1

PT0

PX0

Флаги прерываний

TCON

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Рис. 3.19

Регистр разрешения прерываний IE (Interrupt Enable) предназначен для разреше- ния или запрещения прерываний от соответствующих источников. Обозначение разрядов регистра IE показано в таблице на рис. 3.19, а их назначение указано ниже.

Бит ЕА - управление всеми источниками прерываний одновременно. Если ЕА=0, то прерывания запрещены. Если ЕА=1, то прерывания могут быть разрешены индивидуаль- ными разрешениями EX0, ET0, EX1, ЕТ1, ES (см. далее).

Биты 6, 5 - резервные разряды.

Бит ES - управление прерыванием от последовательного порта.

ES = 1 - разрешение. ES=0 - запрещение.

Бит ЕТ1 - управление прерыванием от Т/С1.

ЕТ1 = 1 - разрешение. ЕТ1 = 0 - запрещение.

Бит ЕХ1 - управление прерыванием от внешнего источника INT1.

ЕХ1 = 1 - разрешение. ЕХ1=0 - запрещение.

Бит ET0 - управление прерыванием от Т/С 0.

ЕТ0=1 - разрешение. ЕТ0 = 0 - запрещение.

Бит EX0 - управление прерыванием от внешнего источника INT0.

ЕХ0 = 1 - разрешение. ЕХ0 = 0 - запрещение.

При чтении резервных разрядов соответствующие линии магистрали не определе- ны. Пользователь не должен записывать "1" в резервные разряды, т. к. они зарезервирова- ны под дальнейшее расширение семейства МК51.

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

Регистр приоритетов прерываний (IP) предназначен для установки уровня приори- тета прерывания для каждого из пяти источников прерываний. Обозначение разрядов ре- гистра IP показано в таблице на рис. 3.14, а их назначение указано ниже.

Бит PX0 - установка уровня приоритета прерывания от внешнего источника INT0.

Бит PT0 - установка уровня приоритета прерывания от Т/С 0

Бит РХ1 - установка уровня приоритета прерывания от внешнего источника INT1.

Бит РТ1 - установка уровня приоритета прерывания от Т/С 1.

Бит PS - установка уровня приоритета прерывания от последовательного порта. Запрос на прерывание формируется при установленном флаге источника прерыва-

ний. Опрос флагов идет в каждом машинном цикле МК. На рис. 3.20 показана схема орга- низации прерываний. Флаги источников прерываний расположены в регистрах TCON и SCON. На рисункедля большей наглядности ониподштрихованы. Флагивнешних преры- ваний IE0 и IE1 формируются по уровню или по спаду сигнала на соответствующем вы- воде INT. Для установки того или иного условия служат биты IТ0 и IТ1. При установке

этих битов в единицу формируется прерывание по низкому уровню сигнала на INT, в ноль

– по спаду сигнала на INT. Флаги внешних прерываний после входа в подпрограмму об- работки прерывания аппаратно снимаются. Однако, если установлено прерывание по уровню и после выхода из подпрограммы обслуживания флаг не был снят, прерывание инициируется вторично.

Прерывания от таймеров/счетчиков вызываются установкой флагов TF0 и TF1 ре- гистра TCON, которые устанавливаются при переполнении соответствующих регистров

таймеров/счетчиков. Очистка флагов TF0 и TF1 производится внутренней аппара- турой МК при переходе к подпрограмме обслуживания прерывания.

Регистр IE

Регистр IP

IE0 TF0

IE1

TF1

1

Регистр TCON

Высокий приоритет

Низкий приоритет

Прерывание от последовательного

INT0

INT1

Регистр

SCON

IT0 EX0

ET0

IT1 EX1

ET1

ES

RI

порта вызывается установкой флага пре- рывания приемника RI или флага преры- вания передатчика TI в регистре SCON. В отличие от всех остальныхфлагов, RI и TI сбрасываются только программным пу- тем. Обычно это делают в пределах под- программы обработки прерывания, где определяется, какому из флагов RI или TI соответствует прерывание.

Все флаги прерывания (IE0, IEl, TF0, TF1, RI, TI), могут быть программно установлены или сброшены с тем же ре- зультатом, что и в случае их аппаратной установки или сброса. Т.е. прерывания мо-

TI EA

Рис. 3.20. Схема организации прерываний

гут программно вызываться или ожидаю- щие обслуживания прерывания могут про- граммно ликвидироваться. Кроме того,

прерывания по INT0, INT1 могут вызываться программной установкой Р3.2=0 и Р3.3=0.

Прерывания могут быть разрешены или запрещены битами регистра разрешения прерываний IE, после сброса МК регистр IE обнуляется и все прерывания запрещены. Флаги прерываний устанавливаются независимо от того, запрещены они или разрешены.

Структура приоритетов прерываний является двухступенчатой (рис. 3.20), сначала уровень приоритета (высокий – низкий), затем порядок опроса в пределах приоритета. Опрос флагов источников прерываний идет в два цикла в порядке, показанном на рисун- ке. Каждому источнику прерывания может быть индивидуально присвоен один из двух уровней приоритета: высокий или низкий. Выполняется это установкой (высокий уровень приоритета) или сбросом (низкий уровень приоритета) соответствующего бита в регистре приоритетов прерываний IP. Программа обработки прерывания с низким уровнем приори- тета может быть прервана другим запросом прерывания с высоким уровнем приоритета, но не может быть прервана запросом прерывания с низким уровнем. Программа обработ- ки прерывания с высоким уровнем приоритета не может быть прервана никаким другим запросом прерывания ни от одного из источников.

Алгоритм обработки запроса на прерывание (анализа флагов) показан на рис. 3.21. Анализ флагов производится один раз в каждом машинном цикле и, если, установлен ка- кой либо флаг, завершается текущая команда и сохраняется значение счетчика команд. За- тем проверяется, не запрещено ли это прерывание индивидуальным или общим битом разрешения-запрещения в регистре IE. Если запрещений нет, но уже идет выполнение ка- кой либо подпрограммы обслуживания прерывания, анализируется соотношение приори- тетовзапросившего иобслуживаемого источников. Обслуживание новогопрерывания на- ступит, если только приоритет запроса выше. Иначе обслуживание будетотложенодо тех

пор, пока не выйдем из подпрограммы обслуживания прерывания. Таким образом, макси- мальноечисло вложенныхпрерываний неможет быть больше двух, когда мы из прерыва- ния низшего приоритета переходим в прерывание высшего приоритета.

Аппаратно-реализуемая команда LCALL запускается, если принято решение об обслуживании выставленного запроса. При этом содержимое счетчика команд PC загру- жается в стек (при этом PSW в стек не записывается), после чего записывается в PC адрес

соответствующего вектора прерывания:

не установлен флаг

Флаг прерывания

Вектор прерывания

IE0

0003h

TF0

000Вh

IE1

0013h

TF1

001Вh

TI+RI

0023h

Выполнение программы

установлен флаг Завершение текущей команды

Да

Нет

Нет

Прерывание маскируется в

IE

Нет

Есть

общее разрешение

EА=1?

Да

Приоритет выше текущего пре-

рывания

Да

При выполнении аппаратно-реализуемой команды LCALL в ячейку стека с младшим ад- ресом загружаются разряды 0 - 7 счетчика ко- манд, а в следующую ячейку стека - разряды 8 - 15 счетчика команд.

Задержка в реакции на прерывание, от- считываемая от момента фиксации флага до за- вершения аппаратно-реализуемой команды LCALL, составляет от трех до семи машинных

Выполнение п/п обслуживания

Продолжение текущей программы

Рис. 3.21. Алгоритм обработки запроса

циклов. Она складывается из времени на завер- шение текущей команды и времени на выпол- нение аппаратной LCALL.

По адресу вектора прерывания програм- мист должен разместить команду перехода на подпрограмму обслуживания прерывания LJMP

Subroutine. Именно LJMP Subroutine, а не LCALL Subroutine. Тогда со стеком и возвратом в основную программу будет все в порядке.

Подпрограмма обслуживания прерывания продолжается до выполнения команды RETI. Команда RETI восстанавливает состояние логики прерывания и загружает в счетчик команд PC 2 байта адреса возврата из двух верхних ячеек стека. Восстановление состояния логики прерывания заключается в следующем: при переходе по вектору на подпрограмму об- работки прерывания автоматически до выполнения команды RETI независимо от состояния бит регистраIE запрещаются все прерыванияс уровнем приоритета, равным уровню приори- тета обслуживаемого прерывания, т. е. вложенные прерывания с равными уровнями приори- тетаневозможны. Команда RETI снимаетэтот запрет. При использованиикомандыRET вос- станавливается только состояние счетчика команд, т. е. происходит возврат в прерванную программу. Состояние логики прерывания команда RET не меняет, т. е. логика управления обслуживанием прерываний по-прежнему считает, что продолжает обслуживаться прерыва- ние, подпрограмма обработки которого была закончена командой RET.

Организация пошагового режима работы в МК семейства МК51 может быть реали- зована с использованием особенностей системы прерывания. После выполнения команды RETI обязательнобудет выполнена минимум однакомандапрерванной программы, после чего возможен следующий переход на обработку прерывания. Использовать эту особен- ность для организации пошагового режима можно следующим образом:

  • запрограммировать одно из внешних прерываний (к примеру, INT0) на активизацию по уровню;

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

LABEL1: JNB P3.2, LABEL1 ; ожидание "1" на входе Р3.2 (INT0) LABEL2: JB P3.2, LABEL2 ; ожидание "0" на входе Р3.2 (INT0)

RETI ; возврат и исполнение одной команды

- задать на входе Р3.2 (INT0) постоянный уровень "0" с возможностью подачи единичных импульсов, к примеру, с помощью кнопки "ШАГ".

После того как указанные манипуляции выполнены, будет происходить следующее: выполнится одна команда основной программы, после чего управление будет передано под- программе обработки прерывания по INT0, которая не сможет завершиться до тех пор, пока на входе INT0 не будет зафиксирован импульс "0"-"1"-"0". После прохождения такого им- пульса, задаваемого кнопкой "ШАГ" выполнится команда RETI, управление возвратится в основную программу, где будетвыполнена одна команда, после чего вновьначнет обрабаты- ваться прерывание по INT0. Таким образом, одно нажатие кнопки "ШАГ" (один импульс "0"- "1"-"0" на входе INT0) вызывает выполнение одной команды основной программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]