Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к цифрам.doc
Скачиваний:
23
Добавлен:
06.05.2019
Размер:
2.08 Mб
Скачать

1.3. Режим 2

В режиме 2 регистр таймера TLx работает как 8-битный счетчик с автоматической перезагрузкой начального значения из регистра ТНх в регистр TLx. Переполнение регистра TLx не только устанавливает флаг TFx, но и загружает регистр TLx содержимым регистра ТНх, который предварительно инициализируется программно. Перезагрузка не изменяет содержимое регистра ТНх. Работе таймера 0 или таймера 1 в режиме 2 соответствует схема:

Рис. 9.4. Схема таймеров 0 или 1 в режиме 2.

Работа с таймерами во втором режиме не отличается от рассмотренных ранее примеров, поэтому следующий пример инициализации таймера на генерацию частоты с периодом сто микросекунд (10кГц) приводится без комментария.

;Настроить режим работы таймера-------------------------------------------------------

mov TMOD, #00000010b ;перевести таймер T0 во второй режим работы, а T1 - в нулевой

;||||||||

;||||||++---Перевести таймер T0 в режим 8-ми разр. таймера с автозагрузкой

;|||||+-----Синхронизироваться от внутреннего генератора

;|||+-------Запретить управление таймером от ножки INT0

;||++-------Перевести таймер T1 в тринадцатиразрядный режим

;|+---------Синхронизироваться от внутреннего генератора

;+----------Запретить управление таймером от ножки INT1

mov TMOD,#2 ;перевести таймер T0 во второй режим работы, а T1 - в нулевой

mov TH0, #-50 ;Загрузить старший байт таймера

mov TL0, #-50 ;Загрузить младший байт таймера

OjidanTimer:

jnb TF0, OjidanTimer ;Подождать пока не переполнится таймер

cpl P2.6 ;Проинвертировать сигнал на шестой ножке второго порта и

sjmp OjidanTimer ;снова перейти к ожиданию окончания временного интервала

1.4. Режим 3

Таймер 1 при работе в режиме 3 просто хранит свое значение. Эффект такой же как при сбросе бита TR1.

Таймер 0 в режиме 3 представляет собой два раздельных 8 битных счетчика (регистры TL0 и ТН0), Регистр TL0 использует биты управления таймера 0: С/Т0. GATE0, TR0 и TF0. Регистр ТН0 работает только в режиме таймера и использует биты TR1 и TF1 таймера 1. Таким образом, регистр ТН0 управляет прерыванием таймера 1. Логика работы таймера 0 в режиме 3 показана на схеме:

Рис. 9.5. Схема таймерa 0 в режиме 3.

Работа таймера TL0 разрешается, если бит TR0 = 1, а таймера TH0 - если бит TR1 = 1. Таймер 1 при работе таймера 0 в режиме 3 постоянно включен.

Этот режим работы позволяет реализовать два независимых таймера, если таймер 1 используется для работы последовательного порта, но надо сказать, что на практике режим 3 мало интересен.

1.5. Управление таймерами-счётчиками.

Схема управления таймерами 0 и 1 идентична и для таймера T0 приведена на рисунке 9.6. Для схемы управления таймером T1 изменятся только номера управляющих бит (нули будут заменены на 1). В приведенной схеме заштрихованным прямоугольником обозначены внешние выводы микросхемы микроконтроллера.

Рис. 9.6. Схема управления таймерами 0 или 1.

Примечание. INT0 соответствует альтернативная функция вывода Р3.2. INT1 соответствует альтернативная функция вывода Р3.3. T0 соответствует альтернативная функция вывода Р3.4. T1 соответствует альтернативная функция вывода Р3.5.

Из схемы видно, что таймер может включаться и выключаться битами TRx. Таким образом можно уменьшать потребление микросхемы и уровень помех, создаваемый ею. Учитывая, что счетчики таймеров переключаются на высокой частоте, то они могут потреблять до половины тока потребления микроконтроллера. Следует отметить, что при включении и после сброса микроконтроллера работа таймеров запрещена.

