Устройство таймеров микроконтроллеров MCS-51

Устройство таймеров микроконтроллеров MCS-51

В базовых моделях семейства имеются два программируемых 16-битных таймера/счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий. Каждый из них состоит из двух 8-битных регистров TH0 (старший байт) и TH0 (младший байт) для таймера 0 или TH1 (старший байт) и TH1 (младший байт) для таймера 1.

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

В режиме счетчика содержимое соответствующего таймера/счетчика инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на вывод микроконтроллера T0 или T1. Так как на распознавание периода требуются два машинных цикла, максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. На длительность периода входных сигналов ограничений сверху нет. Для гарантированного прочтения входной сигнал должен удерживать значение 1, как минимум, в течение одного машинного цикла микро-ЭВМ.

Кроме того, Таймер 1 можно использовать для задания скорости передачи (baud rate) последовательного порта.

Для переключения режимов работы таймеров используются биты M0 и M1 регистра специальной функции TMOD. Название образовано от сокращения двух английских слов: T(timer)- таймер и mode - режим. Имена и расположение битов приведено на рисунке 1:

Рисунок 1. Формат регистра управления режимами работы таймеров TMOD.

Так как управление таймерами 0 и 1 полностью идентично, то приведЈм назначение битов по именам:

В нулевом режиме таймер работает как 13-битный суммирующий счЈтчик. Этот счЈтчик состоит из 8 бит регистра ТНх и младших 5 бит регистра TLx, где x в обозначении регистра заменяется на 0 или 1 в зависимости от того таймера, которым мы управляем. Старшие 3 бита регистров TLx не определены и игнорируются. Установка запускающего таймер флага TR0 или TR1 не очищает эти регистры. Работе таймера 0 или таймера 1 в режиме 0 соответствует схема:

Рисунок 2. Схема таймеров 0 или 1 в режиме 0.

Этот режим был введЈн для совместимости с устаревшим семейством микроконтроллеров MCS-48 для облегчения переноса уже разработанных программ на новые процессоры и поэтому в настоящее время не используется. Тем не менее, в этом режиме можно обеспечить формирование интервала времени длительностью до 8096 мс при частоте задающего генератора 12 МГц.

Когда содержимое счетчика изменяется из состояния все "1" в состояние все "0" , то устанавливается (принимает значение "1") флаг прерывания таймера TF0 или TF1.

Обычно пользователя интересует не максимальный интервал времени, а свой конкретный интервал времени. Для уменьшения интервала времени в регистры таймера можно предварительно занести число и тем самым сформировать произвольный интервал времени. Рассмотрим пример подготовки таймера T0 для формирования временного интервала 5мс.

В рассмотренном примере для расщепления 16-ти битной константы на два отдельных байта были использованы функции выделения старшего и младшего байта. Эти функции присутствуют в большинстве ассемблеров для микроконтроллеров MCS-51. Если же язык программирования не содержит в своЈм составе подобные функции, то можно для выделения байтов воспользоваться операцией деления на 256.

В первом режиме работы таймер работает как шестнадцатиразрядный счЈтчик. Режим 1 похож на режим 0, за исключением того, что в регистрах таймера использует все 16 бит. В этом режиме регистры ТНх и TLx также включены друг за другом. Работе таймера 0 или таймера 1 в режиме 1 соответствует схема:

В этом режиме можно обеспечить формирование интервала времени длительностью до 65536 мкс при частоте задающего генератора 12 МГц.

Рассмотрим пример использования таймера T0 для формирования временного интервала 15мс.

В рассмотренном примере переполнение таймера произойдЈт через 15000 циклов процессора, то есть через 15 мс. Программа будет постоянно проверять состояние флага переполнения таймера и как только он установится в единицу перейдЈт к выполнению следующей команды.

Нулевой и первый режимы работы таймеров T0 и T1 предназначены для формирования одиночного интервала времени. Если возникает необходимость формировать последовательность интервалов времени для периодических процессов, то загрузка регистров TH0 и TL0 для задания нужного интервала времени производится программно, что для коротких интервалов времени может привести к значительным затратам процессорного времени.

Для формирования последовательности одинаковых интервалов времени используется режим работы таймера с перезагрузкой - режим 2.

В режиме 2 регистр таймера TLx работает как 8-битный счетчик с автоматической перезагрузкой начального значения из регистра ТНх в регистр TLx. Переполнение регистра TLx не только устанавливает флаг TFx, но и загружает регистр TLx содержимым регистра ТНх, который предварительно инициализируется программно. Перезагрузка не изменяет содержимое регистра ТНх. Работе таймера 0 или таймера 1 в режиме 2 соответствует схема:

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

Таймер 1 при работе в режиме 3 просто хранит свое значение. Эффект такой же как при сбросе бита TR1.

Таймер 0 в режиме 3 представляет собой два раздельных 8 битных счетчика (регистры TL0 и ТН0), Регистр TL0 использует биты управления таймера 0: С/Т0. GATE0, TR0 и TF0. Регистр ТН0 работает только в режиме таймера и использует биты TR1 и TF1 таймера 1. Таким образом, регистр ТН0 управляет прерыванием таймера 1. Логика работы таймера 0 в режиме 3 показана на схеме:

Работа таймера TL0 разрешается, если бит TR0 = 1, а таймера TH0 - если бит TR1 = 1. Таймер 1 при работе таймера 0 в режиме 3 постоянно включен.

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

Управление таймерами-счЈтчиками.

Схема управления таймерами 0 и 1 идентична и приведена на рисунке:

Из схемы видно, что таймер может включаться и выключаться битами TRx. Есть возможность управлять работой таймера извне при помощи внешней ножки T0 для таймера T0 или T1 для таймера T1. Для этого необходимо записать в бит GATEx логическую единицу (не забыв при этом разрешить работу таймера при помощи бита TRx).

Кроме того таймер может синхронизироваться от внешнего генератора. Для этого в бит управления C/T нужно записать логическую единицу.

Биты включения таймеров TR0 и TR1 размещены в регистре TCON (control - управлять), а биты GATE и C/T в регистре TMOD. Формат регистра TCON приведЈн на следующем рисунке:

Рисунок 1. Формат регистра управления режимами работы таймеров TCON.

Схема управления таймерами интересна тем, что позволяет использовать таймеры в качестве измерительных приборов.

Использование таймера в качестве измерителя ширины импульсов.

Известно, что измерение длительности импульса можно произвести, подсчитав импульсы эталонной частоты. Принцип измерения длительности импульсов иллюстрируется рисунком 8.

Для измерения длительности импульса измеряемый сигнал подаЈтся на вывод микроконтроллера INTx и в бит управления GATE записывается разрешающий сигнал логической единицы. Таймер/счЈтчик настраивается в режим таймера записью в бит C/Tx логического нуля. Содержимое таймера обнуляется.

Пример программы измерения длительности импульса приведЈн на рисунке 9.

Рисунок 8. Принцип измерения длительности импульсов

Рисунок 9. Программа измерения длительности импульсов

Если теперь на вход микроконтроллера INT0 подать импульс с неизвестной длительностью, то в регистрах TH0 и TL0 будет записана его длительность в микросекундах.

Использование таймера в качестве частотомера.

Известно, что измерение частоты можно произвести, подсчитав количество периодов неизвестной частоты за единицу времени. Принцип измерения частоты иллюстрируется рисунком 10.

Рисунок 10. Принцип измерения частоты

Для измерения частоты измеряемый сигнал подаЈтся на вывод микроконтроллера Tx. Таймер/счЈтчик настраивается в режим счЈтчика записью в бит C/Tx логической единицы. Содержимое таймера обнуляется. Таймер включается на строго определЈнный интервал времени. Этот интервал задаЈтся оставшимся таймером.

Пример программы измерения частоты сигнала на ножке микроконтроллера T0 приведЈн на рисунке 11.

Рисунок 11. Программа измерения частоты

Если теперь на вход микроконтроллера T0 подать сигнал с неизвестной частотой, то в регистрах TH0 и TL0 будет записана его частота в килогерцах.

📎📎📎📎📎📎📎📎📎📎