Алгоритм - Учебный центр
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


Таймеры. Многофункциональные таймеры (ликбез).

Таймеры. Многофункциональные таймеры (ликбез).

Многие микроконтроллеры, например SX48/52BD, имеют по два многофункциональных таймера, которые имеют названия Т1 и Т2. Их функции служат дополнением к функциям таймера RTCC и сторожевого таймера, имеющихся во всех типах микроконтроллеров SX. Эти таймеры позволяют высвободить ресурсы центрального процессора для нужд приложения. Особенно это касается приложений реального времени, таких, как генерация сигнала с ШИМ, управление двигателями, управление тиристорными преобразователями, генерация синусоидальных сигналов и, наконец, сбор данных.

Каждый таймер построен на основе 16-разрядных регистров. Кроме того, каждому из них соответствуют 4 вывода микроконтроллера: один вывод — вход тактового сигнала, 2 вывода — входы захвата и еще один вывод — выход таймера. Выводы, которые используются многофункциональными таймерами, имеют также и другие функции: выводы таймера Т1 являются выводами порта В, а выводы таймера Т2 — выводами порта С.

Режимы работы таймеров. Каждый таймер может работать в четырех различных режимах. В первом режиме таймер работает в качестве генератора ШИМ-сигнала (ШИМ — широтно-импульсная модуляция). Во втором он используется в качестве программного счетчика. В третьем режиме таймер используется для подсчета внешних событий. И наконец, четвертый режим позволяет запоминать состояние счетчика по внешнему сигналу («захват») и сравнивать его с заданным значением.

Режим ШИМ. Широтно-импульсная модуляция (рис. 1) заключается в генерировании сигнала с программируемыми частотой и коэффициентом заполнения. Для использования этого режима необходимо загрузить в регистры сравнения R1 и R2 значения, равные количеству машинных циклов, в течение которых сигнал на выходе таймера равен «0» и «1» соответственно. Таким образом, содержимое регистра R1 определяет длительность сигнала НИЗКОГО, а содержимое регистра R2 — длительность сигнала ВЫСОКОГО уровня на выходе таймера.

 

Рис. 1. Формирование ШИМ-сигнала

Сначала счетчик инициализируется значением 0000h. Затем содержимое счетчика инкрементируется до тех пор, пока не станет равным содержимому регистра R1. В этот момент генерируется прерывание (если оно разрешено), изменяется уровень на выходе таймера, а в счетчик вновь записывается значение 0000h. Во втором цикле содержимое счетчика инкрементируется до тех пор, пока не станет равным содержимому регистра R2. В этот момент генерируется прерывание (если оно разрешено), изменяется уровень на выходе таймера, а в счетчик вновь записывается значение 0000h. Описанный процесс постоянно повторяется с поочередным использованием регистров R1 и R2. Значения, записанные в регистрах R1 и R2, определяют коэффициент заполнения и период, а следовательно, и частоту выходного сигнала. Если в регистрах R1 и R2 записано одно и то же число, на выходном контакте таймера будет присутствовать сигнал меандра, имеющий коэффициент заполнения, равный 50%. Если в момент записи в регистр R1 значение таймера больше, чем записываемое, а на выходе таймера НИЗКИЙ уровень (т.е. таймер считает до совпадения с R1), то таймер досчитает до FFFFh и затем до нового значения R1, сохраняя на выходе НИЗКИЙ уровень. Аналогичная ситуация будет и при обновлении R2, только на выходе таймера сохранится ВЫСОКИЙ уровень.

Режим программного таймера. Режим программного таймера полностью аналогичен режиму ШИМ, за исключением того, что сигнал на выходе таймера отсутствует. В этом режиме по каждому совпадению содержимого счетного регистра с содержимым регистров R1 или R2 просто генерируется прерывание. Этот режим предназначен для выполнения каких-либо действий по каждому из прерываний. В программе причина прерывания определяется путем проверки флагов прерывания таймера. Каждому источнику прерывания (совпадение с R1, совпадение с R2 или переполнение счетчика) соответствует свой флаг.

