Запретить управление таймером от ножки INT0
;||++-------------Перевести таймер T1 в тринадцатиразрядный режим
;|+----------------Синхронизироваться от внутреннего генератора
;+-----------------Запретить управление таймером от ножки INT1
;Настроить таймер на генерацию 15-ти миллисекундного интервала времени------------------------------------
mov TH0, #HIGH(-15000) ;Загрузить старший байт таймера
mov TL0, #LOW(-15000) ;Загрузить младший байт таймера
OjidanTimer:
jnb TF0, OjidanTimer ;Подождать пока не переполнится таймер
В рассмотренном примере переполнение таймера произойдЈт через 15000 циклов процессора, то есть через 15 мс. Программа будет постоянно проверять состояние флага переполнения таймера и как только он установится в единицу перейдЈт к выполнению следующей команды.
Нулевой и первый режимы работы таймеров T0 и T1 предназначены для формирования одиночного интервала времени. Если возникает необходимость формировать последовательность интервалов времени для периодических процессов, то загрузка регистров TH0 и TL0 для задания нужного интервала времени производится программно, что для коротких интервалов времени может привести к значительным затратам процессорного времени.
Для формирования последовательности одинаковых интервалов времени используется режим работы таймера с перезагрузкой - режим 2.
Режим 2
В режиме 2 регистр таймера TLx работает как 8-битный счетчик с автоматической перезагрузкой начального значения из регистра ТНх в регистр TLx. Переполнение регистра TLx не только устанавливает флаг TFx, но и загружает регистр TLx содержимым регистра ТНх, который предварительно инициализируется программно. Перезагрузка не изменяет содержимое регистра ТНх. Работе таймера 0 или таймера 1 в режиме 2 соответствует схема:
Работа с таймерами во втором режиме не отличается от рассмотренных ранее примеров, поэтому следующий пример инициализации таймера приводится без комментария.
mov TMOD,#2 ;перевести таймер T0 во второй режим работы, а T1 - в нулевой
mov TH0, #-5000/256 ;Загрузить старший байт таймера
mov TL0, #-(5000-5000/256) ;Загрузить младший байт таймера
Режим 3
Таймер 1 при работе в режиме 3 просто хранит свое значение. Эффект такой же как при сбросе бита TR1.
Таймер 0 в режиме 3 представляет собой два раздельных 8 битных счетчика (регистры TL0 и ТН0), Регистр TL0 использует биты управления таймера 0: С/Т0. GATE0, TR0 и TF0. Регистр ТН0 работает только в режиме таймера и использует биты TR1 и TF1 таймера 1. Таким образом, регистр ТН0 управляет прерыванием таймера 1. Логика работы таймера 0 в режиме 3 показана на схеме:
Работа таймера TL0 разрешается, если бит TR0 = 1, а таймера TH0 - если бит TR1 = 1. Таймер 1 при работе таймера 0 в режиме 3 постоянно включен.
Этот режим работы позволяет реализовать два независимых таймера, если таймер 1 используется для работы последовательного порта, но надо сказать, что на практике мало интересен.
Управление таймерами-счЈтчиками.
Схема управления таймерами 0 и 1 идентична и приведена на рисунке:
Из схемы видно, что таймер может включаться и выключаться битами TRx. Есть возможность управлять работой таймера извне при помощи внешней ножки T0 для таймера T0 или T1 для таймера T1. Для этого необходимо записать в бит GATEx логическую единицу (не забыв при этом разрешить работу таймера при помощи бита TRx).
Кроме того таймер может синхронизироваться от внешнего генератора. Для этого в бит управления C/T нужно записать логическую единицу.
Биты включения таймеров TR0 и TR1 размещены в регистре TCON (control - управлять), а биты GATE и C/T в регистре TMOD. Формат регистра TCON приведЈн на следующем рисунке:
Рисунок 1. Формат регистра управления режимами работы таймеров TCON.
Символ Позиция Имя и назначение
TF1 TCON.7
Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера/счетчика. Сбрасывается при обслуживании прерывания аппаратно
TR1 TCON.6
Бит управления таймера 1. Устанавливается/сбрасывается программой для пуска/останова
TF0 TCON.5
Флаг переполнения таймера 0. Устанавливается аппаратурно. Сбрасывается при обслуживании прерывания
TR0 TCON.4
Бит управления таймера 0. Устанавливается / сбрасывается программой для пуска/останова таймера/счетчика
IE1 TCON.3
Флаг фронта прерывания 1. Устанавливается аппаратно, когда детектируется срез внешнего сигнала INT1. Сбрасывается при обслуживании прерывания
IT1 TCON.2
Бит управления типом прерывания 1. Устанавливается / сбрасывается программно для определения типа запроса прерывания INT1 (срезу/низким уровнем).
IE0 TCON.1
Флаг фронта прерывания 0. Устанавливается по срезу сигнала INT0. Сбрасывается при обслуживании прерывания
IT1 TCON .0
Бит управления типом прерывания 0. Устанавливается / сбрасывается программно для определения типа запроса прерывания INT0 (срез/низкий уровень)
Схема управления таймерами интересна тем, что позволяет использовать таймеры в качестве измерительных приборов.
Использование таймера в качестве измерителя ширины импульсов.
Известно, что измерение длительности импульса можно произвести, подсчитав импульсы эталонной частоты. Принцип измерения длительности импульсов иллюстрируется рисунком 8.
Для измерения длительности импульса измеряемый сигнал подаЈтся на вывод микроконтроллера INTx и в бит управления GATE записывается разрешающий сигнал логической единицы. Таймер/счЈтчик настраивается в режим таймера записью в бит C/Tx логического нуля. Содержимое таймера обнуляется.
Пример программы измерения длительности импульса приведЈн на рисунке 9.
Рисунок 8. Принцип измерения длительности импульсов
mov TMOD,#00001001b
;