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

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

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

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


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



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