org 0000h
jmp start ; Вектор стартового перехода
org 001Bh
jmp proc_T1 ; Переход на обробку прерывания
org 0030h ; Блок инициализации
start: mov TMOD,#00010101b ; Настройка таймеров
mov IE,#10001000b ; Разрешение прерывания от Т1
mov TL1,#Low(Nst) ; Задание стартового числа
mov TH1,#High(Nst)
. . . ; Другие действия
mov TL0,#0 ; Обнуление таймера, который считает
mov TH0,#0 ; внешние импульсы
setb TR1 ; Запуск таймеров – начало интервала
setb TR0 ; и начало подсчета
. . . ; Другие действия в программе
“int”. . . ; На одной из команд возникает прерывание при
. . . ; завершении интервала измерения (50мс)
Proc_T1: ; Процедура обработки прерывания от таймера Т1
clr TR1 ; Останов таймеров – конец интервала
clr TR0 ; и завершение подсчета импульсов
mov R3,TL0 ; Фиксация результата измерения
mov R4,TH0
. . . ; Другие действия при завершении интервала
reti ; Возврат в основную программу
В данном примере, поскольку ТИ невелик, следует учитывать аппаратные ограничения МК на частоту внешних импульсов: , то есть за интервал ТИ может быть подсчитано только 25000 импульсов. Минимальная частота определяется так же: .
Интервал измерения может быть увеличен на основе подхода, в котором используется программный подсчет дискрет времени.
В целом принцип измерения частоты определяется временной диаграммою на рис. 1.2.
Абсолютное значение измеряемой частоты импульсов может быть рассчитано как . Нужно отметить, что с увеличением интервала измерения ТИ точность результата возрастает.
Способ на основе двух таймеров позволяет устранить непроизводительные действия процессора во время измерения. Но остается недостаток, связанный с задержкой поступления новых данных в алгоритм управления.
Рисунок 1.2 – Принцип измерения частоты импульсов