Для формирования последовательности одинаковых интервалов времени используется режим работы таймера с перезагрузкой — режим 2.
Режим 2
В режиме 2 регистр таймера TL0 работает как 8-битный суммирующий счетчик с автоматической перезагрузкой начального значения из регистра ТН0. Переполнение счетчика TL0 не только устанавливает флаг TF0, но и снова загружает регистр TL0 содержимым ТН0. Перезагрузка таймера не изменяет содержимое регистра ТН0.
Для задания периода временных интервалов в регистр ТН0 записывается отрицательное число. Работе таймера 0 или таймера 1 в режиме 2 соответствует схема, приведенная на рис. 6.16. При этом первый период колебания будет произвольным, но в большинстве случаев это не важно. Если же первый период колебания важен, то кроме регистра ТН0 необходимо программно устанавливать значение регистра ТН1.
Рис. 6.16.
Ниже приведен пример инициализации таймера в режиме 2 для генерации прямоугольного колебания с частотой 10 кГц (период 100 мкс) и скважностью 2.
;Настроить таймер на генерацию 50-микросекундного интервала времени-
MOV ТН0, #-50 ;Загрузить константу в старший байт таймера
MOV TL0, #-50 ;Загрузить константу в младший байт таймера
OjidanTimer:
JNB TF0, OjidanTimer ;Подождать пока не переполнится таймер
CPL P2.6 ;Проинвертировать сигнал на выводе 6 порта Р2
SJMP OjidanTimer ;Снова перейти к ожиданию окончания временного интервала
Режим 3
Таймер 1 при работе в режиме 3 просто хранит свое значение. Эффект такой же, как при сбросе бита TR1. Таймер 0 в режиме 3 представляет собой два раздельных 8-битных счетчика (регистры TL0 и ТН0). Регистр TL0 использует биты управления таймера 0: С/Т0, GATE0, TR0 и TF0.
Регистр ТН0 работает тоже в режиме отдельного таймера и использует биты TR1 и TF1 таймера 1. Логика работы таймера 0 в режиме 3 показана на схеме, приведенной на рис. 6.17.
Рис. 6.17.
Работа таймера TL0 разрешена, если бит TR0 = 1, а таймера ТН0 — если бит TR1 = 1. Таймер 1 при работе таймера 0 в режиме 3 постоянно включен, т. к. он обычно при этом используется для синхронизации последовательного порта и работает в первом или втором режимах работы. Этот режим работы позволяет реализовать два независимых таймера, если таймер 1 используется для работы последовательного порта. Но надо сказать, что на практике, особенно после появления таймера 2 в ядре MCS-52, режим 3 мало интересен.
Схема управления таймерами 0 и 1 идентична и для таймера Т0 приведена на рис. 6.18. Для схемы управления таймером Т1 изменятся только номера управляющих битов (в их наименованиях 0 будет заменен на 1). В приведенной схеме заштрихованным прямоугольником обозначены внешние выводы микросхемы микроконтроллера.
Рис. 6.18.
Из схемы видно, что таймер может включаться и выключаться битами TRx. Таким образом, можно уменьшать ток потребления микросхемы и уровень помех, создаваемый ею. Счетчики таймеров переключаются на высокой частоте, поэтому они могут потреблять до половины от общего тока потребления микроконтроллера. Следует отметить, что при включении и после сброса микроконтроллера работа таймеров запрещена.
Есть возможность управлять работой таймера извне при помощи внешнего вывода Т0 — для таймера Т0 или T1 — для таймера T1. Чтобы разрешить передачу сигнала Тх, необходимо записать в бит GATEx логическую единицу (не забыв при этом разрешить работу таймера при помощи бита TRx).
Кроме того, таймер может работать от внешнего генератора. Для этого в бит управления С/Т нужно записать логическую единицу.
Биты включения таймеров TR0 и TR1 размещены в регистре управления таймерами TCON, а биты GATE и С/Т — в регистре режима таймеров TMOD. Название регистра TCON образовалось при соединении двух слов: Timer — таймер и CONtrol — управлять. Формат регистра TCON рассматривался ранее, а формат регистра TCON и описание его отдельных битов приведен на рис. 6.19.