Структура и использование таймеров МК MCS-51

PAGE 8

Дисциплина «Микроконтроллеры в системах управления», 3-й курс, семестр 6. Модуль 2 – Тема 5

Модуль 2 – Тема 5 Структура и использование таймеров МК MCS-51

5.1 Характеристика периферийных блоков в составе МК MCS-51

В вычислительных системах, ориентированных на управление, необходима реализация таких функций:

  • управление в режиме реального времени;
  • подсчет внешних событий (подсчет изменений уровня внешнего сигнала);
  • измерение длительности входных импульсов или интервалов между ними;
  • связь с другими вычислительными системами;
  • точное управление внешними асинхронными событиями.

Микроконтроллер MCS-51 обеспечивает выполнение этих функций благодаря тому, что в состав МК входят так называемые блоки периферийных функций:

  • таймеры-счетчики;
  • последовательный порт, или универсальный асинхронный приемник-передатчик (УАПП, англ. UART);
  • система обработки прерываний.

Измерение или реализацию интервалов времени выполняют в виде подсчета импульсов с постоянным малым периодом следования, которые вместились в измеряемый или реализуемый временной интервал. Для этого, как правило, на таймере выполняют подсчет импульсов от внутреннего ГТИ MCS-51. Таймер-счетчик также можно применять для подсчета внешних асинхронных импульсов.

Последовательный порт (УАПП или UART) обычно используют для подключения МК к периферийному оборудованию, которое требует последовательной связи (модем, радиотехнические устройства, системы связи с другими МК или компьютерами на большом расстоянии). Назначение UART – преобразование данных в параллельном коде, которые циркулируют внутри МК, в данные в последовательном коде, передаваемые или принимаемые на внешнее оборудование.

Особенность работы блоков периферийных функций состоит в том, что они выполняют свои функции одновременно с процессором. Это освобождает процессор от определенных действий, и повышается скорость и эффективность реализации функций управления оборудованием.

Выполняя команды программы, процессор осуществляет настройку периферийных блоков и их запуск. Периферийные блоки информируют процессор о завершении очередного цикла своей работы с помощью сигналов прерываний. Сигналы прерываний анализируются системой обработки прерываний. Опрос сигналов прерываний, их анализ и переход на процедуру обработки конкретного прерывания осуществляются автоматически, а действия, которые будут выполняться по тому ли другому сигналу, зависят от команд конкретной процедуры. Взаимодействие процессора и блоков периферийных функций иллюстрируется схемой на рис. 5.1.

Рисунок 5.1 – Взаимодействие внутреннего процессора базового МК MCS-51
с блоками периферийных функций

Схема на рис. 5.1 полезна при детальном изучении структуры и работы блоков периферийных функций, поскольку на одной схеме показаны практически все особенности взаимодействия этих блоков и процессора MCS-51.

Все представленные имена регистров и битов можно использовать в командах программы.

Например, для запуска таймера Т0 нужно записать команду:

SETB TR0 ; бит TR0 = 1, за счет этого запускается таймер Т0

Для останова таймера Т0 нужно записать команду:

CLR TR0 ; бит TR0 = 0, за счет этого таймер Т0 останавливается
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 имеет битовую адресацию, поэтому можно индивидуально работать с каждым битом, используя указанные имена.

5.3 Настройка таймеров для реализации интервалов времени

Основной принцип использования таймеров – контролировать только моменты запуска и переполнения. То есть текущее состояние в процессе счета программно не контролируют (хотя, в принципе, это возможно).

При реализации или измерении интервалов времени всегда используют подсчет импульсов с постоянным периодом (частотой), как правило, от ГТИ МК (TГТИ) – т.е. таймер используют в режиме таймирования.

Максимальный интервал времени, который может реализовать таймер в конкретной конфигурации, считая от 0 до NMAX , выражается формулой:

,

где, ТГТИ = TМЦ – период следования подсчитываемых импульсов от ГТИ.

Поэтому для реализации заданного интервала времени ТЗ на таймере нужно выполнить следующие действия:

  1. Проверить возможность реализации заданного интервала:

.

Поскольку , то, подбирая n, можно выбрать нужную конфигурацию.

Для конфигурации (М1,М0) = (00) значение nT=5+8=13;

для конфигурации (М1,М0) = (01) – nT=16;

для конфигурации (М1,М0) = (10) – nT=8;

для конфигурации (М1,М0) = (11) – nT=8.

Если выбрать подходящее n не удается, можно реализовать заданный интервал как совокупность дискрет времени: , где ТD – дискрета, реализуемая таймером. Значение m можно контролировать программно, например, подсчитывая моменты переполнения таймера в дополнительной переменной.

  1. Рассчитать стартовое число для реализации заданного интервала:

.

Это значение должно быть записано в счетные регистры перед запуском таймера.

  1. В требуемый момент начала интервала включить таймер. Далее процессор может выполнять команды программы, не связанные с работой таймера.

  1. Когда интервал будет выдержан (т.е. таймер достигнет состояния NMAX и перейдет в “0”), автоматически установится флаг переполнения TF0=1 для таймера Т0 или TF1=1 для таймера Т1. Этот флаг проверяется аппаратно (как сигнал прерывания) или может быть проверен программно.

Самостоятельно определить стартовое число, необходимое для реализации интервала времени ТЗ = 20 мс, если TГТИ = 1 мкс.

5.4 Краткая информация о таймере Т2

Таймер Т2 реализован во всех современных моделях микроконтроллеров семейства MCS-51. Этот таймер работает только в 16-битовой конфигурации.

Программная модель таймера Т2 содержит следующие регистры:

  • счетные регистры TH2 и TL2;
  • регистры RCAP2H и RCAP2L для (стартового числа) / (захвата значения);
  • регистр выбора режимов и управления T2CON;
  • регистр дополнительных режимов T2MOD.

Регистры (TH2, TL2) и (RCAP2H, RCAP2L) всегда работают в парах, хотя в программе к ним нужно обращаться как к отдельным элементам.

Таймер Т2 может работать в двух базовых режимах (так же, как и таймеры Т0 и Т1):

– таймирование – подсчет импульсов, поступающих от ГТИ МК;

– счет внешних импульсов, поступающих на вход Т2 по внешнему выводу P1.0.

Для таймера Т2 возможны две базовые конфигурации регистров:

– автоперезагрузка стартового числа при переполнении таймера (рис. 5.3) или по внешнему сигналу;

– захват (фиксация) текущего состояния таймера по внешнему сигналу (рис. 5.4);

При выборе любой конфигурации таймер может функционировать в любом из режимов.

Рисунок 5.3 – Работа таймера Т2 в конфигурации Автоперезагрузка стартового
числа при переполнении счетных регистров

В конфигурации Автоперезагрузка стартового числа таймер подсчитывает импульсы в соответствии с выбранным режимом. При переходе из состояния FFFFh в 0000h формируется признак переполнения TF2 (см. табл. 5.2). В этот же момент в счетные регистры (TH2, TL2) загружается стартовое число Nst, хранящееся в регистрах перезагрузки (RCAP2H, RCAP2L). Таймер без останова продолжает счет с загруженного стартового числа Nst. Перезагрузка стартового числа может быть вызвана также перепадом 1 0 внешнего сигнала T2EX на выводе Р1.1 (табл. 5.2).

Рисунок 5.4 – Работа таймера Т2 в конфигурации Захват текущего состояния

В конфигурации Захват текущего состояния таймер подсчитывает импульсы в соответствии с выбранным режимом. При появлении перепада 1 0 внешнего сигнала T2EX на выводе Р1.1 происходит копирование текущего состояния счетных регистров (TH2, TL2) в регистры захвата (RCAP2H, RCAP2L). Таймер не останавливается и продолжает счет. В момент захвата устанавливается флаг EXF2 = 1 (см. табл. 5.2). Этот флаг может быть обработан как прерывание.