Режим «внешнее событие». В режиме «внешнее событие» таймер функционирует так же, как и в режиме ШИМ, за исключением того, что инкремент содержимого счетчика таймера производится не по импульсам тактового сигнала микроконтроллера, а по импульсам внешнего сигнала, поступающим на тактовый вход таймера (вывод RB7 для таймера Т1 и вывод RC3 для таймера Т2). Соответственно этот режим может использоваться для подсчета внешних событий. В этом режиме можно задать активный фронт (нарастающий или спадающий) внешнего сигнала, по которому будет выполняться счет.

Режим «захват/сравнение».В режиме «захват/сравнение» инкремент содержимого счетчика таймера производится непрерывно без генерации прерывания. При обнаружении на любом из двух входов таймера заданного перехода уровня сигнала содержимое счетчика сохраняется в соответствующем регистре. Эта возможность захвата может быть использована для определения интервала времени, прошедшего между двумя внешними событиями. Более того, содержимое счетчика может непрерывно сравниваться с содержимым регистра R1. Каждый раз, когда состояние счетчика равно числу, находящемуся в регистре R1, меняется состояние выходного сигнала таймера и генерируется прерывание (если оно разрешено). После наступления этого события счет продолжается без сброса счетчика в состояние 0000h, в отличие от режима ШИМ.

В режиме «захват/сравнение» инкремент счетчика производится по внутреннему тактовому сигналу микроконтроллера, прошедшему через 3-битный предделитель. Коэффициент деления предделителя (степень числа 2) задается в диапазоне от 1 до 128.

Два входа захвата называются «Захват 1» и «Захват 2». Для каждого входа можно задать тип фронта (нарастающий или спадающий), по которому будет выполняться сохранение счетчика. По сигналу на выводе «Захват 1» содержимое счетчика сохраняется в специальном 16-битном регистре CAPTURE 1, который доступен только для чтения. По сигналу на выводе «Захват 2» содержимое счетчика сохраняется в регистре R2. При выполнении захвата генерируется прерывание и устанавливается соответствующий флаг.

При переполнении счетчика (при переходе из состояния FFFFh в 0000h) генерируется прерывание (если оно разрешено) и устанавливается соответствующий флаг. Поскольку счетчик работает непрерывно, переполнение происходит регулярно, каждые 65536 приращений. Прерывание по переполнению счетчика может использоваться программой для различения двух последовательных событий, произошедших через большой промежуток времени.

Как уже было сказано, при совпадении содержимого счетчика с содержимым регистра R1 изменяется состояние выходного сигнала. Кроме того, при этом событии генерируется прерывание (если оно разрешено) и устанавливается соответствующий флаг. После этого счет продолжается без сброса счетчика в состояние 0000h. Однако если необходимо четко задать период этого прерывания, в подпрограмме обработки прерывания следует скорректировать содержимое R1 для получения требуемой длительности сигнала.

Обычные таймеры используется для отсчета временных интервалов, например для подсчета времени работы принтера или копира. А сторожевой таймер - это специальный таймер, он предназначен для предотвращения последствий сбоев программы (см. рис. 2). Процессор с определенным интервалом записывает в сторожевой таймер константу и таймер начинает отсчет заданного временного интервала. Если программа не перезапишет в него константу до истечения определенного интервала времени, сторожевой таймер досчитает до нуля и выдаст сигнал в цепь сброса, которая осуществляет начальный «сброс» системы перезапустит микроконтроллер. Таким образом, программа должна давать сторожевому таймеру сигнал — все в порядке. Если она этого не сделала, значит, по какой-либо причине произошел сбой.

 

Рис. 2. Микроконтроллер второго уровня управления принтера.

 

 

 


Лицензия