II
"РЛ" - НАЧИНАЮ Щ ИМ
И
которые иной раз еще больше запутывают, например “За-
нести значение в таймер” обозначает "занести значение в
счетчик таймера”, а “включить режим 2 таймера” обозна-
чаетименно второй режим работы таймера, как устройства
(частью которого является счетчик). Увы, ничего поделать
тут нельзя - так принято.
..
Знакомство с любым периферийным устройством обыч-
но начинают с его функциональной схемы, однако из-за того,
что все три таймера многофункциональные, придется изме-
нить этой традиции, так как в различных режимах работы
таймеры имеют разные функциональные схемы, кроме того,
все они немного отличаются друг от друга своими возмож-
ностями. Поэтому сначала рассмотрим общие для всех тай-
меров моменты, а затем по порядку рассмотрим все режи-
мы каждого из них.
В зависимости от того, счет каких импульсов ведется,
таймеры работают либо в режиме
счета внешних сигналов,
либо в режиме
счета машинных циклов
(т.е. его значение
изменяется каждый машинный цикл). Принято режимы сче-
та внешних сигналов называть режимами
счетчика,
а внут-
ренних - режимами
таймера
(счета времени). Счет обычно
ведется на
увеличение.
Когда значение счетчика достигнет
максимально возможного (для разных режимов значения раз-
ные), то в момент поступления следующего счетного собы-
тия счетчик
переполняется
(фактически - обнуляется) и ус-
танавливается специальный флаг - признак переполнения
счетчика, а счет тем временем продолжается. Этот флаг мо-
жет служить источником запроса прерывания от таймера.
Для флагов переполнения используются обозначения
TFx,
где
“х”
- номер соответствующего таймера.
Небольшое отступление.
Таймеры, как и вообще все в
мире программирования, нумеруются с нуля, т.е. первый тай-
мер на самом деле нулевой
©.
Чтобы легче ориентировать-
ся в счете, условимся обозначать каждый таймер англоязыч-
ным термином в комплекте с его номером, т.е. так:
TimerO,
Tim er1
и
Timer2.
Для управления TimerO и Timerl используется регистр
TCON,
а режимы работы задаются регистром
TMOD.
Для
аналогичных целей Timer2 использует отдельные регистры
T2CON
и
T2MOD.
TimerO может работать в одном из четырех режимов:
Режим
0 - счет по модулю 8192.
Режим 1
- 16-битный счет.
Режим
2-8-битный счетчик с автоперезагрузкой содер-
жимого.
Режим 3 -2 независимых 8-битных счетчика.
В режиме 0 переполнение счетчика наступает после
достижения значения 8192, т.е. счетчик фактически функци-
онирует как 13-разрядный. Интересной особенностью этого
режима является то, что ТНО используется целиком (все 8
бит), a TL0 - частично (младшие 5 бит), что немного странно
(ведь обычно принято уменьшать разрядность за счет битов
старшего байта, а не младшего). Этот режим - дань совме-
стимости с ныне забытым микроконтроллером Intel 8048.
Таблица
19. Регистр TCON
Разряд
7
6
5
4
3
2
1
0
флаг
TF1
TR1
TF0
TR0
IE1
IT1
1Е0
1Т0
Честно говоря, я в своей практике никогда этим режимом не
пользуюсь ©.
Режим 1 - основной (для меня, по крайней мере ©). Пе-
реполнение счетчика наступает после достижения значения
65535 (OFFFFh).
Режим 2 - очень интересный. В этом режиме считает
толь-
ко младший байт
счетчика таймера TL0, а ТНО используется
для хранения значения, которое автоматически загружается
в TL0 в момент его переполнения. Это значит, что вместо
обнуления при установке флага TF0, значение TL0 становит-
ся равным значению ТНО.
Режим 3 - еще более интересный! В этом режиме регис-
тры ТНО и TL0 работают как независимые счетчики-тайме-
ры, однако для формирования запроса прерываний по пере-
полнению TL0 используется флаг TF0, а вот при переполне-
нии ТНО устанавливается
“чужой'
флаг TF1 (как вы догада-
лись, используется флаг Timerl, т.е. этот режим TimerO влия-
ет на Timerl!). Для управления счетчиком ТНО в этом режи-
ме так же используется
“чужой'
флаг управления (об этом
чуть позже). При использовании режима 3 общее количе-
ство таймеров в микроконтроллере составляет 4, что порой
имеет решающее значение, хотя из-за взаимного влияния
использование этой возможности немного затруднено.
Функционирование Timerl, за исключением режима 3
(который
отсутствует),
полностью аналогично TimerO.
Рассмотрим теперь, как задаются те или иные режимы
работы TimerO и Timerl.
В таблице 19
показан регистр TCON,
а в
таблице
20 - TMOD
(обратите внимание:
для регистра
TMOD указаны
условные наименования
флагов, применять
их в своих программах нельзя, надо описать флаги самосто-
ятельно!).
В регистре TCON младшая тетрада используется для уп-
равления режимами работы внешних запросов прерываний
INTO и INT1. Хотя это не совсем к теме, придется уделить
внимание и им. Флаг
1Тх,
если он установлен, задает режим
динамического
входа INTx по переходу из 1
в
0, а если сбро-
шен, задает режим
статического
входа по уровню 0. Запрос
прерывания, соответственно, поступает либо при обнаруже-
нии спада сигнала на входе INTx, либо при обнаружении низ-
кого логического уровня. Флаги
1Ех
- это флаги запроса пре-
рывания. При 1Тх=1 эти флаги
автоматически сбрасыва-
ются
при вызове процедуры обработки прерывания
(важно:
в обработчике вы никогда не увидите 1Ех=1!!!). При 1Тх=0 со-
стояние флагов 1Ех
повторяет уровни
на входах INTx и
не
сбрасывается
при переходе к обработчику прерывания
(важ-
но:
внутри обработчика состояние флага 1Ех соответствует
входному уровню сигнала!!!).
Старшая тетрада TCON используется, собственно, для
управления TimerO и Timerl. Соответствующий таймер оста-
новлен, если флаг
TRx
сброшен. Чтобы таймер начал счет,
надо установить соответствующий флаг TRx. Флаги TF0 и
TF1 уже рассмотрены ранее - это флаги запросов преры-
ваний от соответствующих таймеров (не забудьте, что в ре-
жиме 3 TimerO флаг TF1 принадлежит ему, а не Timerl!).
Таблица 20. Регистр TMOD
Разряд
7
6
5
4
3
2
1
0
флаг
GATE1
С/Т1
М11
М10
GATE0
СЛ'О
М01
моо
30
[| Радиолюбитель - 0 8 /2 0 0 7
предыдущая страница 30 Радиолюбитель 2007-08 читать онлайн следующая страница 32 Радиолюбитель 2007-08 читать онлайн Домой Выключить/включить текст