Главная
Популярная публикация
Научная публикация
Случайная публикация
Обратная связь
ТОР 5 статей:
Методические подходы к анализу финансового состояния предприятия
Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века
Ценовые и неценовые факторы
Характеристика шлифовальных кругов и ее маркировка
Служебные части речи. Предлог. Союз. Частицы
КАТЕГОРИИ:
|
Подсчет числа импульсов за заданный промежуток времени
При решении задачи преобразования числоимпульсного кода в двоичный код, а также в ряде других задач может потребоваться подсчёт числа импульсов N за заданный интервал времени (t1, t2) (рисунок 4.8).
Рисунок 4.8 – Иллюстрация к задаче подсчета числа импульсов за заданный промежуток времени
Эта процедура может быть реализована четырьмя различными способами:
- программной реализацией временного интервала и программным подсчетом числа импульсов на входе МК;
- программной реализацией временного интервала и аппаратным подсчетом числа импульсов (на внутреннем таймере-счетчике);
- аппаратной реализацией временного интервала и программным подсчетом числа импульсов;
- аппаратной реализацией временного интервала с аппаратным подсчетом числа импульсов.
Первый способ неэффективен и значительно сложнее других, а потому не рассматривается.
При аппаратной реализации подсчета числа событий импульсный датчик должен быть подключен ко входу одного из таймеров (в приведённом примере программы (листинг 4.10) используется вход T1).
Листинг 4.10 – Программа подсчёта числа импульсов за заданный промежуток времени с использованием аппаратного счётчика импульсов
| .ORG 0000h
JMP BEGIN
| ; Адрес начала программы
; Переход к основной части
; программы
| BEGIN
| SETB T1
MOV IE, #00h
MOV TMOD, #50h
MOV TL1, #00h
MOV TH1, #00h
SETB TR1
CALL DELAY
CLR TR1
…
| ; Инициализация входа T1 на
; ввод сигнала
; Запрет всех прерываний
; Настройка таймера T/C1
; на счёт внешних событий
; Очистка регистров
; счётчика
; Разрешение счёта
; Вызов процедуры,
; реализующей временную
; задержку
; Остановка счёта
| Подсчет импульсов производится счетчиком событий, а отсчет заданного временного интервала – процедурой DELAY (см. листинг 4.7). Результат сохраняется в регистровой паре TH1:TH0.
При аппаратной реализации отсчета временного интервала используется один из таймеров микроконтроллера. Счёт импульсов реализуется программно (листинг 4.11):
Листинг 4.11 – Программа подсчёта числа импульсов за заданный промежуток времени с использованием аппаратного счётчика времени
T:
N:
F:
ST:
| .EQU 0.025
.EQU 40
.EQU 24000000
.EQU 65536-T*F/12
| ; Требуемый интервал
; времени от
; момента запуска таймера; до его переполнения
; Необходимое количество
; прерываний от таймера
; Величина T*N – время
; счёта
;Частота кварцевого
; резонатора (24 МГц),
; подключаемого к
; микроконтроллеру
; Число загружаемое в
; регистровую пару TH0:TL0
|
| .ORG 0000h
JMP BEGIN
.ORG 000Bh
JMP TIMER
| ; Адрес начала программы
; Переход к основной
; программе
; Адрес обработчика
; прерываний от таймера
;Переход к процедуре
; обработки прерывания
| BEGIN:
C1:
C2:
STOP:
| MOV IE, #00h
SETB T1
MOV R0, #00h
MOV A, #N
MOV TMOD, #01h
MOV TL0, #<ST
MOV TH0, #>ST
MOV IE, #82h
SETB TR0
JNB TR0, STOP
JB T1, C1
INC R0
JNB TR0, STOP
JNB T1, C2
JMP C1
…
| ; Запрет всех прерываний
; Инициализация входа T1 на
; ввод сигнала
;Обнуление счётчика
; импульсов
; Загрузка счётчика
; прерываний от таймера
; Настройка таймера T/C0
; на счёт по модулю 16
; внутренней частоты
; Загрузка таймера
; Разрешение прерывания,
; генерируемого таймером
; Разрешение счёта
; Проверка флага
; разрешения счёта таймера
; Ожидание заднего фронта
; одного из подсчитываемых
; импульсов
; Увеличение счётчика
; импульсов
; Проверка флага
; разрешения счёта таймера
; Ожидание переднего
; фронта одного из
; подсчитываемых
; импульсов
; Переход к циклу ожидания
; следующего импульса
; Выход из процедуры
| ; После выхода из процедуры результат будет сохранён в
; регистре R0
| ; Обработчик прерываний, генерируемых таймер-счетчиком T/C0
| TIMER:
TEXIT:
| MOV TL0, #<ST
MOV TH0, #>ST
DJNZ A, TEXIT
CLR TR0
MOV IE, #00h
RETI
| ; Загрузка таймера
;
; Декрементирование
; счётчика прерываний
; и переход на метку TEXIT,
; если A ¹ 0
; Сброс флага разрешения
; счета
; Запрет прерываний
; Выход из прерывания
|
В приведённой программе время счёта (t2 – t1) составляет 1 секунду. Значения T и N выбирались из следующих соображений: для отсчёта 1 с необходимо, чтобы произведение Т×N=1. При частоте кварцевого резонатора 24 МГц таймер ведет счет импульсов внутреннего генератора, частота которых 2 МГц. Время отсчёта 65536 периодов внутреннего генератора составляет:
(с).
Целого числа, умножение которого на 0,032768 составит 1, не существует, поэтому из интервала выбирается максимальное число, умножение которого на целое число составит 1. Очевидно, что одним из вариантов будет комбинация: T = 0,025, N=40.
Четвертый способ подсчета числа импульсов может быть реализован двумя способами:
– с использованием двух таймеров-счётчиков (один для генерации интервала времени, другой – для счёта внешних импульсов);
– с использованием таймера-счётчика (для генерации интервала времени) и контроллера прерываний (для регистрации импульсов). При использовании этого способа подсчитываемые импульсы должны подаваться на один из входов контроллера прерываний, INT0 или INT1.
Первый способ позволяет полностью «разгрузить» процессор микроконтроллера. Этот способ является сочетанием двух предыдущих (листинг 4.10 и 4.11).
Второй способ аппаратной регистрации импульсов представлен листингом 4.12.
Листинг 4.12 – Программа подсчёта импульсов за заданный интервал времени с использованием внутреннего контроллера прерываний
T:
N:
F:
ST:
| .EQU 0.025
.EQU 40
.EQU 24000000
.EQU 65536-T*F/12
| ; Интервал времени от
; момента запуска таймера; до его переполнения
; Необходимое количество
; прерываний от таймера
; Величина T*N – время
; счёта
;Частота кварцевого
; резонатора (24 МГц),
; подключаемого к
; микроконтроллеру
; Число, загружаемое в
; регистровую пару TH0:TL0
|
| .ORG 0000h
JMP BEGIN
.ORG 0003h
INC DPTR
RETI
.ORG 000Bh
JMP TIMER
| ; Адрес начала программы
; Переход к основной
; программе
; Адрес обработчика
; прерываний по входу INT0
; Увеличение счётчика
; импульсов
; Выход из обработчика
; Адрес обработчика
; прерываний от таймера
;Переход к процедуре
; обработки прерывания
| BEGIN:
| MOV IE, #00h
SETB INT0
MOV DPTR, #0000h
MOV A, #N
MOV TMOD, #01h
MOV TL0, #<ST
MOV TH0, #>ST
SETB TR0
MOV TCON, #01h
MOV IE, #83h
JB TR0, $
…
| ; Запрет всех прерываний
; Инициализация входа INT0
; на ввод сигнала
;Обнуление счётчика
; импульсов
; Загрузка счётчика
; прерываний от таймера
; Настройка таймера T/C0
; на счёт по модулю 16
; внутренней частоты
;Загрузка регистров
; счётчика
; Разрешение счёта
; Настройка контроллера
; прерываний на режим
; срабатывания по спаду
; сигнала на входе INT0
; Разрешение прерываний,
; генерируемых таймером и
; внешним источником
; Проверка флага
; разрешения счёта таймера
; Выход из подпрограммы
; счета
| ; Обработчик прерываний, генерируемых таймером-счетчиком T/C0
; приведен в листинг 4.11
|
В данной программе счетчик внешних импульсов представлен регистром DPTR. Подсчитываемые импульсы должны подаваться на вход INT0.
Не нашли, что искали? Воспользуйтесь поиском:
|