В задачах управления часто возникает необходимость измерения промежутка времени между двумя событиями. Обычно события в объекте управления представляются сигналами от двоичных датчиков. Считая событиями фронт и спад импульса, можно определять временные характеристики импульсных сигналов: длительность, период и скважность.
Простейшим способом измерения длительности импульса является программный. Для обнаружения событий (фронт и спад импульсного сигнала) в этом случае используются типовые процедуры WAIT, а отсчёт времени ведется программным способом. Для "положительного" импульсного сигнала, поступающего на вход Т0, программа измерения его длительности будет иметь вид:
MSCONT: MOV R7, #0;сброс счётчика
WAIT0: JNT0 WAIT0;ожидание фронта сигнала
COUNT: INC R7;инкремент счётчика
JT0 COUNT;ожидание спада сигнала
EXIT:...;выход из процедуры
После выхода из процедуры содержимое счетчика R7 пропорционально длительности импульса.
Для нормальной работы этой программы необходимо, чтобы обращение к ней производилось в моменты, когда на входе Т0 присутствует сигнал нулевого уровня. Верхний предел измеряемой длительности “положительного” импульса составит 255(1 + 2) мкс = 765 мкс. Этот предел может быть увеличен включением в цикл COUNT дополнительных команд NOP. Максимальная погрешность измерений 3 мкс.
|
|
Для измерения длительности сигнала может быть использован таймер. Особенно эффективно использование для этой цели таймера в 8051 Intel, имеющего вход разрешения счёта (альтернативная функция входа INT). Измеряемый сигнал можно, например, подавать на вход INT0, а измерение длительности при этом будет выполняться в Т/С0. Программа измерения длительности “положительного” импульса будет выглядеть так:
MOV TMOD, #00001001B;настройка T/C0
MOV TH0, #0;сброс таймера
MOV TL0, #0
SETB TCON.4;старт T/C0
WAIT0: JNB P3.2, WAIT0;ожидание 1
WAITC: JB P3.2, WAITC;ожидание 0
CLR TCON.4;стоп T/C0
EXIT:...;выход из процедуры
Управление программе должно быть передано при условии, что на входе INT0 присутствует низкий уровень. Прерывания от T/C0 и внешнее прерывание по входу INT0 должны быть запрещены. По завершении программы в T/C0 будет находиться число, пропорциональное длительности “положительного” импульса на входе INT0. Верхний предел измерения равен 65 536 мкс, а максимальная погрешность 1 мкс.
При необходимости измерения временных интервалов большей длительности можно программным способом подсчитывать число переполнений от таймера, т.е. расширять его разрядность за счет рабочего регистра или ячейки резидентной памяти данных.