Микроконтроллеры типа 8051 АН имеют два 16-разрядных таймера-счетчика, Таймер 0 и Таймер 1. Каждый из них независимо может быть запрограммирован на работу в качестве либо таймера (отсчет времени через подсчет внутренних импульсов синхронизации), либо счетчика (подсчет событий на внешнем входе). В обоих случаях переход через заранее установленный рубеж приводит к формированию запроса прерывания.
Выбор режима работы каждого из таймеров производится битами С/Тх# (х = 0,1) регистра TMOD. Подсчет событий производится посредством инкремента программно доступного регистра данных, который состоит из регистра младшего байта TLx и регистра старшего байта ТНх.
При работе в режиме таймера (С/Тх# = 0) регистр TLx наращивается в каждом машинном цикле и частота счета равна Fosc/12.
В режиме счетчика (С/Тх#=1) регистр TLx наращивается при переходе сигнала на входе Тх из «1» в «0». Входы опрашиваются во время фазы S5P2 каждого машинного цикла. При обнаружении высокого уровня сигнала в одном цикле и низкого уровня в следующем цикле счетчик инкрементируется. Новое значение в регистре появляется во время фазы S3P1 цикла, следующего за тем, в котором был обнаружен переход.
|
|
Поскольку на распознавание перехода уходит два машинных цикла, максимальная частота счета составляет Fosc/24. Ограничений на скважность входного сигнала нет, но для уверенной фиксации перепада сигнал должен удерживаться в каждом значении по крайней мере один машинный цикл.
Счетчики/таймеры обслуживаются регистром режима TMOD и регистром управления TCON.
GATE1 | С/Т1# | M1.1 | M1.0 | GATE0 | С/Т0# | M0.1 | М0.0 |
TMOD
Имя бита | Номер бита | Функция |
GATE1 | TMOD.7 | Бит управления Таймером 1. При GATE1 = 1 Таймер 1 работает всегда при TR1 = 1. При GATE1 = 0 для работы необходимо условие TR1 = 1 и INT1# = 1. |
С/Т1# | TMOD.6 | Бит выбора типа событий для Таймера 1. При С/Т1# = 1 он работает как счетчик, при С/Т1# = 0 как таймер. |
M1.1 | TMOD.5 | Бит 1 определения режима работы Таймера 1. |
M1.0 | TMOD.4 | Бит 0 определения режима работы Таймера 1. |
GATE0 | TMOD.3 | Бит управления Таймером 0. При GATE0=1 Таймер 0 работает всегда при TR0=1. При GATE0=0 для работы необходимо условие TR0=1 и INT0# = 1. |
С/Т0# | TMOD.2 | Бит выбора типа событий для Таймера 0. При С/Т0# = 1 он работает как счетчик, при С/Т0# = 0 как таймер. |
M0.1 | TMOD.1 | Бит 1 определения режима работы Таймера 0 |
М0.0 | TMOD.0 | Бит 0 определения режима работы Таймера 0 |
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TCON
Имя бита | Номер бита | Функция |
TF1 | TCON.7 | Флаг переполнения Таймера 1. Устанавливается при переходе счетного регистра таймера из состояния FFH в состояние 00Н. Очищается при передаче управления на процедуру обработки прерывания |
TR1 | TCON.6 | Бит запуска Таймера 1. При TR1 = 1 счет разрешен |
TF0 | TCON.5 | Флаг переполнения Таймера 0. Устанавливается при переходе счетного регистра таймера из состояния FFH в состояние 00Н. Очищается при передаче управления на процедуру обработки прерывания |
TR0 | TCON.4 | Бит запуска Таймера 0. При TR0 = 1 счет разрешен |
IE1 | TCON.3 | Флаг запроса прерывания по входуINT1# |
IT1 | TCON.2 | Бит селектора типа активного сигнала на входе INT1#. При IT1 = 1 активным является переход «1»-»0», при IT1 = 0 активным является низкий уровень сигнала |
IE0 | TCON.1 | Флаг запроса прерывания по входу INT0# |
IT0 | TCON.0 | Бит селектора типа активного сигнала на входе INT0#. При IT0 = 1 активным является переход «1»-«0», при IT0 = 0 активным является низкий уровень сигнала |
Биты M1 и М0 следующим образом определяют режимы работы таймеров/ счетчиков:
|
|
М1 | М0 | Режим работы | |
Режим 0 | ТНх как 8-разрядный таймер/счетчик. TLx как 5-разрядный предделитель | ||
Режим 1 | 16-разрядный таймер/счетчик. ТНх и TLx включены последовательно | ||
Режим 2 | 8-разрядный таймер/счетчик TLx с автоперезагрузкой значением из ТНх | ||
Режим 3 | TL0 как 8-разрядный таймер/счетчик, управляемый битами управления Таймера 0. ТН0 как 8-разрядный таймер/ счетчик, управляемый битами управления Таймера 1. Таймер 1 не работает |
Выбор типа подсчитываемых событий для Таймера 0 и Таймера 1, т.е. назначение им функции таймера или счетчика, определяется значением бита управления С/Тх# регистра TMOD. Таймеры способны работать в трех режимах, выбор режима для каждого таймера производится комбинацией битов Мх.1, Мх.0 того же регистра.
Счет разрешается битом TRx, если бит GATEx = 0. Когда счетное значение переходит из состояния все «1» в состояние все «0», устанавливается флаг запроса прерывания TFx. Установка бита GATEx = 1 дает возможность управлять таймером от входа INTx# и измерять таким образом ширину импульсов. Установка битов запуска не очищает счетные регистры.
Режим 0. В этом режиме имеет место 13-разрядный счетный регистр, в котором регистр ТНх работает как 8-разрядный счетчик, а регистр TLx используется как 5-битный предделитель (рис. 3.12а).
Режим 1. Этот режим аналогичен режиму 0, но используются все 16 разрядов регистров ТНх и TLx (рис. 3.126).
Режим 2. В этом режиме регистр TLx работает как 8-разрядный счетный регистр. После переполнения он автоматически перезагружается значением из регистраТНх, который при этом своего предварительно запрограммированного значения не теряет (рис. 3.12в).
Режим 3. Таймер 1 в этом режиме блокирован, как если бы битTR1 был сброшен. Таймер 0 в режиме 3 работает как два независимых счетных регистра, причем регистр TL0 управляется битами управления Таймера 0, а регистр ТН0 управляется битами управления Таймера 1 (рис. 3.12г).
Рис. 3.12 - Работа счетчиков/таймеров:
в режиме 0 (а), режиме 1 (б), режиме 2 (в) и режиме 3 (г)