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

1.1. Режим 0

В нулевом режиме таймер работает как 13-битный суммирующий счётчик. Этот счётчик состоит из 8 бит регистра ТНх и младших 5 бит регистра TLx, где x в обозначении регистра заменяется на 0 или 1 в зависимости от того таймера, которым мы управляем. Старшие 3 бита регистров TLx не определены и игнорируются. Установка запускающего таймер флага TR0 или TR1 не очищает эти регистры. Работе таймера 0 или таймера 1 в режиме 0 соответствует схема:

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

Этот режим был введён для совместимости с устаревшим семейством микроконтроллеров MCS-48 для облегчения переноса уже разработанных программ на новые процессоры и поэтому в настоящее время не используется. Тем не менее, в этом режиме можно обеспечить формирование интервала времени длительностью до 8096 мс при частоте задающего генератора 12 МГц.

Когда содержимое счетчика изменяется из состояния все "1" в состояние все "0" , то устанавливается (принимает значение "1") флаг прерывания таймера TF0 или TF1.

Обычно пользователя интересует не максимальный интервал времени, а свой конкретный интервал времени. Для уменьшения интервала времени в регистры таймера можно предварительно занести число и тем самым сформировать произвольный интервал времени. Рассмотрим пример подготовки таймера T0 для формирования временного интервала 5мс.

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

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

;||||||||

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

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

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

;||++-----------Перевести таймер 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.2. Режим 1

В первом режиме работы таймер работает как шестнадцатиразрядный счётчик. Режим 1 похож на режим 0, за исключением того, что в регистрах таймера использует все 16 бит. В этом режиме регистры ТНх и TLx также включены друг за другом. Работе таймера 0 или таймера 1 в режиме 1 соответствует схема:

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

В этом режиме можно обеспечить формирование интервала времени длительностью до 65536 мкс при частоте задающего генератора 12 МГц.

Рассмотрим пример использования таймера T0 для формирования временного интервала 15мс.

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

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

;||||||||

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

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

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

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

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

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

;Настроить таймер на генерацию 15-ти миллисекундного интервала времени-----------------

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

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

OjidanTimer:

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

В рассмотренном примере переполнение таймера произойдёт через 15000 циклов процессора, то есть через 15 мс. Программа будет постоянно проверять состояние флага переполнения таймера и как только он установится в единицу, перейдёт к выполнению следующей команды.

Нулевой и первый режимы работы таймеров T0 и T1 предназначены для формирования одиночного интервала времени. Если возникает необходимость формировать последовательность интервалов времени для периодических процессов, то загрузка регистров TH0 и TL0 для задания нужного интервала времени производится программно, что для коротких интервалов времени может привести к значительным затратам процессорного времени.

Для формирования последовательности одинаковых интервалов времени используется режим работы таймера с перезагрузкой - режим 2.