Управление таймером Т2 выполняют в основном с помощью регистра Т2CON. Данный регистр имеет битовую адресацию.

Таблица 5.2 – Назначение разрядов регистра T2CON

Бит

Поз.

Назначение

TF2

7

Флаг переполнения таймера Т2. Устанавливается в 1 при переполнении таймера. Должен быть сброшен программно. TF2 не устанавливается, если таймер Т2 работает на тактирование UART (при RCLK = 1 или TCLK = 1)

EXF2

6

Флаг внешнего события таймера Т2. Устанавливается при перепаде 1 0 на входе T2EX (P1.1). Вызывает перезагрузку стартового числа или захват текущего значения в зависимости от конфигурации таймера. Срабатывает только при EXEN2 = 1. Флаг EXF2 может быть обработан как прерывание. Сброс флага должен выполняться программно

RCLK

5

Выбор источника тактирования для приемника порта UART в режимах 1 и 3.
При RCLK =1 используется таймер Т2, при RCLK = 0 – таймер Т1

TCLK

4

Выбор источника тактирования для передатчика порта UART в режимах 1 и 3. При TCLK =1 используется таймер Т2, при TCLK = 0 – таймер Т1

EXEN2

3

Разрешение внешнего события таймера Т2. При EXEN2=1 разрешено восприятие перепада 10 на входе T2EX и установка бита EXF2

TR2

2

Бит запуска/останова таймера T2. При TR2 = 1 таймер запускается и работает в соответствии с настройками C_T2, CP_RL2, RCLK и TCLK

C_T2

1

Выбор режима работы: при C_T2 = 0 – таймирование (счет импульсов от ГТИ), при C_T2 = 1 – счетчик внешних импульсов по входу Т2 (Р1.0)

CP_RL2

0

Выбор конфигурации таймера Т2.

При CP_RL2 = 0 – автоперезагрузка стартового числа.

При CP_RL2 = 1 – захват текущего состояния таймера.

Если RCLK=1 или TCLK=1 (тактирование UART), бит CP_RL2 игнорируется, а таймер Т2 работает в конфигурации автоперезагрузка

Более подробная информация о работе таймера Т2 представлена в материалах Модуль 3 – Тема 3.

5.5 Использование таймера Т2 в лабораторных работах

При выполнении лабораторных работ таймер Т2 используется в некоторых вариантах заданий.

  1. Измерение частоты внешних импульсов, поданных на вход Т2. Режим работы – счетчик внешних импульсов. Конфигурация – автоперезагрузка стартового числа. Остальные биты настройки в T2CON равны 0. Стартовое число равно 0. Прерывание TF2 обрабатывать не нужно. Первое применение – семестр 6, работа № 5.

  1. Реализация заданных интервалов времени. Режим работы – таймирование. Конфигурация – автоперезагрузка стартового числа. Все биты настройки в T2CON равны 0. Расчет стартового числа выполняется по методике разд. 5.3. Нужно разрешить обработку прерывания TF2 (см. Модуль 2 – Тема 7). Первое применение – семестр 6, работа № 6.

  1. Тактирование последовательного порта UART. Биты настройки RCLK и TCLK нужно установить в 1. Режим работы – таймирование. Конфигурация – автоперезагрузка стартового числа. Стартовое число рассчитывается по формуле 6.2 (см. Модуль 2 – Тема 6). Прерывание TF2 обрабатывать не нужно. Первое применение – семестр 6, работа № 8.

  1. Измерение периода внешних импульсов, поданных на вход T2EX. Режим работы таймера Т2 – таймирование. Конфигурация – захват текущего состояния таймера Т2. Бит настройки EXEN2 установить в 1. Нужно разрешить обработку внешнего прерывания EXF2 (см. Модуль 2 – Тема 7). Первое применение – семестр 7, работа № 2.

Автор конспекта Джулгаков В.Г., доцент каф. 301, ХАИ

Структура и использование таймеров МК MCS-51