Микропроцессоры и микроконтроллеры

 
 
 
«Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу.»
Bill Gates
Русский | Українська


Микропроцессоры и микроконтроллеры :: Структура и программирование однокристальных микроконтроллеров :: 5.2 Структура и использование таймеров в составе МК MCS-51

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 имеет битовую адресацию, поэтому можно индивидуально работать с каждым битом, используя указанные имена.