Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mIKROPROTsESSORY / LABMP_ALL_2013.doc
Скачиваний:
108
Добавлен:
09.04.2015
Размер:
2.25 Mб
Скачать

3.1.4. Работа таймера в режиме счетчика событий

Если установить таймер в режим счетчика событий, то от будет посчитывать число импульсов, появляющихся на входах Т0 для таймера 0 и Т1 для таймера 1. При этом управление таймером будет точно такое же, как и в режиме работы с внешним источником, кроме необходимости устанавливать другой управляющий байт в регистре TMOD.

Ниже приведен пример программы работы таймера 0 в режиме счетчика событий с одновременным воздействием на внешнее прерывание 0 (Программа 5). В ней установлены два источника прерывания:

  • внешнее прерывание INT0 (моделируется кнопкой INT0 на плате EB552),

  • прерывание от таймера 0, установленного в режим счетчика внешних импульсов (моделируются кнопкой Т0 на плате EB552).

Счетчики количеств прерываний этих двух видов установлены в регистрах R3 и R2 соответственно. Для наглядности при отладке регистры R5 и R6 используются как флаги того или иного типа прерывания (если в R5 оказывается число 00Н, а в R6 - 0FFH, то плата находится в подпрограмме обслуживания внешнего прерывания, а если в регистрах обратные величины - то в подпрограмме обслуживания прерывания по таймеру 0). При этом, так как регистр IP не задействован, то приоритет у прерывания INT0 выше.

Программа 5

NAME TEST4

Xseg at 0000h

ds 20h

CSEG AT 8000h

ORG 8000h

ljmp start; переход на начало основной программы

ORG 8003h; адрес вектора внешнего прерывания INT0

ljmp int00; переход на начало программы обработки внешнего прерывания INT0

ORG 800bh; адрес вектора прерывания от таймера 0

int11: clr tcon.4; останов таймера 0

clr ie.1; запрет прерывания от таймера 0

mov r5,#0ffh; флаги индикации, что запущена программа

mov r6,#00h; обслуживания таймера

lcall 23ddh; индикация состояния ОЭВМ

mov tl0,#0f5h; загрузка в таймер числа 0FFF5H для

mov th0,#0ffh; подсчета 10 прерываний от кнопки Т0

dec r2; вычитание 1 из счетчика числа прерываний

lcall 23ddh

setb tcon.4; запуск таймера

setb ie.1; разрешение прерывания от таймера

reti; возврат из прерывания по таймеру

int00: ; начало п/п обработки внешнего прерывания

clr ie.0; запрет внешнего прерывания

dec r3;вычитание 1 из счетчика числа прерываний

mov r5,#00h;флаги индикации, что запущена программа

mov r6,#0ffh; обслуживания внешнего прерывания

lcall 23ddh

setb ie.0; разрешение внешнего прерывания

reti; возврат из внешнего прерывания

start: ;начало основной программы

setb ie.7;разрешение глобальных прерываний

mov tmod,#05; установка режима таймера 0: 16-битовый счетчик, режим счетчика событий

mov tl0,#0f5h; загрузка в таймер числа 0FFF5H для

mov th0,#0ffh; подсчета 10 прерываний от кнопки Т0

mov r2,#20;загрузка счетчика числа прерываний от таймера 0

mov r3,#10; загрузка счетчика числа прерываний от кнопки INT0

lcall 23ddh

setb tcon.4;запуск таймера 0

setb ie.1;разрешение прерывания от таймера 0

setb ie.0;разрешение прерывания от кнопки INT0

m1: пустой цикл

nop

cjne r3,#0,m1; проверка на нуль и зацикливание

cjne r2,#0,m1;проверка на нуль и зацикливание

clr tcon.4; останов таймера 0

clr ie.1; запрет прерываний от кнопки Т0

clr ie.0; запрет прерываний от кнопки INT0

lcall 23ddh

ret

end

Соседние файлы в папке mIKROPROTsESSORY