Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Таймеры.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
48.25 Кб
Скачать

Использование таймера в качестве измерителя ширины импульсов.

Известно, что измерение длительности импульса можно произвести, подсчитав импульсы эталонной частоты. Принцип измерения длительности импульсов иллюстрируется рисунком 8.

Для измерения длительности импульса измеряемый сигнал подаётся на вывод микроконтроллера INTx и в бит управления GATE записывается разрешающий сигнал логической единицы. Таймер/счётчик настраивается в режим таймера записью в бит C/Tx логического нуля. Содержимое таймера обнуляется.

Пример программы измерения длительности импульса приведён на рисунке 9.

Рисунок 8. Принцип измерения длительности импульсов

mov TMOD,#00001001b

;||||||||

;||||||++--Перевести таймер T0 в шестнадцатиразрядный режим

;|||||+----Синхронизироваться от внутреннего генератора

;||||+-----Включать таймер от ножки микроконтроллера INT0

;||++------Перевести таймер T1 в тринадцатиразрядный режим

;|+--------Синхронизироваться от внутреннего генератора

;+---------Запретить управление таймером от ножки INT1

mov TH0, #0 ;Обнулить старший байт таймера

mov TL0, #0 ;Обнулить младший байт таймера

setb TR0 ;Включить измеритель ширины импульса

TstLog0: jnb INT0, TstLog0 ;Подождать начало импульса

TstLog1: jb INT0, TstLog1 ;Подождать конец импульса

Clr TR0 ;Отключить измеритель ширины импульса

Рисунок 9. Программа измерения длительности импульсов

Если теперь на вход микроконтроллера INT0 подать импульс с неизвестной длительностью, то в регистрах TH0 и TL0 будет записана его длительность в микросекундах.

Использование таймера в качестве частотомера.

Известно, что измерение частоты можно произвести, подсчитав количество периодов неизвестной частоты за единицу времени. Принцип измерения частоты иллюстрируется рисунком 10.

Рисунок 10. Принцип измерения частоты

Для измерения частоты измеряемый сигнал подаётся на вывод микроконтроллера Tx. Таймер/счётчик настраивается в режим счётчика записью в бит C/Tx логической единицы. Содержимое таймера обнуляется. Таймер включается на строго определённый интервал времени. Этот интервал задаётся оставшимся таймером.

Пример программы измерения частоты сигнала на ножке микроконтроллера T0 приведён на рисунке 11.

mov TMOD,#00010101b

;||||||||

;||||||++-------Перевести таймер T0 в шестнадцатиразрядный режим

;|||||+---------Работать от сигнала на ножке T0

;||||+----------Запретить управление таймером от ножки INT0

;||++-----------Перевести таймер T1 в шестнадцатиразрядный режим

;|+-------------Синхронизироваться от внутреннего генератора

;+--------------Запретить управление таймером от ножки INT1

mov TH0, #0 ;Обнулить старший байт счётчика

mov TL0, #0 ;Обнулить младший байт счётчика

;---измерение вести 1 мс---------------------------------------------------------

mov TH1, #HIGH(-1000) ;Загрузить старший байт таймера

mov TL1, #LOW(-1000) ;Загрузить младший байт таймера

mov TCON,#01010000b ;Включить частотомер

;||||||||

;|||||||+-------Прерывание от ножки INT1возникает по фронту

;||||||+--------Сбросить запрос прерывания от ножки INT1

;|||||+---------Прерывание от ножки INT1возникает по фронту

;||||+----------Сбросить запрос прерывания от ножки INT1

;|||+-----------Включить таймер T0

;||+------------Обнулить флаг таймера T0

;|+-------------Включить таймер T1

;+--------------Обнулить флаг таймера T1

TstTimeOut:

jnb TF1, TstTimeOut ;Если 1 мс прошла

mov TCON, #00000000b ;то отключить частотомер

;||||||||

;|||||||+-------Прерывание от ножки INT1 возникает по фронту

;||||||+--------Сбросить запрос прерывания от ножки INT1

;|||||+---------Прерывание от ножки INT1возникает по фронту

;||||+----------Сбросить запрос прерывания от ножки INT1

;|||+-----------Отключить таймер T0

;||+------------Обнулить флаг таймера T0

;|+-------------Отключить таймер T1

;+--------------Обнулить флаг таймера T1

Рисунок 11. Программа измерения частоты

Если теперь на вход микроконтроллера T0 подать сигнал с неизвестной частотой, то в регистрах TH0 и TL0 будет записана его частота в килогерцах.

Режим 1. Полный текст программы задержки в 1 мс:

; This program multiplexes the number 1234

; on the four 7-segment displays.

; Note: a logic 0 lights a display segment.

start:

SETB P3.3 ; |

SETB P3.4 ; | enable display 3

MOV P1, #01000000B ; put pattern for 1 on display

MOV R0, 11

CALL delay

CLR P3.3 ; enable display 2

MOV P1, #10010000B ; put pattern for 2 on display

MOV R0, 11

CALL delay

CLR P3.4 ; |

SETB P3.3 ; | enable display 1

MOV P1, #10000000B ; put pattern for 3 on display

MOV R0, 11

CALL delay

CLR P3.3 ; enable display 0

MOV P1, #11111000B ; put pattern for 4 on display

MOV R0, 11

CALL delay

JMP start ; jump back to start

; a crude delay

delay:

mov Tmod, #00000010b;

MOV TH0, #03Ch

MOV TL0, #0AFh

setB TR0

jnb tf0, $;

DJNZ R0, delay;

RET