Микропроцессоры и микроконтроллеры

 
 
 
«Есть два способа создания дизайна программы. Один из них, это сделать его настолько простым, что в нем, очевидно, не будет недостатков. Другой способ — сделать его настолько запутанным, что в нем не будет очевидных недостатков.»
C.A. R. Hoare
Русский | Українська


Микропроцессоры и микроконтроллеры :: Структура и программирование однокристальных микроконтроллеров :: 7.1 Система обработки прерываний в МК MCS-51

7.1 Система обработки прерываний в МК MCS-51

Обработка асинхронных событий, которые происходят в произвольные моменты времени, в МК MCS-51, как и в других МП,  реализована через систему обработки прерываний (последовательность обработки показана на рис. 7.1):

Рисунок 7.1 – Общий принцип обслуживания прерываний

Источники запросов на прерывание для МК MCS-51:

·  внешние устройства, которые могут подавать сигналы запроса на прерывание через входы INT0# и INT1# (аварийные ситуации, готовность данных);

·  таймеры, которые при переполнении устанавливают флаги TF0 и TF1; эти флаги обрабатываются как сигналы запросов;

·  УАПП, который при завершении передачи или приема формирует флаги TI и RI соответственно; эти флаги также обрабатываются как сигналы запросов.

Использование системы прерываний позволяет организовать параллельную работу процессора и периферийных устройств (таймеров, УАПП, внешних схем) таким образом, что эти устройства, работая одновременно с процессором, информируют его об окончании очередного цикла своей работы с помощью сигналов запроса на прерывание.

Логика обработки прерываний в МК MCS-51 показана на рис.7.2.

Обработка внешних сигналов запросов

1) Внешние запросы на прерывание поступают на входы INT0# и INT1#.

2) Фиксация запросов, т.е. установка флагов запроса IE0 и IE1 в регистре TCON происходит в зависимости от значения битов IT0 и IT1 этого же регистра:

·  по активному уровню сигнала ('0'), если IT0 = 0,   IT1 = 0;

·  по срезу (переход из '1' в '0'), если IT0 = 1,  IT1 = 1.

3) Контроллер формирует аппаратную команду LCALL 0003h или 0013h соответственно по запросам INT0# и INT1#. Таким образом, происходит вызов процедуры обработки прерывания. По адресу 0003h или 0013h программист должен поместить команду   JMP <адрес>  – переход на соответствующую процедуру.

Сброс флагов IE0 и IE1 выполняется аппаратно, если прерывание вызвано срезом сигнала (то есть при настройке IT0=1 и IT1=1). При другой настройке программа должна воздействовать на источник сигналов запроса, чтобы сигналы INT0# и INT1# стали неактивны (т.е. “1”).

Рисунок 7.2 – Логика обработки прерываний в МК MCS-51

Обработка сигналов прерываний от таймеров

1) Сигналы переполнения таймеров фиксируются в битах TF0 и TF1.

2) Контроллер формирует аппаратную команду LCALL 000Bh или 001Bh соответственно по запросам TF0 и TF1. Таким образом, происходит вызов процедуры обработки прерывания. По адресу 000Bh или 001Bh программист должен поместить команду   JMP <адрес>  – переход на соответствующую процедуру.

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

Обработка сигналов прерываний от УАПП

1) Сигналы завершения приема и передачи УАПП фиксируются в битах RI и TI.

2) Контроллер формирует аппаратную команду LCALL 0023h (независимо от бита). Таким образом, происходит вызов процедуры обработки прерывания. По адресу 0023h программист должен поместить команду  JMP <адрес>  – переход на соответствующую процедуру.

3) В процедуре обработки нужно программно определять, какой флаг – RI или TI – вызвал прерывание, и выполнять соответствующие действия.

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

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

7.2  Разрешение обработки запросов прерываний

Часто в практических задачах необходимо запретить или разрешить прерывание от тех или других источников во время выполнения всей программы или отдельных её фрагментов.

Для разрешения обслуживания запросов используют биты регистра разрешения прерываний IE (“Interrupt enable”):

Имя бита

Назначение бита

ЕА

Разрешение / блокировка прерываний.

При ЕА = 1 разрешение прерываний определяется битами  IE.4 – IE.0.

При EA = 0 все прерывания запрещены

IE.6,  IE.5

Биты IE.6 и IE.5 не используются в базовой модели МК

ES

При ES = 1 разрешение прерываний от УАПП по флагам ТI или RI

ET1

При ET1 = 1 разрешение прерывания от таймера 1 по флагу TF1

ЕХ1

При EX1 = 1 разрешение внешнего прерывания 1 по входу INT1# (флаг IE1)

ЕТ0

При ET0 = 1 разрешение прерывания от таймера 0 по флагу TF0

ЕХ0

При EX0 = 1 разрешение внешнего прерывания 0 по входу  INT0# (флаг IE0)

 

Например, для разрешения прерываний от УАПП и таймера Т0 нужно сформировать двоичное число в соответствии со структурой регистра IE:

init_ie  equ  10010010b

и записать это число в регистр IE:

MOV   IE, #init_ie

При необходимости можно разрешать и запрещать обработку конкретных прерываний индивидуально, например:

SETB  EX1 ; разрешить прерывание от сигнала на входе INT1#

CLR   ET1 ; запретить обработку прерывания от таймера Т1

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

INT0 – TF0 – INT1 – TF1 – TI/RI.

Для любого из пяти источников (TF1, TF0, INT1, INT0,  TI или RI) может быть установлен один из двух уровней приоритета – "высокий" или "низкий" – программным путем. В случае совпадения приоритетов нескольких источников выбор проводится в соответствии с аппаратной (неизменной) шкалой.

Например, если высокий приоритет задан программистом для INT0 и TF1, то в случае одновременного запроса от этих источников  сначала будет обслужен запрос INT0, а потом TF1,  и только  после этого – остальные запросы в порядке TF0-INT1-(TI/RI).

 

P.S. Отдельно хотелось бы отметить интернет-магазин беспроводных зарядок https://www.qinetiq.com.ua/. Широкий выбор беспроводных зарядок, удобная оплата и доставка.