Автор работы: Пользователь скрыл имя, 11 Апреля 2011 в 12:22, реферат
В настоящее время среди всех 8-разрядных микроконтроллеров - семейство MCS-51 является несомненным чемпионом по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии n-МОП.
Рисунок 1. Формат
регистра управления режимами работы
таймеров TMOD.
Так как управление таймерами 0 и 1 полностью идентично, то приведём назначение битов по именам:Символ Позиция бита Имя и назначение
GATE TMOD.7 для таймера 1 и TMOD.3 для таймера 0
Управление блокировкой таймера от ножки INTx. Если бит установлен в 1, то таймер/счетчик "x" разрешен до тех пор, пока на входе "lNTx" высокий уровень и бит управления "TRx" установлен. Если бит сброшен в 0, то Т/С разрешается, как только бит управления "TRx" устанавливается в 1.
С/Т TMOD.6 для таймера 1 и TMOD.2 для таймера 0
Бит выбора режима таймера или счетчика событий. Если бит сброшен в 0, то таймер работает от внутреннего генератора, если установлен в 1, то работает от внешних сигналов на входе "Tx"
M1 TMOD.5 для таймера 1 и TMOD.1 для таймера 0 Выбор режима работы таймера M1 M0
0 0
13 битный таймер/счетчик "TLx" работает как 5-битный предварительный делитель
0 1
16 битный таймер/счетчик. "THx" и "TLx" включены последовательно
1 0
8-битный автоперезагружаемый
таймер/счетчик. "THx" хранит значение,
которое должно быть
1 1
Таймер/счетчик
1 останавливается. Таймер/счетчик 0: TL0
работает как 8-битный таймер/счетчик,
и его режим определяется управляющими
битами таймера 0. TH0 работает только как
8 битный таймер, и его режим определяется
управляющими битами таймера 1
M0 TMOD.4 для Т/С1 и TMOD.0
для Т/С0
Режим 0
В нулевом режиме таймер работает как 13-битный суммирующий счётчик. Этот счётчик состоит из 8 бит регистра ТНх и младших 5 бит регистра TLx, где x в обозначении регистра заменяется на 0 или 1 в зависимости от того таймера, которым мы управляем. Старшие 3 бита регистров TLx не определены и игнорируются. Установка запускающего таймер флага TR0 или TR1 не очищает эти регистры. Работе таймера 0 или таймера 1 в режиме 0 соответствует схема:
Рисунок 2. Схема
таймеров 0 или 1 в режиме 0.
Этот режим
был введён для совместимости
с устаревшим семейством микроконтроллеров
MCS-48 для облегчения переноса уже
разработанных программ на новые
процессоры и поэтому в настоящее
время не используется. Тем не менее,
в этом режиме можно обеспечить формирование
интервала времени длительностью до 8096
мс при частоте задающего генератора 12
МГц.
Когда содержимое
счетчика изменяется из состояния все
"1" в состояние все "0" ,
то устанавливается (принимает значение
"1") флаг прерывания таймера TF0 или
TF1.
Обычно пользователя интересует не максимальный интервал времени, а свой конкретный интервал времени. Для уменьшения интервала времени в регистры таймера можно предварительно занести число и тем самым сформировать произвольный интервал времени. Рассмотрим пример подготовки таймера T0 для формирования временного интервала 5мс.
;Настроить режим
работы таймера----------------
mov TMOD,#00000000b ;настроить таймеры T0 и T1 на нулевой режим работы
;||||||||
;||||||++-------Перевести
;|||||+---------
;||||+----------Запретить
;||++-----------Перевести
;|+-------------
;+--------------Запретить управление таймером от ножки INT1
;Настроить таймер
на генерацию 5-ти
mov TH0, #HIGH(-5000) ;Загрузить старший байт таймера
mov TL0,
#LOW(-5000) ;Загрузить младший байт
таймера
В рассмотренном примере для расщепления 16-ти битной константы на два отдельных байта были использованы функции выделения старшего и младшего байта. Эти функции присутствуют в большинстве ассемблеров для микроконтроллеров MCS-51. Если же язык программирования не содержит в своём составе подобные функции, то можно для выделения байтов воспользоваться операцией деления на 256.
mov TH0, #-5000/256 ;Загрузить старший байт таймера
mov TL0,
#-(5000-5000/256) ;Загрузить младший байт
таймера
Режим 1
В первом режиме
работы таймер работает как шестнадцатиразрядный
счётчик. Режим 1 похож на режим 0, за
исключением того, что в регистрах
таймера использует все 16 бит. В этом
режиме регистры ТНх и TLx также включены
друг за другом. Работе таймера 0 или таймера
1 в режиме 1 соответствует схема:
Рисунок 3. Схема
таймеров 0 или 1 в режиме 1.
В этом режиме можно
обеспечить формирование интервала
времени длительностью до 65536 мкс
при частоте задающего
Рассмотрим пример использования таймера T0 для формирования временного интервала 15мс.
;Настроить режим
работы таймера----------------
mov TMOD,#00000001b ;перевести таймер T0 в первый режим работы, а T1 - в нулевой
;||||||||
;||||||++-------Перевести
;|||||+-----------
;||||+------------Запретить управление таймером от ножки INT0
;||++-------------Перевести
;|+----------------
;+-----------------Запретить
;Настроить таймер
на генерацию 15-ти
mov TH0, #HIGH(-15000) ;Загрузить старший байт таймера
mov TL0, #LOW(-15000) ;Загрузить младший байт таймера
OjidanTimer:
jnb TF0,
OjidanTimer ;Подождать пока не переполнится
таймер
В рассмотренном
примере переполнение таймера произойдёт
через 15000 циклов процессора, то есть через
15 мс. Программа будет постоянно
проверять состояние флага
Нулевой и первый
режимы работы таймеров T0 и T1 предназначены
для формирования одиночного интервала
времени. Если возникает необходимость
формировать последовательность интервалов
времени для периодических процессов,
то загрузка регистров TH0 и TL0 для задания
нужного интервала времени производится
программно, что для коротких интервалов
времени может привести к значительным
затратам процессорного времени.
Для формирования
последовательности одинаковых интервалов
времени используется режим работы таймера
с перезагрузкой - режим 2.
Режим 2
В режиме 2 регистр
таймера TLx работает как 8-битный счетчик
с автоматической перезагрузкой
начального значения из регистра ТНх
в регистр TLx. Переполнение регистра
TLx не только устанавливает флаг TFx, но
и загружает регистр TLx содержимым регистра
ТНх, который предварительно инициализируется
программно. Перезагрузка не изменяет
содержимое регистра ТНх. Работе таймера
0 или таймера 1 в режиме 2 соответствует
схема:
Рисунок 4. Схема
таймеров 0 или 1 в режиме 2.
Работа с таймерами во втором режиме не отличается от рассмотренных ранее примеров, поэтому следующий пример инициализации таймера на генерацию частоты с периодом сто микросекунд (10кГц) приводится без комментария.
;Настроить режим
работы таймера----------------
mov TMOD, #00000010b ;перевести таймер T0 во второй режим работы, а T1 - в нулевой
;||||||||
;||||||++---Перевести таймер T0 в режим 8-ми разр. таймера с автозагрузкой
;|||||+-----
;|||+-------Запретить
;||++-------Перевести таймер T1 в тринадцатиразрядный режим
;|+---------
;+----------Запретить
mov TMOD,#2 ;перевести таймер T0 во второй режим работы, а T1 - в нулевой
mov TH0, #-50
;Загрузить старший байт
mov TL0, #-50
;Загрузить младший байт
OjidanTimer:
jnb TF0, OjidanTimer ;Подождать пока не переполнится таймер
cpl P2.6 ;Проинвертировать сигнал на шестой ножке второго порта и
sjmp OjidanTimer
;снова перейти к ожиданию
Режим 3
Таймер 1 при
работе в режиме 3 просто хранит свое
значение. Эффект такой же как при
сбросе бита TR1.
Таймер 0 в режиме 3 представляет собой два раздельных 8 битных счетчика (регистры TL0 и ТН0), Регистр TL0 использует биты управления таймера 0: С/Т0. GATE0, TR0 и TF0. Регистр ТН0 работает только в режиме таймера и использует биты TR1 и TF1 таймера 1. Таким образом, регистр ТН0 управляет прерыванием таймера 1. Логика работы таймера 0 в режиме 3 показана на схеме:
Рисунок 5. Схема
таймерa 0 в режиме 3.
Работа таймера
TL0 разрешается, если бит TR0 = 1, а таймера
TH0 - если бит TR1 = 1. Таймер 1 при работе
таймера 0 в режиме 3 постоянно включен.
Этот режим
работы позволяет реализовать два
независимых таймера, если таймер 1
используется для работы последовательного
порта, но надо сказать, что на практике
режим 2 мало интересен.
Управление таймерами-
Схема управления
таймерами 0 и 1 идентична и для таймера
T0 приведена на рисунке 6. Для схемы управления
таймером T1 изменятся только номера управляющих
бит (нули будут заменены на 1). В приведенной
схеме заштрихованным прямоугольником
обозначены внешние ножки микросхемы
микроконтроллера
Рисунок 5. Схема
таймерa 0 в режиме 3.
Работа таймера
TL0 разрешается, если бит TR0 = 1, а таймера
TH0 - если бит TR1 = 1. Таймер 1 при работе
таймера 0 в режиме 3 постоянно включен.
Этот режим
работы позволяет реализовать два
независимых таймера, если таймер 1
используется для работы последовательного
порта, но надо сказать, что на практике
режим 2 мало интересен.
Управление
таймерами-счётчиками.
Схема управления таймерами 0 и 1 идентична и для таймера T0 приведена на рисунке 6. Для схемы управления таймером T1 изменятся только номера управляющих бит (нули будут заменены на 1). В приведенной схеме заштрихованным прямоугольником обозначены внешние ножки микросхемы микроконтроллера.
Рисунок 6. Схема
управления таймерами 0 или 1.
Из схемы видно,
что таймер может включаться и выключаться
битами TRx. Таким образом можно уменьшать
потребление микросхемы и уровень помех,
создаваемый ею. Учитывая, что счетчики
таймеров переключаются на высокой частоте,
то они могут потреблять до половины тока
потребления микроконтроллера. Следует
отметить, что при включении и после сброса
микроконтроллера работа таймеров запрещена.
Есть возможность
управлять работой таймера
Кроме того, таймер
может синхронизироваться от внешнего
генератора. Для этого в бит
управления C/T нужно записать логическую
единицу.