Есть возможность управлять работой таймера извне при помощи внешнего вывода T0 для таймера T0 или T1 для таймера T1. Для этого необходимо записать в бит GATEx логическую единицу (не забыв при этом разрешить работу таймера при помощи бита TRx).

Кроме того, таймер может синхронизироваться от внешнего генератора. Для этого в бит управления C/T нужно записать логическую единицу.

Биты включения таймеров TR0 и TR1 размещены в регистре TCON (control - управлять), а биты GATE и C/T в регистре TMOD. Формат регистра TCON приведён на следующем рисунке:

Рис. 9. 7. Формат регистра управления режимами работы таймеров TCON.

Символ

Позиция

Имя и назначение

TF1

TCON.7

Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера/счетчика. Сбрасывается при обслуживании прерывания аппаратно

TR1

TCON.6

Бит управления таймера 1. Устанавливается/сбрасывается программой для пуска/останова

TF0

TCON.5

Флаг переполнения таймера 0. Устанавливается аппаратурно. Сбрасывается при обслуживании прерывания

TR0

TCON.4

Бит управления таймера 0. Устанавливается / сбрасывается программой для пуска/останова таймера/счетчика

IE1

TCON.3

Флаг фронта прерывания 1. Устанавливается аппаратно, когда детектируется срез внешнего сигнала INT1. Сбрасывается при обслуживании прерывания

IT1

TCON.2

Бит управления типом прерывания 1. Устанавливается / сбрасывается программно для определения типа запроса прерывания INT1 (срезу/низким уровнем).

IE0

TCON.1

Флаг фронта прерывания 0. Устанавливается по срезу сигнала INT0. Сбрасывается при обслуживании прерывания

IT1

TCON .0

Бит управления типом прерывания 0. Устанавливается / сбрасывается программно для определения типа  запроса прерывания INT0 (срез/низкий уровень)

Кроме того, схема управления таймерами интересна тем, что позволяет использовать таймеры в качестве измерительных приборов. Рассмотрим эту возможность подробнее.

1.6. Использование таймера в качестве измерителя ширины импульсов

Известно, что измерение длительности импульса можно произвести, подсчитав импульсы эталонной частоты. Принцип измерения длительности импульсов иллюстрируется рис. 9.8.

Рис. 9. 8. Принцип измерения длительности импульсов

Для измерения длительности импульса измеряемый сигнал подаётся на вывод микроконтроллера INTx и в бит управления GATE записывается разрешающий сигнал логической единицы. Таймер/счётчик настраивается в режим таймера записью в бит C/Tx логического нуля. Содержимое таймера обнуляется.

Пример программы измерения длительности импульса приведён на рис. 9. 9.

mov TMOD,#00001001b

;||||||||

;||||||++--Перевести таймер T0 в шестнадцатиразрядный режим

;|||||+----Синхронизироваться от внутреннего генератора

;||||+-----Включать таймер от ножки микроконтроллера INT0

;||++------Перевести таймер T1 в тринадцатиразрядный режим

;|+--------Синхронизироваться от внутреннего генератора

;+---------Запретить управление таймером от ножки INT1

mov TH0, #0 ;Обнулить старший байт таймера

mov TL0, #0 ;Обнулить младший байт таймера

setb TR0 ;Включить измеритель ширины импульса

TstLog0: jnb INT0, TstLog0 ;Подождать начало импульса

TstLog1: jnb INT0, TstLog1 ;Подождать конец импульса

Clr TR0 ;Отключить измеритель ширины импульса

Рис. 9.9. Программа измерения длительности импульсов

Если теперь на вход микроконтроллера INT0 подать импульс с неизвестной длительностью, то в регистрах TH0 и TL0 будет записана его длительность в микросекундах.