Измерение частоты

Измеритель временных интервалов.

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 сек с применением таймера – счетчика.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: