Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных