Режим 0
Таймер в режиме 0 аналогичен таймеру 8048. Старшая часть T/C работает как 8-разрядный делитель, младшая часть - как 5-разрядный предделитель (реализует деление на 32).
Таким образом, разрядностьT/C в этом режиме равна 13. При изменении значения со всех единиц на все нули (переполнение таймера), таймер выставляет запрос на прерывание (флаг TFn). Работа таймера разрешена если TRn = 1 и либо TnGATE = 1 либо INTn = 1 (установка TnGATE в 1 позволяет управлять таймером с помощью внешнего сигнала INTn). TRn – управляющий бит в регистре специальных функций TCON. TnGATE – бит регистра TMOD.
13-разрядный регистр состоит из 8 бит THn и младших 5 бит TLn. Старшие 3 бита TLn игнорируются. Установка TRn (флаг запуска) не очищает регистр.
Функционирование в режиме 0 идентично для T/C0 и T/C1.
Режим 1
Режим 1 аналогичен режиму 0, за исключением того, что разрядность T/C равна 16 (используются все биты THn и TLn).
Режим 2
Режим 2 программирует таймер на работу в качестве 8-разрядного счетчика (TLn) с автоматической перезагрузкой. Переполнение TLn устанавливает флаг TFn и загружает в TLn значение, находящееся в THn (значение должно быть задано программно). Значение THn при перезагрузке не изменяется. Функционирование в режиме 2 идентично для T/C0 и T/C1.
Режим 3
Таймер 1 в режиме 3 остановлен. Это соответствует установке TR1 в 0.
Таймер 0 в режиме 3 образует 2 независимых 8-битных счетчика. Для управленияTL0 используются биты, относящиеся к таймеру 0: T0C/T, T0GATE, TR0, INT0 и TF0. TH0 используется в режиме “таймер” (подсчет машинных циклов) и работает с флагами TR1 и TF1 таймера 1. Таким образом, TH0 управляет прерыванием таймера 1.
Режим 3 предназначен для использования дополнительного 8-разрядного таймера. Использование таймера 0 в режиме 3 позволяет получить 3 таймера/счетчика.
Пока таймер 0 работает в режиме 0, таймер 1 может включаться и выключаться, в зависимости от установки для него режима 3. Таймер 1 может быть также использован последовательным портом в качестве генератора с бодовой частотой, или в любом другом применении, не требующем прерывания.
Режим 6
В этом режиме соответствующий таймер может быть использован в качестве широтно-импульсного модулятора с полным периодом в 256 тактов. Структура таймера в этом режиме напоминает структуру в режиме 2, с некоторыми поправками:
- TFn (n=0 и 1 для таймера 1 и таймера 0 соответственно) устанавливается и
сбрасывается аппаратно;
- Длительность низкого уровня за полный период задается в THn, и должна
иметь значение от 1 до 254;
- Длительность высокого уровня за полный период составляет всегда 256 – THn;
- Загрузка в THn значения 00h приведет к появлению на выводе Tx высокого
уровня, загрузка в THn значения FFh приведет к появлению на выводе Tx
низкого уровня.
При этом прерывание может быть разрешено по фронту TFn, и флаг TFn можно сбросить программно также как и в любом другом режиме.
Переключение выхода при переполнении таймера
Таймеры 0 и 1 могут быть запрограммированы на автоматическое переключение выходов порта всякий раз, при переполнении таймера. ВыводыT0 и T1, используемые для подсчета внешних сигналов (в качестве входов) и для ШИМ’а (в качестве выходов), также используются для переключения выходов таймера. Эту функцию можно разрешить с помощью битов ENT0 и ENT1 регистра AUXR1, соответственно для таймера 0 и таймера 1. Выходы порта устанавливаются в единицы перед первым переполнением таймера, если данный режим включен. Для правильного функционирования в этом режиме, бит C/T должен быть сброшен, для тактирования таймера сигналами PCLK.
Таблица 4 описывает формат регистра TCON, управляющего работой T/C.
Таблица 4. Регистр управления (TCON, Timer/Counter Control register)
Бит |
Обозначение |
Назначение |
TCON.7 |
TF1 |
Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера/счетчика. Сбрасывается аппаратно после обработки прерывания, или программно (за исключением режима 6, где сброс – только аппаратный). |
TCON.6 |
TR1 |
Бит управления запуском таймера 1. Устанавливается/сбрасывается программно для включения/выключения таймера/счетчика 1. |
TCON.5 |
TF0 |
Флаг переполнения таймера 0. Устанавливается аппаратно при переполнении таймера/счетчика. Сбрасывается аппаратно после обработки прерывания, или программно (за исключением режима 6, где сброс – только аппаратный). |
TCON.4 |
TR0 |
Бит управления запуском таймера 0. Устанавливается/сбрасывается программно для включения/выключения таймера/счетчика 0. |
TCON.3 |
IE1 |
Флаг прерывания 1 по фронту. Устанавливается аппаратно при обнаружении фронта прерывания 1. Сбрасывается аппаратно после обработки прерывания или программно. |
TCON.2 |
IT1 |
Бит управления типом прерывания 1. Устанавливается/сбрасывается программно для задания чувствительности прерывания по спаду или по низкому уровню. |
TCON.1 |
IE0 |
Флаг прерывания 0 по фронту. Устанавливается аппаратно при обнаружении фронта прерывания 0. Сбрасывается аппаратно после обработки прерывания или программно. |
TCON.0 |
IT0 |
Бит управления типом прерывания 0. Устанавливается/сбрасывается программно для задания чувствительности прерывания по спаду или по низкому уровню. |
Приложение
Рисунок 1. Таймер/счетчик 0 или 1 в режиме 0 (13-разрядный счетчик)
Рисунок 2. Таймер/счетчик 0 или 1 в режиме 1 (16-разрядный счетчик)
Рисунок 3. Таймер/счетчик 0 или 1 в режиме 2 (автоперезагружаемый 8-разрядный
счетчик)
Рисунок 4. Таймер/счетчик 0 в режиме 3 (2 8-разрядных счетчика)
Рисунок 5. Таймер/счетчик 0 или 1 в режиме 6 (широтно-импульсный модулятор)