5.2 Структура и использование таймеров в составе МК MCS-51
В составе базовой модели микроконтроллера MCS-51 реализованы два таймера с условными именами T0 и Т1. Задачи, решаемые с помощью таймеров:
· измерение интервалов времени между событиями;
· реализация интервалов времени;
· подсчет внешних импульсов (внешних событий).
Логическая модель таймеров может быть представлена в виде:
Основной элемент каждого таймера – счетные регистры TH1, TL1, TH0, TL0. Символы “H” и “L” означают старший и младший регистры соответственно.
В процессе работы таймер подсчитывает импульсы. Различают два базовых режима работы таймеров:
· таймирование – подсчет импульсов с постоянным периодом от ГТИ МК;
· счет – подсчет асинхронных импульсов с внешнего входа Т0 или Т1.
Иногда таймеры называют таймерами-счетчиками.
Частота подсчитываемых импульсов в режиме таймирования соответствует периоду машинных циклов: , где FQ – частота кварцевого резонатора.
Максимальная частота внешних импульсов для режима счета: .
При поступлении каждого импульса состояние таймера изменяется: N = N + 1. В принципе таймер считает от некоторого стартового числа NST до NMAX. Фактическая величина NMAX зависит от выбранной разрядности n счетного регистра:
При переходе из состояния NMAX в 0 таймер формирует специальный бит-признак:
TF0 – флаг переполнения таймера Т0
TF1 – флаг переполнения таймера Т1.
Для выбора режимов работы таймеров и управления ими в микроконтроллере имеются два специальных регистра:
· регистр TMOD – выбор режимов работы и конфигурирование таймеров;
· регистр TCON – запуск/останов таймеров и фиксация флагов TF0, TF1.
Структура регистра выбора режимов TMOD следующая:
Бит
|
Назначение бита
|
Gate
|
Выбор способа запуска/останова таймера.
При Gate = 0 – программный запуск/останов с помощью бита TR0 или TR1.
При Gate = 1 – программно-аппаратный запуск/останов. Для запуска таймера нужно установить TR0 = 1 или TR1 = 1, но таймер начнет работать, только когда на внешнем входе INT0 или INT1 присутствует сигнал “1” (соответственно для таймеров Т0 и Т1). Остановить таймер можно как битом TR0 или TR1, так и внешним сигналом INT0 или INT1 соответственно
|
C/T
|
Выбор режима работы
При C/T = 0 – режим таймирования (подсчет импульсов от ГТИ МК).
При C/T = 1 – режим счета импульсов по внешним входам Т0 или Т1
|
M1, M0
|
Выбор конфигурации таймера
Зависит от совместных значений битов М1 и М0 для каждого из таймеров индивидуально (символ “x” означает 0 или 1, т.е. для таймера Т0 или Т1)
М1
|
M0
|
Описание конфигурации
|
0
|
0
|
ТНх – восьмиразрядный таймер или счетчик,
TLx – предварительный делитель частоты импульсов на 32
|
0
|
1
|
Полный 16-разрядный таймер или счетчик
|
1
|
0
|
TLx – восьмиразрядный таймер или счетчик с автоматической перезагрузкой стартового числа.
Стартовое число счета Nst задается и хранится в ТНх.
|
1
|
1
|
TL0 и TH0 – восьмиразрядные таймеры, которые управляются битами TR0 и TR1 соответственно. Таймер T1 – отключается.
|
|
Регистр TMOD не имеет битовой адресации, поэтому байт для настройки таймеров нужно записывать в регистр целиком.
Например, нужно выполнить такую настройку:
· таймер Т1 – программный запуск, режим таймирования, конфигурация с автоперезагрузкой стартового числа;
· таймер Т0 – программно-аппаратный запуск, режим счета внешних импульсов, полная 16-битовая конфигурация.
Двоичный код для настройки таймеров формируем в виде:
init_timers equ 00101101b
Настройка таймеров на нужный режим осуществляем командой
MOV TMOD, #init_timers
Важно: при переполнении счетного регистра устанавливается флаг переполнения TF0 или TF1; это происходит независимо от режима и конфигурации таймеров; таймер продолжает счет с “0”, или с NST для конфигурации с автоперезагрузкой.
Регистр TCON служит для управления запуском таймеров и контроля переполнения, а также для контроля внешних сигналов прерываний. Здесь мы рассмотрим только старшую часть этого регистра:
Регистр TCON имеет битовую адресацию, поэтому можно индивидуально работать с каждым битом, используя указанные имена.
|