В базовых моделях семейства имеются два программируемых 16-битных таймера/счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий. Каждый из них состоит из двух 8-битных регистров TH0 (старший байт) и TH0 (младший байт) для таймера 0 или TH1 (старший байт) и TH1 (младший байт) для таймера 1.
В режиме таймера содержимое соответствующего таймера/счетчика инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов колебаний кварцевого резонатора.
В режиме счетчика содержимое соответствующего таймера/счетчика инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на вывод микроконтроллера T0 или T1. Так как на распознавание периода требуются два машинных цикла, максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. На длительность периода входных сигналов ограничений сверху нет. Для гарантированного прочтения входной сигнал должен удерживать значение 1, как минимум, в течение одного машинного цикла микро-ЭВМ.
Таймер 0 и Таймер 1 могут работать в четырех режимах работы:
режим 0: 13-битный таймер
режим 1: 16-битный таймер
режим 2: 8-битный автоперезагружаемый таймер
режим 3: Таймер 0 как 2 раздельных 8-битных таймера.
Кроме того, Таймер 1 можно использовать для задания скорости передачи (baud rate) последовательного порта.
Для переключения режимов работы таймеров используются биты M0 и M1 регистра специальной функции TMOD. Название образовано от сокращения двух английских слов: T(timer)- таймер и mode - режим. Имена и расположение битов приведено на рисунке 1:
Рисунок 1. Формат регистра управления режимами работы таймеров TMOD.
Так как управление таймерами 0 и 1 полностью идентично, то приведЈм назначение битов по именам:
Символ Позиция бита Имя и назначение
GATE TMOD.7 для таймера 1 и TMOD.3 для таймера 0
Управление блокировкой таймера от ножки INTx. Если бит установлен в 1, то таймер/счетчик "x" разрешен до тех пор, пока на входе "lNTx" высокий уровень и бит управления "TRx" установлен. Если бит сброшен в 0, то Т/С разрешается, как только бит управления "TRx" устанавливается в 1.
С/Т TMOD.6 для таймера 1 и TMOD.2 для таймера 0
Бит выбора режима таймера или счетчика событий. Если бит сброшен в 0, то таймер работает от внутреннего генератора, если установлен в 1, то работает от внешних сигналов на входе "Tx"
M1 TMOD.5 для таймера 1 и TMOD.1 для таймера 0 Выбор режима работы таймера
M1 M0
0 0
13 битный таймер/счетчик "TLx" работает как 5-битный предварительный делитель
0 1
16 битный таймер/счетчик. "THx" и "TLx" включены последовательно
1 0
8-битный автоперезагружаемый таймер/счетчик. "THx" хранит значение, которое должно быть перезагружено в "TLx" каждый раз по переполнению
1 1
Таймер/счетчик 1 останавливается. Таймер/счетчик 0: TL0 работает как 8-битный таймер/счетчик, и его режим определяется управляющими битами таймера 0. TH0 работает только как 8 битный таймер, и его режим определяется управляющими битами таймера 1
M0 TMOD.4 для Т/С1 и TMOD.0 для Т/С0
Режим 0
В нулевом режиме таймер работает как 13-битный суммирующий счЈтчик. Этот счЈтчик состоит из 8 бит регистра ТНх и младших 5 бит регистра TLx, где x в обозначении регистра заменяется на 0 или 1 в зависимости от того таймера, которым мы управляем. Старшие 3 бита регистров TLx не определены и игнорируются. Установка запускающего таймер флага TR0 или TR1 не очищает эти регистры. Работе таймера 0 или таймера 1 в режиме 0 соответствует схема:
Рисунок 2. Схема таймеров 0 или 1 в режиме 0.
Этот режим был введЈн для совместимости с устаревшим семейством микроконтроллеров MCS-48 для облегчения переноса уже разработанных программ на новые процессоры и поэтому в настоящее время не используется. Тем не менее, в этом режиме можно обеспечить формирование интервала времени длительностью до 8096 мс при частоте задающего генератора 12 МГц.
Когда содержимое счетчика изменяется из состояния все "1" в состояние все "0" , то устанавливается (принимает значение "1") флаг прерывания таймера TF0 или TF1.
Обычно пользователя интересует не максимальный интервал времени, а свой конкретный интервал времени. Для уменьшения интервала времени в регистры таймера можно предварительно занести число и тем самым сформировать произвольный интервал времени. Рассмотрим пример подготовки таймера T0 для формирования временного интервала 5мс.
;Настроить режим работы таймера-------------------------------------------------------------------------------------------
mov TMOD,#00000000b ;настроить таймеры T0 и T1 на нулевой режим работы