Встроенные системы - таймер / счетчик

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

Счетчик - это устройство, которое хранит (и иногда отображает) количество раз, когда произошло конкретное событие или процесс, относительно тактового сигнала. Он используется для подсчета событий, происходящих вне микроконтроллера. В электронике счетчики могут быть легко реализованы с использованием схем регистрового типа, таких как триггер.

Разница между таймером и счетчиком

Точки, которые отличают таймер от счетчика, следующие:

таймер счетчик
Регистр увеличивается для каждого машинного цикла. Регистр увеличивается с учетом перехода от 1 к 0 в соответствии с внешним входным выводом (T0, T1).
Максимальная скорость счета составляет 1/12 от частоты генератора. Максимальная скорость счета составляет 1/24 от частоты генератора.
Таймер использует частоту внутренних часов и генерирует задержку. Счетчик использует внешний сигнал для подсчета импульсов.

Таймеры 8051 и связанные с ними регистры

8051 имеет два таймера, Таймер 0 и Таймер 1. Они могут использоваться как таймеры или как счетчики событий. Таймер 0 и Таймер 1 имеют ширину 16 бит. Поскольку 8051 соответствует 8-битной архитектуре, к каждому 16-битному доступу обращаются как к двум отдельным регистрам младшего и старшего байтов.

Таймер 0 Регистрация

16-битный регистр таймера 0 доступен как младший и старший байт. Регистр младших байтов называется TL0 (младший байт таймера 0), а регистр старших байтов называется TH0 (старший байт таймера 0). Эти регистры могут быть доступны как любой другой регистр. Например, инструкция MOV TL0, # 4H перемещает значение в младший байт таймера # 0.

Таймер 0

Таймер 1 Регистрация

16-битный регистр таймера 1 доступен как младший и старший байт. Младший байтовый регистр называется TL1 (младший байт таймера 1), а старший байтовый регистр называется TH1 (старший байт таймера 1). Эти регистры могут быть доступны как любой другой регистр. Например, инструкция MOV TL1, # 4H перемещает значение в младший байт таймера 1.

Таймер 1

TMOD (Режим таймера) Регистрация

Таймер 0 и Таймер 1 используют один и тот же регистр для установки различных режимов работы таймера. Это 8-битный регистр, в котором младшие 4 бита отведены для таймера 0, а старшие четыре бита для таймеров. В каждом случае младшие 2 бита используются для предварительной установки режима таймера, а верхние 2 бита используются для указания местоположения.

TMOD Зарегистрироваться

Gate - если установлено, таймер работает только при высоком INT (0,1).

C / T - бит выбора счетчика / таймера.

M1 - Режим бит 1.

M0 - бит режима 0.

ВОРОТА

Каждый таймер имеет средства запуска и остановки. Некоторые таймеры делают это с помощью программного обеспечения, некоторые с помощью аппаратного обеспечения, а некоторые имеют как программное, так и аппаратное управление. Таймеры 8051 имеют как программное, так и аппаратное управление. Запуск и остановка таймера управляются программным обеспечением с использованием инструкций SETB TR1 и CLR TR1 для таймера 1, а также SETB TR0 и CLR TR0 для таймера 0.

Инструкция SETB используется для его запуска и останавливается инструкцией CLR. Эти инструкции запускают и останавливают таймеры до тех пор, пока GATE = 0 в регистре TMOD. Таймеры могут быть запущены и остановлены внешним источником, сделав GATE = 1 в регистре TMOD.

C / T (ЧАСЫ / ТАЙМЕР)

Этот бит в регистре TMOD используется для определения того, используется ли таймер в качестве генератора задержки или менеджера событий . Если C / T = 0, он используется в качестве таймера для генерации задержки таймера. Источником синхронизации для создания временной задержки является частота кристалла 8051. Если C / T = 0, частота кристалла, подключенная к 8051, также определяет скорость, с которой таймер 8051 срабатывает с регулярным интервалом.

Частота таймера всегда составляет 1/12 от частоты кристалла, подключенного к 8051. Хотя различные системы на базе 8051 имеют частоту XTAL от 10 МГц до 40 МГц, мы обычно работаем с частотой XTAL 11,0592 МГц. Это связано с тем, что скорость передачи для последовательной связи 8051.XTAL = 11.0592 позволяет системе 8051 обмениваться данными с ПК без ошибок.

М1 / М2

M1 M2 Режим
0 0 13-битный режим таймера.
0 1 16-битный режим таймера.
1 0 8-битный режим автоматической перезагрузки.
1 1 Разлитый режим.

