Микроконтроллеры позволяют решать множество задач встроенных систем. Они отличаются большой универсальностью, их быстродействие позволяет применять их в различных устройствах в том числе и в платах управления второго уровня принтеров, что позволяет ощутимо удешевить готовую систему. Кроме того, микроконтроллеры очень легко программируются и перепрограммируются. Таймеры обычно используется для отсчета временных интервалов. А сторожевой таймер - это специальный таймер, предназначенный для предотвращения сбоев программы. Он работает следующим образом: после запуска он начинает отсчет заданного временного интервала. Если программа не перезапустит его до истечения этого интервала времени, сторожевой таймер перезапустит микроконтроллер. Таким образом, программа должна давать сторожевому таймеру сигнал — что все в порядке. Если она этого не сделала, значит, по какой-либо причине произошел сбой.
Многие микроконтроллеры обычно имеют два многофункциональных таймера (которые имеют названия Т1 и Т2). Их функции служат дополнением к функциям таймера RTCC и сторожевого таймера, обычно имеющихся во всех типах микроконтроллеров. Эти таймеры позволяют высвободить ресурсы центрального процессора для нужд приложения. Особенно это касается приложений реального времени, таких, как генерация сигнала с ШИМ, управление двигателями, управление тиристорными преобразователями, генерация синусоидальных сигналов и, наконец, сбор данных.
Каждый таймер обычно построен на основе 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, только на выходе таймера сохранится «ВЫСОКИЙ» уровень.