
Режим 1
В первом режиме работы таймер работает как шестнадцатиразрядный счётчик. Режим 1 похож на режим 0, за исключением того, что в регистрах таймера использует все 16 бит. В этом режиме регистры ТНх и TLx также включены друг за другом. Работе таймера 0 или таймера 1 в режиме 1 соответствует схема:
Рисунок 3. Схема таймеров 0 или 1 в режиме 1.
В этом режиме можно обеспечить формирование интервала времени длительностью до 65536 мкс при частоте задающего генератора 12 МГц.
Рассмотрим пример использования таймера T0 для формирования временного интервала 15мс.
;Настроить режим работы таймера-------------------------------------------------------------------------------------------
mov TMOD,#00000001b ;перевести таймер T0 в первый режим работы, а T1 - в нулевой
;||||||||
;||||||++-------Перевести таймер T0 в шестнадцатиразрядный режим работы
;|||||+-----------Синхронизироваться от внутреннего генератора
;||||+------------Запретить управление таймером от ножки 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 соответствует схема:
Рисунок 4. Схема таймеров 0 или 1 в режиме 2.
Работа с таймерами во втором режиме не отличается от рассмотренных ранее примеров, поэтому следующий пример инициализации таймера на генерацию частоты с периодом сто микросекунд (10кГц) приводится без комментария.
;Настроить режим работы таймера-------------------------------------------------------------------------------------------
mov TMOD, #00000010b ;перевести таймер T0 во второй режим работы, а T1 - в нулевой
;||||||||
;||||||++---Перевести таймер T0 в режим 8-ми разр. таймера с автозагрузкой
;|||||+-----Синхронизироваться от внутреннего генератора
;|||+-------Запретить управление таймером от ножки INT0
;||++-------Перевести таймер T1 в тринадцатиразрядный режим
;|+---------Синхронизироваться от внутреннего генератора
;+----------Запретить управление таймером от ножки INT1
mov TMOD,#2 ;перевести таймер T0 во второй режим работы, а T1 - в нулевой
mov TH0, #-50 ;Загрузить старший байт таймера
mov TL0, #-50 ;Загрузить младший байт таймера
OjidanTimer:
jnb TF0, OjidanTimer ;Подождать пока не переполнится таймер
cpl P2.6 ;Проинвертировать сигнал на шестой ножке второго порта и
sjmp OjidanTimer ;снова перейти к ожиданию окончания временного интервала