Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПТ 2013 ШПОРЫ.docx
Скачиваний:
297
Добавлен:
15.04.2015
Размер:
669.17 Кб
Скачать

6. Программирование системы прерываний микроконтроллеров mcs-51 на языке с51.

Разрешение и запрещение прерываний от таймеров/счетчиков выполняется битами регистра разрешения прерываний IE.

Формат регистра разрешения прерываний IE:

7

6

5

4

3

2

1

0

Разряды

EA

-

-

ES

ET1

EX1

ET0

EX0

EA – бит общего разрешения: 0 – все прерывания замаскированы, 1 – каждый источник разрешается своим собственным битом IEx;

ES - разрешение прерывания от УАПП;

ET1, ET0 – разрешение прерывания от Т/С1, Т/С0

EX1, EX0 – разрешение прерывания от ,

Имеется возможность устанавливать приоритеты запросов прерывания (в случае их одновременного поступления) с помощью битов регистра управления приоритетами IP.

Формат регистра управления приоритетами IP:

7

6

5

4

3

2

1

0

Разряды

-

-

-

PS

PT1

PX1

PT0

PX0

PS - бит приоритета УАПП;

PT1, PT0 – биты приоритетов Т/С1, Т/С0;

PX1, PX0 – биты приоритетов ,;

бит=1 – высший приоритет, 0 – низший.

В языке программирования С51 каждому прерыванию присвоен свой номер.

Номера прерываний для МК 8051

Номер прерывания

Источник прерывания

0

Внешнее прерывание INT0

1

Прерывание таймера 0

2

Внешнее прерывание INT1

3

Прерывание таймера 1

4

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

Для объявления функций-обработчиков прерываний в С51 используется ключевое слово interrupt с указанием номера прерывания.

Пример объявления функции-обработчика прерывания таймера 0:

void isr_tmr0(void) interrupt 1

{

………….. // тело функции

}

Исследование внешних запросов прерывания

Каждое из внешних прерываний INT0 и INT1 может быть вызвано либо низким уровнем (логический 0) или переходом из 1 в 0 сигналов на выводах микроконтроллера P3.2, P3.3, что определяется состоянием битов IT0 и IT1 в регистре TCON. При поступлении запросов внешнего прерывания INT0, INT1 устанавливаются флаги IE0, IE1 в регистре TCON, которые инициируют вызов соответствующей подпрограммы обслуживания прерывания. Сброс этих флагов выполняется аппаратурно (автоматически внутренними средствами МК) только в том случае, если прерывание было вызвано переходом из 1 в 0 сигнала на входах INT0, INT1. Если же прерывание было вызвано низким уровнем (логическим 0) входного сигнала, то сброс флагов IE0, IE1 выполняет соответствующая подпрограмма обслуживания прерывания путем воздействия на источник прерывания с целью снятия им запроса.

Рассмотрим простейшую программу, в которой запросом прерывания является изменение состояния линии порта Р3.2 с высокого уровня на низкий, т.е. 1  0. Такой запрос прерывания называется INT0.

/*программа исследования внешнего прерывания INT0*/

#include<reg51.h>

int count = 0;

void isr_ex0(void) interrupt 0

{

count++;

}

void main(void)

{

IT0 = 1; // прерывание по перепаду 1  0

EX0 = 1; // разрешение внешнего прерывания INT0

EA = 1; // глобальное разрешение прерываний

while( 1 );

}

Исследование прерывания от таймера

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

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