Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микроконтроллеры семейства MCS-51.doc
Скачиваний:
210
Добавлен:
02.05.2014
Размер:
1.05 Mб
Скачать

Раздел III. Средства обмена в микроконтроллерах. Тема 3.1. Таймеры.

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

Обычно для переключения таймера используются тактовые импульсы процессора. Загрузив в таймер начальное значение, можно отсчитывать опре­деленные интервалы времени, фиксируя окончание интервала по моменту переполнения таймера.

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

Если требуется реализовать задержку в 10 mc (0.01с) в системе с тактовой частотой 10 МГц, то можно использовать схему, показанную на рис. 3.1, следующим образом. Сначала надо определить требуемый коэффициент де­ления. При тактовой частоте 10 МГц таймер должен переключиться до пере­полнения 10000 раз, что невозможно для 8-разрядного счетчика. Чтобы обес­печить заданную задержку, необходимо выбрать коэффициент деления для предварительного делителя, который обычно является степенью двойки (то есть 1, 2, 4, 8,...256). Если выбрать коэффициент деления 64, то таймер пере­ключится 156 раз при поступлении на вход делителя 64 х 156 = 9984 тактовых импульсов, что достаточно близко к требуемой величине. Более точное зна­чение задержки может быть достигнуто путем добавления команд NOP или других команд, используемых для заполнения определенных промежутков времени. Для отсчета заданного времени таймер можно очистить, а затем непрерывно сравнивать его содержимое со значением 156.

Рис. 3.1 - Структура таймера в микроконтроллере.

Более эффективный способ отсчета - загрузить в таймер число 100 = 256 - 156 и ждать, когда флаг прерывания по переполнению таймера установится в 1. Используя данный метод, можно реализовать мультизадачный режим вы­полнения программ. Переключение задач будет производиться, когда тай­мер отсчитает 10 мс.

Не рекомендуется использовать этот метод для создания часов реального времени. Так как при перезагрузке таймера значение коэффициента деления делителя неизвестно, а его содержимое сбрасывается в 0 при записи в ре­гистр таймера, то при отсчете времени могут возникать ошибки. Вместо этого лучше дать возможность таймеру считать непрерывно (тогда делитель никогда не сбрасывается), а при его переполнении увеличивать содержимое счетчика часов реального времени. Когда программе требуется узнать текущее время, она выбирает и преобразует содержимое этого счетчика, получая правильное значение времени. Такой метод используется в IBM PC, где переключение («тик») таймера происходит 18,2 раз в секунду.

Глядя на рис.3.1 можно заметить, что таймер может быть использован для подсчета внешних событий, если использовать для его переключения внешний сигнал.

Если микроконтроллер содержит два таймера, то можно легко реализо­вать простой тахометр - счетчик числа событий, происходящих за единицу времени (рис. 3.2). Программа реализации тахометра сначала сбрасывает в 0 содержимое счетчика TMR2, а затем устанавливает определенный интервал времени для срабатывания таймера TMR1. По истечении этого интервала TMRI срабатывает (устанавливается в 1 бит переполнения TMR1) , вызывая счи­тывание текущего содержимого из TMR2.

Рис. 3.2 - Реализация тахометра.

Таймеры в микроконтроллерах часто используются для ввода-вывода сиг­налов с широтно-импульсной модуляцией PWM (Pulse Width Modulated). PWM сигнал часто используется для передачи значения аналогового сигнала в циф­ровую систему или из нее. Сигнал имеет повторяющуюся форму, где дли­тельность импульса пропорциональна значению передаваемой аналоговой величины (рис. 3.3).

PWM-сигналы часто используется для управления электродвигателями, задавая скорость вращения или положение вала в сервоприводе. На рис. 3.4 показана схема генерации PWM-сигнала на выходе микроконтроллера. Пока заданное значение «длительности импульса» больше, чем содержимое тай­мера, на выходе этой схемы будет поддерживаться высокий потенциал (вер­шина импульса). Когда содержимое таймера станет равно или больше, чем заданное значение «периода», то таймер сбрасывается в 0, и процесс повто­ряется. Такой метод получения PWM-сигнала требует минимального участия процессора - надо только задать необходимые значения периода и длитель­ности импульса. При этом значение длительности импульса может изменять­ся процессором в любое время без остановки процесса вывода.

Рис. 3.3 - Сигнал с широтно-импульсной модуляцией PWM.

Рис. 3.4 - Схема генератора PWM-сигнала

Если необходимо сформировать прямоугольный импульсный сигнал оп­ределенной частоты, то можно использовать ту же схему, задав период в два раза больше длительности импульса.

Измерение длительности импульса PWM-сигнала может быть произведе­но с помощью схемы, приведенной на рис. 3.5. В этой схеме на вход RESET таймера подается сигнал сброса до тех пор, пока входной сигнал имеет низ­кий уровень. При поступлении высокого уровня входного сигнала таймер за­пускается, и его содержимое поступает в регистр длительности импульса. По окончании импульса, когда на входе снова устанавливается низкий уровень, содержимое таймера сохраняется в регистре длительности импульса, а тай­мер сбрасывается в 0 до прихода следующего импульса. Для упрощения на схеме не показаны некоторые элементы задержки, которые гарантируют, что значение таймера будет записано в регистр длительности до его сброса.

Рис. 2.5 - Схема измерения длительности импульса.

Самостоятельная работа № 1.