Различные режимы таймеров

Режим 0 (13-битный режим таймера)

Таймер 1 и Таймер 0 в режиме 0 работают как 8-битные счетчики (с предварительным делителем на 32). Регистр таймера сконфигурирован как 13-битный регистр, состоящий из всех 8 битов TH1 и младших 5 битов TL1. Старшие 3 бита TL1 являются неопределенными и должны игнорироваться. Установка флага запуска (TR1) не очищает регистр. Флаг прерывания таймера TF1 устанавливается, когда счетчик переходит со всех 1 на все 0. Режим 0 работает для Таймера 0 так же, как и для Таймера 1.

Режим 1 (16-битный режим таймера)

Режим таймера «1» является 16-разрядным таймером и является широко используемым режимом. Он работает так же, как 13-битный режим, за исключением того, что используются все 16 бит. TLx увеличивается, начиная с 0 до максимального значения 255. После достижения значения 255 значение TLx сбрасывается до 0, а затем значение THx увеличивается на 1. Будучи полным 16-разрядным таймером, таймер может содержать до 65536 различных значений, и он переполнится до 0 после 65 536 рабочих циклов.

Режим 2 (8-битная автоматическая перезагрузка)

Оба регистра таймера настроены как 8-битные счетчики (TL1 и TL0) с автоматической перезагрузкой. Переполнение от TL1 (TL0) устанавливает TF1 (TF0), а также перезагружает TL1 (TL0) с содержимым Th1 (TH0), которое предварительно устанавливается программным обеспечением. Перезагрузка оставляет TH1 (TH0) без изменений.

Преимущество режима автоматической перезагрузки заключается в том, что у вас может быть таймер, который всегда будет содержать значение от 200 до 255. Если вы используете режим 0 или 1, вам придется проверить код, чтобы увидеть переполнение, и, в этом случае, сбросьте таймер до 200. В этом случае драгоценные инструкции проверяют значение и / или перезагружаются. В режиме 2 микроконтроллер позаботится об этом. После того, как вы настроили таймер в режиме 2, вам не нужно беспокоиться о том, чтобы проверить, не переполнен ли таймер, и вам не нужно беспокоиться о сбросе значения, потому что аппаратное обеспечение микроконтроллера сделает все за вас. Режим автоматической перезагрузки используется для установления общей скорости передачи.

Режим 3 (Режим таймера разделения)

Режим таймера «3» известен как режим разделенного таймера . Когда Таймер 0 переводится в режим 3, он становится двумя отдельными 8-битными таймерами. Таймер 0 - это TL0, а Таймер 1 - это TH0. Оба таймера отсчитывают от 0 до 255, а в случае переполнения сбрасываются обратно на 0. Все биты таймера 1 теперь будут привязаны к TH0.

Когда Таймер 0 находится в режиме разделения, реальный Таймер 1 (т. Е. TH1 и TL1) может быть установлен в режимах 0, 1 или 2, но его нельзя запускать / останавливать, поскольку биты, которые делают это, теперь связаны с TH0. Реальный таймер 1 будет увеличиваться с каждым машинным циклом.

Инициализация таймера

Выберите режим таймера. Рассмотрим 16-битный таймер, который работает непрерывно и не зависит от внешних выводов.

Инициализируйте TMOD SFR. Используйте младшие 4 бита TMOD и рассмотрите таймер 0. Оставьте два бита, GATE 0 и C / T 0, равными 0, поскольку мы хотим, чтобы таймер не зависел от внешних выводов. Поскольку 16-разрядный режим является режимом таймера 1, очистите T0M1 и установите T0M0. Фактически, единственный включаемый бит - это бит 0 TMOD. Теперь выполните следующую инструкцию -

MOV TMOD,#01h

Теперь таймер 0 находится в режиме 16-битного таймера, но таймер не работает. Чтобы запустить таймер в режиме работы, установите бит TR0, выполнив следующую инструкцию:

SETB TR0

Теперь таймер 0 сразу начнет отсчет, увеличиваясь один раз за каждый машинный цикл.

Чтение Таймера

16-битный таймер может быть прочитан двумя способами. Либо считайте фактическое значение таймера в виде 16-битного числа, либо вы обнаружите, когда таймер переполнен.

Обнаружение переполнения таймера

Когда таймер переполняется с самого высокого значения до 0, микроконтроллер автоматически устанавливает бит TFx в регистре TCON. Таким образом, вместо проверки точного значения таймера можно проверить бит TFx. Если установлен TF0, то таймер 0 переполнен; если установлен TF1, таймер 1 переполнен.