TMR0 – 8-и разрядный таймер/счетчик.
Основные особенности:
1. 8-и разрядный
2. Возможно чтение и запись текущего значения счетчика
3. Наличие 8-и разрядного предделителя
4. Возможность выбора источника тактового сигнала (внешний (через порт) и внутренний)
5. Выбор активного фронта внешнего тактового сигнала (задний фронт и передний фронт)
6. Генерирование прерывания по переполнению (переход от FFh к 00h)
Биты управление находятся в регистре OPTION_REG
Структура регистра OPTION_REG:
T0CS – выбор тактового сигнала (1 – внешний тактовый сигнал (T0CKI), 0 – внутренний (CLKOUT))
T0SE – выбор фронта приращения при внешнем тактовом сигнале (1 – по заднему фронту (с высокого к низкому уровню), 0 – по переднему)
PSA – выбор включения предделителя (1 – включен перед WDT(сторожевой таймер), 0 – перед TMR0).
PS2:PS0 – устанавливают коэффициент деления для предделителя
Примечание: Если предварительный делитель включен перед WDT, то коэффициент деления тактового сигнала для TMR0 равен 1:1.
Когда бит T0CS сброшен в ‘0’ (OPTION_REG<5>), TMR0 работает от внутреннего тактового сигнала. Приращение счетчика TMR0 происходит в каждом машинном цикле (если предделитель отключен). После записи в TMR0 приращение счетчика запрещено два следующих цикла.
Любая запись в регистр TMR0 вызовет запрещение приращения таймера TMR0 в течение двух следующих машинных циклов (2Tcy). Т.е. после записи нового значения в TMR0 таймер не инкрементируется пока не определено, что 3-я команда не циклически повторяющаяся. Если предделитель включен перед TMR0, то запись в регистр TMR0 вызовет немедленное изменение TMR0 и сброс предделителя.
Приращение TMR0 и предделителя запрещено в течение 2-х машинных циклов (2Tcy), после записи в TMR0. Например, если коэффициент предделителя равен 2, то после операции записи в регистр TMR0 приращение таймера не будет происходить в течение 4 циклов для TMR0). Далее таймер работает в нормальном режиме.
Пример управления таймером: