Описанное выше применение таймеров/счетчиков микроконтроллеров AVR справедливо также и для таймеров микроконтроллеров PIC. Здесь используются аналогичные принципы измерения ширины и частоты импульсов, а также широтно-импульсной модуляции, режимов сравнения и захвата.
В микроконтроллерах PIC могут использоваться три таймера: TMR0, TMR1 и TMR2.
TMR0
TMR0 (рис. 4.9) – это 8-разрядный таймер/счетчик. Таким образом, счет для него ограничен диапазоном 0-255. Его тактирование реализуется от внешнего источника или на основании такта системной синхронизации.
Рис. 4.9. Схема таймера/счетчика TMR0
Для управления работой таймера TMR0 используются следующие разряды регистра OPTION_REG:
· разряд 5 – T0CS – определяет выбор источника синхроимпульсов (0 – внутренний; 1 – внешний на входе TOCKI);
· разряд 4 – T0SE – определяет выбор фронта, по которому происходит увеличение содержимого счетного регистра TMR0 (0 – по нарастающему; 1 – по ниспадающему фронту тактового сигнала);
· разряд 3 – PSA – использование предварительного делителя частоты (0 – делитель используется для управления таймером TMR0; 1 – для управления сторожевым таймером);
Для управления прерываниями от таймера TMR0 используются следующие разряды регистра INTCON:
· разряд 2 – TOIF – флаг прерывания при переполнении TMR0;
· разряд 5 – TOIE – флаг разрешения прерывания при переполнении TMR0;
· разряд 7 – GIE – флаг общего разрешения прерываний.
TMR1
TMR1 (рис. 4.11) – это 16-разрядный таймер/счетчик, который может использоваться для формирования запросов на прерывание, подобно TMR0, или же работать в режимах захвата, сравнения и ШИМ.
Тактирование таймера TMR1 осуществляется от сигнала системной синхронизации или от специального генератора, предназначенного для работы с относительно медленными программными приложениями. Как правило, используется кварцевый резонатор частотой 32,768 кГц.
Для управления таймером TMR1 используется регистр T1CON (рис. 4.12). Назначение отдельных разрядов регистра T1CON:
· Tl SYNC – включение/отключение синхронизация специального генератора с генератором импульсов системной синхронизации (0 – включена; 1 – отключена);
· T10SCEN – разрешение/запрет тактирования таймера TMR1 от специального генератора (0 – генератор отключен; 1 – тактирование разрешено);
T1CKPS0, T1CKPS1 – выбор коэффициента деления частоты (табл. 4.7).
Рис. 4.11. Схема таймера/счетчика TMR1
–
–
T1CKPS1
T1CKPS0
T10SCEN
T1SYNC
TMR1CS
TMR1ON
Рис. 4.12. Регистр T1CON микроконтроллеров PIC
Таблица 4.7. Назначение разрядов T1CKPS0 - T1CKPS1 регистра T1CON
T1CKPS1
T1CKPS0
Коэффициент деления частоты тактового сигнала
Счетный регистр таймера TMR1 представляет собой регистровую пару TMR1H, TMR1L, а управление прерываниями осуществляется с помощью разрядов регистров PIR1 и РIЕ1:
Регистр PIR1:
· разряд 0 – TMR1IF – флаг переполнения TMR1;
· разряд 2 – ССР 1 IF – флаг прерывания при возникновении захвата по входу/
Регистр PIE1:
· разряд 0 – TMR1IE – флаг разрешения прерывания при переполнении TMR1;
· разряд 2 – ССР НЕ – флаг разрешения прерывания при возникновении захвата по" входу.
TMR2
Назначение таймера TMR2 (рис. 4.13) – измерение временных интервалов для реализации ШИМ, обеспечения определенной скорости обмена по последовательному порту и т.п. В этом смысле он подобен таймеру TMR0.
Таймер TMR2 тактируется импульсами, следующими с частотой такта системной синхронизации, деленной на четыре. Каждый раз, когда содержимое счетного регистра TMR2 совпадает с содержимым регистра PR2, таймер автоматически сбрасывается в исходное (нулевое) состояние.
Рис. 4.13. Схема таймера/счетчика TMR2
При каждом совпадении TMR2 и PR2 генерируется запрос на прерывание, частоту возникновения которого можно также масштабировать с помощью выходного делителя частоты.
Для управления таймером TMR2 используется регистр T2CON (рис. 4.14).