Подсчет числа импульсов

Часто в управляющих программах возникает необходимость ожидания цепочки событий, представляемой последовательностью импульсных сигналов от датчиков. Рассмотрим две типовые процедуры: подсчет числа импульсов между двумя событиями и подсчет числа импульсов в заданный интервал времени.

Подсчет числа импульсов между двумя событиями. Один из возможных вариантов процедуры подсчёта может быть реализован, если использовать вход T1 как вход счетчика событий. В аккумуляторе фиксируется число импульсов, представленное в двоичном коде (максимальное количество 255).

 

MOV TMOD, #0100000B;настройка счетчика 1

MOV TH1, #0 ;сброс счетчика импульсов

WAIT0: JB P3.4, WAIT0 ;ожидание включения счёта

SETB TCON.6 ;пуск счетчика 1

WAIT1: JNB P3.4, WAIT1 ;ожидание выключения счёта

CLR TCON.6 ;останов счетчика 1

MOV A, TH1 ;(аккумулятор) число импульсов

EXIT: ... ;выход из процедуры

 

Подсчет числа импульсов за заданный промежуток времени. При решении задачи преобразования число-импульсного кода в двоичный код, а также в ряде других задач может возникнуть необходимость подсчёта числа импульсов за заданный интервал времени. Эта процедура может быть реализована различными способами:

1) программной реализацией временного интервала и программным подсчетом числа импульсов на входе;

2) программной реализацией временного интервала и аппаратным подсчетом числа импульсов (на внутреннем таймере/счетчике);

3) аппаратной реализацией временного интервала и программным подсчетом числа импульсов;

4) аппаратная реализация временного интервала с аппаратным подсчетом числа импульсов.

Четвертый способ подсчета импульсов требует использования двух счётчиков. На T/C1 можно выполнять подсчёт числа импульсов, а на T/C0 - отсчёт заданного интервала. Датчик импульсов должен быть подключен к входу T1:

 

TIME EQU NOT(10000)+1 ;определение константы TIME для

;отсчета интервала 10 мс

MOV TMOD, #0l0l0001B ;настройка T/C, 16 бит

;1 – счетчик, 0 – таймер

CLR A ;сброс аккумулятора

MOV ТН1, А ;сброс Т/С1

MOV TL1, A

MOV TH0, #HIGH(TIME) ;загрузка в Т/С0

MOV TL0, #LOW(TIME) ;константы TIME

ORL TCON, #50H ;пуск Т/С1 и Т/С0

WAIT: JBC TCON.5, EXIT ;проверка переполнения Т/С0

SJMP WAIT ;цикл, если TF=0

EXIT: MOV B, TH1 ;(B)(A) число импульсов

MOV A, TL1

... ;выход из процедуры