Встроенные системы - таймер / счетчик
А timerэто специальный тип часов, который используется для измерения временных интервалов. Таймер, который отсчитывает от нуля и далее для измерения прошедшего времени, часто называют таймером.stopwatch. Это устройство, которое ведет обратный отсчет с заданного временного интервала и используется для создания временной задержки, например, песочные часы - это таймер.
А counter- это устройство, которое хранит (а иногда и отображает) количество раз, когда произошло конкретное событие или процесс, по отношению к тактовому сигналу. Он используется для подсчета событий, происходящих вне микроконтроллера. В электронике счетчики могут быть довольно легко реализованы с использованием регистровых схем, таких как триггер.
Разница между таймером и счетчиком
Точки, которые отличают таймер от счетчика, следующие:
Таймер | Счетчик |
---|---|
Регистр увеличивается с каждым машинным циклом. | Регистр увеличивается с учетом перехода от 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.
Регистр Таймера 1
К 16-битному регистру Таймера 1 обращаются как к младшему, так и к старшему байту. Регистр младшего байта называется TL1 (младший байт таймера 1), а регистр старшего байта называется TH1 (старший байт таймера 1). Доступ к этим регистрам можно получить, как к любому другому регистру. Например, инструкцияMOV TL1, #4H перемещает значение в младший байт Таймера 1.
Регистр TMOD (режим таймера)
И Таймер 0, и Таймер 1 используют один и тот же регистр для установки различных режимов работы таймера. Это 8-битный регистр, в котором младшие 4 бита отведены для таймера 0, а старшие четыре бита - для таймеров. В каждом случае 2 младших бита используются для предварительной установки режима таймера, а 2 старших бита используются для определения местоположения.
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 используется для определения того, используется ли таймер в качестве delay generator или event manager. Если C / T = 0, он используется как таймер для генерации задержки таймера. Источником тактовых импульсов для создания временной задержки является частота кристалла 8051. Если C / T = 0, частота кристалла, подключенная к 8051, также определяет скорость, с которой таймер 8051 тикает с регулярным интервалом.
Частота таймера всегда составляет 1/12 от частоты кристалла, подключенного к 8051. Хотя различные системы на базе 8051 имеют частоту XTAL от 10 МГц до 40 МГц, мы обычно работаем с частотой XTAL 11,0592 МГц. Это связано с тем, что скорость передачи данных для последовательной связи 8051.XTAL = 11.0592 позволяет системе 8051 взаимодействовать с ПК без ошибок.
M1 / M2
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 устанавливается, когда счетчик переходит со всех единиц на все нули. Работа в режиме 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» известен как split-timer mode. Когда Таймер 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 переполнен.