Структура и использование таймеров МК 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МЦ период следования подсчитываемых импульсов от ГТИ.
Поэтому для реализации заданного интервала времени ТЗ на таймере нужно выполнить следующие действия:
- Проверить возможность реализации заданного интервала:
.
Поскольку , то, подбирая 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 можно контролировать программно, например, подсчитывая моменты переполнения таймера в дополнительной переменной.
- Рассчитать стартовое число для реализации заданного интервала:
.
Это значение должно быть записано в счетные регистры перед запуском таймера.
- В требуемый момент начала интервала включить таймер. Далее процессор может выполнять команды программы, не связанные с работой таймера.
- Когда интервал будет выдержан (т.е. таймер достигнет состояния 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. |
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 используется в некоторых вариантах заданий.
- Измерение частоты внешних импульсов, поданных на вход Т2. Режим работы счетчик внешних импульсов. Конфигурация автоперезагрузка стартового числа. Остальные биты настройки в T2CON равны 0. Стартовое число равно 0. Прерывание TF2 обрабатывать не нужно. Первое применение семестр 6, работа № 5.
- Реализация заданных интервалов времени. Режим работы таймирование. Конфигурация автоперезагрузка стартового числа. Все биты настройки в T2CON равны 0. Расчет стартового числа выполняется по методике разд. 5.3. Нужно разрешить обработку прерывания TF2 (см. Модуль 2 Тема 7). Первое применение семестр 6, работа № 6.
- Тактирование последовательного порта UART. Биты настройки RCLK и TCLK нужно установить в 1. Режим работы таймирование. Конфигурация автоперезагрузка стартового числа. Стартовое число рассчитывается по формуле 6.2 (см. Модуль 2 Тема 6). Прерывание TF2 обрабатывать не нужно. Первое применение семестр 6, работа № 8.
- Измерение периода внешних импульсов, поданных на вход T2EX. Режим работы таймера Т2 таймирование. Конфигурация захват текущего состояния таймера Т2. Бит настройки EXEN2 установить в 1. Нужно разрешить обработку внешнего прерывания EXF2 (см. Модуль 2 Тема 7). Первое применение семестр 7, работа № 2.
Автор конспекта Джулгаков В.Г., доцент каф. 301, ХАИ
Структура и использование таймеров МК MCS-51