Часто в управляющих программах возникает необходимость ожидания цепочки событий, представляемой последовательностью импульсных сигналов от датчиков. Рассмотрим две типовые процедуры: подсчет числа импульсов между двумя событиями и подсчет числа импульсов в заданный интервал времени.
Подсчет числа импульсов между двумя событиями. Один из возможных вариантов процедуры подсчёта может быть реализован, если использовать вход 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
...;выход из процедуры