Налаштувати таймер/лічильник ТС0 на «0» режим роботи в якості таймера з зовнішнім управлінням. Встановити значення коефіцієнта ділення 512. Увімкнути таймер/лічильник.
При визначенні констант завантаження регістрів ТН0, ТL0 виходимо з того, що регістр ТL0 працює в режимі попереднього подільника з коєфіціентом ділення 32. Тоді регістр ТН0 має забезпечити коефіцієнт ділення 512/32=16.
Константу завантаження регістра TMOD для цього завдання визначають у відповідності з даними, що приведено в табл.5.4.
Таблиця 5.4
Таймер/лічильник 1 | Таймер/лічильник 0 | |||||||
№ біта | ||||||||
Біт | ||||||||
Функція | Програмне управління включенням | Режим таймера | «0» режим роботи | Управління включенням по входу INT0 | Режим таймера | «0» режим роботи |
Текст програми має наступний вигляд.
;---------------------------------------------------------------
;--- Опис констант та змінних
INI_TMOD EQU 00001000b;константа завантаження регістру TMOD
INI_TH0 EQU 16;константа завантаження регістру TH0
;--- Програма
ORG 0H;адреса рестарту після пуску процесора
SJMP START;перехід на початок основної програми
ORG 20H;початкова адреса основної програми
START:
MOV TMOD,#INI_TMOD;ініціалізація регістру TMOD
MOV TL0, #INI_TH0;завантаження регістра TL0
SETB INT0; дозвіл режиму альтернативних функцій;по входу зовнішнього управління ТС0
SETB TR0;ввімкнення таймера/лічильника TC0
END;директива про закінчення програми
;---------------------------------------------------------------
Режим «1»
В першому режимі роботи таймер/лічильник працює як шістнадцятирозрядний лічильник. Режим «1» схожий на режим «0», за винятком того, що в регістрах ТН, ТL використовуються всі 16 біт.
В цьому режимі можна забезпечити формування інтервалу часу тривалістю до 65536 мкс при частоті генератора мікроконтролера 12 МГц.
Нульовий і перший режими роботи таймерів T0 і T1 призначені для формування одиничного інтервалу часу. Якщо виникає необхідність формувати послідовність інтервалів часу для періодичних процесів, то перезавантаження регістрів TH0 і TL0 для завдання потрібного інтервалу часу проводиться програмно, що для коротких інтервалів часу може призвести до значних витрат процесорного часу.