Этот режим был введен для совместимости с устаревшим семейством микроконтроллеров MCS-48, чтобы облегчить перенос уже разработанных программ на новые процессоры, и поэтому в настоящее время не используется. Тем не менее, в этом режиме можно обеспечить формирование одиночного интервала времени длительностью до 8096 мс при частоте задающего генератора 12 МГц.
Обычно пользователя интересует не максимальный интервал времени, а некоторый конкретный временной промежуток. Для уменьшения интервала времени в регистры таймера можно предварительно занести число и тем самым сформировать промежуток времени нужной длительности.
Рассмотрим пример подготовки таймера Т0 для формирования временного интервала 5мс:
;Настроить таймер на генерацию 5-миллисекундного интервала времени
MOV TH0, #HIGH(-5000) ;Загрузить старший байт таймера
MOV TL0, #LOW(-5000) ;Загрузить младший байт таймера
В рассмотренном исходном тексте программы используется двоичное представление управляющей константы. Это позволяет показать каждый отдельный бит константы, тем более, что разные биты управляют различными узлами таймера. Для того чтобы программа была более понятной, в комментарии поясняется назначение отдельных битов константы.
В исходном тексте программы, особенно при написании его под Windows, невозможно использовать символы псевдографики, поэтому для указания, к какому же из битов константы относится комментарий, используются символы «-» и «|». Для перехода от горизонтальной черты к вертикальной используется символ «+». В случае, когда для управления блоком таймера требуется несколько битов константы, в одной строке может быть использовано несколько символов «+».
При настройке таймера требуется загрузить 16-битную константу в счетчик таймера. Однако в системе команд микроконтроллера существуют только команды загрузки 8-битной константы. Для расщепления 16-битной константы на два отдельных байта в приведенном участке программы были использованы операторы выделения старшего и младшего байта HIGH и LOW соответственно. Эти функции присутствуют в большинстве языков программирования ассемблера, предназначенных для микроконтроллеров MCS-51. Если же язык программирования не содержит в своем составе подобные функции, то можно для выделения байтов воспользоваться операцией деления на 256:
MOV TH0, #-5000/256 ;Загрузить старший байт константы в старший байт таймера
MOV TL0, #-(5000–5000/256) ;Загрузить младший байт константы в младший байт таймера
Режим 1
В режиме 1 таймер работает как 16-разрядный счетчик. Этот режим похож на режим 0, за исключением того, что в регистрах таймера использует все 16 битов. В этом режиме регистры ТНх и TLx также включены последовательно друг за другом. Работе таймера Т0 или таймера T1 в режиме I соответствует схема, приведенная на рис. 6.15. На этой схеме изображен таймер Т0.
Рис. 6.15.
В этом режиме можно обеспечить формирование интервала времени длительностью до 65536 мкс при частоте задающего генератора 12 МГц.
Рассмотрим пример использования таймера Т0 для формирования временного интервала 15 мс.
;Настроить таймер на генерацию 15-миллисекундного интервала времени
MOV TH0, #HIGH(-15000) ;Загрузить старший байт константы в старший байт таймера
MOV TL0, #LOW(-15000) ;Загрузить младший байт константы в младший байт таймера
OjidanTimer:
JNB TF0, OjidanTimer ;Подождать пока не переполнится таймер
В рассмотренном примере переполнение таймера произойдет через 15000 циклов процессора, т. е. при частоте тактового генератора микроконтроллера, равной 12 МГц, через 15 мс. Программа будет постоянно проверять состояние флага переполнения таймера и, как только он установится в единицу, перейдет к выполнению следующей команды. Это не самый лучший вариант использования таймера, но для иллюстрации его настройки для работы в режиме 1 вполне подходит.
Режимы 0 и 1 таймеров Т0 и T1 предназначены для формирования одиночного интервала времени. Если требуется формировать периодическую последовательность интервалов времени, то надо обеспечить программную загрузку регистров ТН0 и TL0 для задания нужного интервала времени, что для коротких интервалов времени может привести к значительным затратам процессорного времени.