Измеритель временных интервалов.
DB 8
DB 4
DB 0
ORG 768
STRT T
MOV T, A
OUTL P2, A
OUTL P1, A
CLR F1
CLR F0
JNZ END
MOV A, R2
JMP END
CPL F1
CLR F1
JNZ END
MOV A, R2
INC R2
OUTL P1, A
JMP END
CLR F1
CPL F0
CLR F0
JNZ END
MOV A, R2
JMP END
CPL F1
CLR F1
JNZ END
MOV A, R2
INC R2
OUTL P1, A
JF1 M1
JF0 M0
ORG 7
JMP START
ORG 0
MOV A, #0; формирование
OUTL P2, A; 1 четверти периода
MOV A, R2; F0=0
MOVP3 A, @A; F1=0
MOV R2, #254
M1: MOV A, R2; формирование
MOVP3 A, @A; 2 четверти периода
OUTL P1, A; F0=0
DEC R2; F1=1
M0: MOV A, #80H; формирование
OUTL P2, A; 3 четверти
JF1 M2; F0=1
MOV A, R2; F1=0
MOVP3 A, @A
MOV R2, #254
M2: MOV A, R2; формирование
MOVP3 A, @A; 4 четверти
OUTL P1, A; F0=1
DEC R2; F1=1
END: RETR
START: EN TCNTI
MOV A, #0
MOV R2, #1
MOV A, #255
M3: JMP M3
….
….
Рассмотрим практическую задачу измерения длительности импульса с применением таймера-счетчика. Пусть импульс приходит на вход T0 микроЭВМ. Алгоритм заключается в опросе состояния этого входа до тех пор, пока он не станет равным 1. После этого запускается предварительно обнуленный таймер и продолжается опрос состояния входа T0, пока оно не станет равным 0. После этого состояние таймера укажет на длительность импульса. Длительность импульса будет равна состоянию таймера, умноженному на 80 мкс. К сожалению, погрешность такого метода измерения составляет 80 мкс.
|
|
Принцип измерения частоты заключается в подсчете числа импульсов за определенный промежуток времени. В качестве этого промежутка времени удобнее взять значение 1 секунда, тогда подсчитанное число импульсов будет равно частоте в герцах.
Для формирования интервала времени 1 секунда используется таймер – счетчик. Удобно подать импульсы на вход внешних прерываний /INT, тогда окончание каждого ипульса (переход из 1 в 0) будет вызывать прерывание МК48, по которому программно увеличивается счетчик импульсов. Счетчик импульсов реализуется на одном, а лучше двух регистрах, например регистр R6 хранит младший байт числа, а регистр R7 – старший байт числа. По каждому внешнему прерыванию программа должна увеличивать значение регистра R6, проверять его переполнение и, если он переполнился (обнулился) увеличивать значение регистра R7.
Рассмотрим вопрос реализации времени выдержки в 1 секунду. При исходном состоянии таймера – счетчика, равном 0 он может обеспечить до своего обнуления интервал времени, равный 20,48 мс. Определим сколько таких интервалов укладывается целиком в 1 секунде, используя формулу:
|
|
,
где t1 сек – интервал времени 1 секунда;
t20,48 – интервал времени 20,48 мс.;
n - число вложений интервалов 20,48 мс. в интервале 1 сек.;
Dt – остаток.
По расчетам получилось: n = 48, Dt = 1696 мкс. Значит таймер – счетчик должен 48 раз пройти полный (20,48 мс) цикл счета и останется еще 1696 мкс для реализации выдержки времени в 1 секунду. Так как присутствует остаток, то таймер – счетчик необходимо первоначально загрузить некоторым числом, чтобы этот остаток ликвидировать. Это число вычисляется по формуле:
, где
INT(X) – целая часть числа X.
В результате расчета получилось, что nнач=235. Таким оразом при загрузке первоначально в таймер – счетчик числа 235 до его первого обнуления пройдет 80 мкс * (266-235) = 1680 мкс. Имеем в виду, что остается еще 16 мкс, т.е. можно записать, что
t1 сек=20480 * n + 21 * 80 + 16 = 1000000 мкс.
Приведенная ниже программа реализует выдержку времени, равную 1 сек с применением таймера – счетчика.