Структура модуля таймера/счетчика ТIMER0 и его взаимосвязь с регистрами ТМR0 и ОРTION является программируемым модулем и содержит следующие компоненты:
• 8-разрядный таймер/счетчик ТМR0 с возможностью чтения и записи как регистр;
• мультиплексор входного сигнала для выбора внутреннего или внешнего тактового сигнала;
• схему выбора фронта внешнего тактового сигнала;
• формирователь запроса прерывания по переполнению регистра ТМR0 с FFh до 00h.
.
Режим таймера выбирается путем сбрасывания в ноль бита Т0CS регистра ОРTION <5>. В режиме таймера ТМR0 инкрементируется каждый командный цикл (без пределителя). После записи информации в ТМR0 инкрементирование его начнется после двух командных циклов. Это происходит со всеми командами, которые производят запись или чтение-модификацию-запись ТМR0 (например, МОVF ТМR0). Избежать этого можно при помощи записи в ТМR0 скорректированного значения. Если ТМR0 нужно проверить на равенство нулю без останова счета, следует использовать инструкцию МОVF ТМR0,W.
Режим счетчика выбирается путем установки в единицу бита Т0CS регистра ОРTION<5>. В этом режиме регистр ТМR0 будет инкрементироваться либо нарастающим, либо спадающим фронтом на выводе RА4/ Т0СКI от внешних событий. Направление фронта определяется управляющим битом Т0SE в регистре ОРТION<4>. При Т0SE = 0 будет выбран нарастающий фронт.
Пределитель может использоваться или совместно с ТМR0, или со сторожевым таймером. Вариант подключения делителя контролируется битом РSA регистра ОРТION<3>. При РSА=0 делитель будет подсоединен к ТМR0. Содержимое делителя программе недоступно. Коэффициент деления пределителя программируется битами РS2...РS0 регистра ОРТION<2:0>. Прерывание по ТМR0 вырабатывается тогда, когда происходит переполнение регистра таймера/счетчика при переходе от FFh к 00h. Тогда устанавливается бит запроса Т0IF в регистре INTCON<2>. Данное прерывание можно замаскировать битом Т0IF в регистре INTCON<5>. Бит запроса Т0IF должен быть сброшен программно при обработке прерывания. Прерывание по ТМR0 не может вывести процессор из режима SLЕЕР потому, что таймер в этом режиме не функционирует.
При РSА=1 делитель будет подсоединен к сторожевому таймеру как постделитель (делитель на выходе).
При использовании пределителя совместно с ТМR0, все команды, изменяющие содержимое ТМR0, обнуляют пределитель. Если пределитель используется совместно с WDТ, команда CLRWDT обнуляет содержимое пределителя вместе с WDТ.
При использовании модуля ТIМЕR0 в режиме счетчика внешних событий необходимо учитывать то, что внешний тактовый сигнал синхронизируется внутренней частотой Fosc. Это приводит к появлению задержки во времени фактического инкрементирования содержимого ТМR0.
Если модуль ТIМЕR0 используется совместно с пределителем, то частота входного сигнала делится асинхронным счетчиком так, что сигнал на выходе пределителя становиться симметричным.