Выполнил:
Студент группы ЭС-41
Матылицкий И. В.
Лабораторная работа № 5
Реализация функций времени. Измерение временных интервалов
Цель работы: Изучить возможности реализации функций времени (измерение временных интервалов), предоставляемые архитектурой MCS-51.
Индивидуальное задание.
Вариант 2: подсчёт до 3 с.
Временные диаграммы и описание работы таймера в выбранном режиме.
Таймер 0 работает в режиме 1 (16-разрядный таймер), с внутренней синхронизацией. Счёт разрешён, когда INT0=1 и TR0=1. Прерывание по INT0 происходит по срезу сигнала.
Схема электрическая принципиальная.
Листинг составленной программы
FINISH_EVENT_FLAG SET B.0
TIMER_EX_REG SET R0 ;регистр дополнительного байта времени
TIMER_L_STORE SET R1 ;регистр старшего байта времени
TIMER_H_STORE SET R2 ;регистр младшего байта времени
ORG 0100h
main:
call init_devices ;инициализация устройств и регистров
main_cycle: ;запись во внешние защёлки
;байтов отсчётов времени
mov P2, TIMER_L_STORE
setb P1.3 ;такт на защёлку 0 (запись)
clr P1.3
mov P2, TIMER_H_STORE
setb P1.4 ;... 1
clr P1.4
mov P2, TIMER_EX_REG
setb P1.5 ;... 2
clr P1.5
jb P3.3, l_timer_call ;проверка бита режима
call prog_count ;программный подсчёт длительности
jmp main_cycle
l_timer_call:call timer_count ;аппаратный подсчёт длительности
jmp main_cycle
init_devices:
clr EA ;глобальный запрет прерываний
mov P3, #0FFh ;задействовать альтернативные функции порта 3
mov P1, #00h ;все остальные порты - выходные
mov P0, #00h
mov P2, #00h
mov TMOD, #00001001b ;таймер 0, как 16-разрядный,
;с разрешением счёта высоким состоянием INT0
mov TCON, #00000001b ;прерывание 0 - по срезу сигнала
mov IE, #00000011b ;разрешение прерывания
;таймера 0 и линии INT0
mov IP, #00000001b ;более приоритетно INT0
mov TIMER_EX_REG, #00h ;обнуление времени
mov TIMER_L_STORE, #00h
mov TIMER_H_STORE, #00h
mov P1, #00000111b ;прекращение сброса защёлок
ret
timer_count:
mov TIMER_EX_REG, #00h ;сброс дополнительного байта времени
clr FINISH_EVENT_FLAG ;сброс флага завершения
mov TH0, #00h ;сброс регистров таймера
mov TL0, #00h
setb TR0 ;разрешить подсчёт длительности
setb EA ;разрешить прерывания
l_wait_finish:jnb FINISH_EVENT_FLAG, l_wait_finish ;ожидание подсчёта
mov TIMER_L_STORE, TL0 ;сохранение значений регистров таймера
mov TIMER_H_STORE, TH0
clr TR0 ;запрещение подсчёта длительности
clr EA ;запрет прерываний
ret
prog_count:
mov TIMER_L_STORE, #00h ;обнуление байтов времени
mov TIMER_H_STORE, #00h
mov TIMER_EX_REG, #00h
l_wait_for_high:jnb P3.2, l_wait_for_high ;ожидание высокого состояния
l_count_cycle:jnb P3.2, l_finish_count ;2 цикла выход из цикла
;по низкому состоянию P3.2
mov A, TIMER_L_STORE ;1 цикл
;инкремент байта времени
add A, #01h ;1 цикл
mov TIMER_L_STORE, A ;1 цикл
jnc l_count_cycle ;2 цикла
mov A, TIMER_H_STORE ;1 цикл
add A, #01h ;1 цикл
mov TIMER_H_STORE, A ;1 цикл
jnc l_count_cycle ;2 цикла
mov A, TIMER_EX_REG ;1 цикл
add A, #01h ;1 цикл
mov TIMER_EX_REG, A ;1 цикл
jnc l_count_cycle ;2 цикла
l_finish_count:ret
timer_int_handler:
inc TIMER_EX_REG ;при переполнении таймера -
;инкремент дополнительного байта времени
reti
ex_int_handler:
setb FINISH_EVENT_FLAG ;при срезе INT0 -
;установка флага окончания подсчёта
reti
ORG 0003h
jmp ex_int_handler
ORG 000Bh
jmp timer_int_handler
ORG 0000h
jmp main
END
Выводы: отличительной особенностью программной реализации измерения временных интервалов является необходимость расчёта времени выполнения всех команд цикла с учётом тактовой частоты тактового генератора и последующей калибровки, однако программная реализация не требует инициализации никаких модулей и может быть выполнена в любой микропроцессорной системе; достоинством реализации измерения с помощью таймера является возможность использования внешних прецизионных устройств, либо устройств со сложной логикой действия, выполнение операции в асинхронном по отношению к основной программе режиме.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.