2010 Microchip Technology Inc. DS80329B-page 3
TIMER1 MODULE
1. Asynchronous Counter
When Timer1 is started or updated, the timer
needs to see a falling edge from the external clock
source before a rising edge can increment the
counter. If writes to TMR1H and TMR1L are not
completed while the external clock pulse is still
high, Timer1 will miss counting the first clock pulse
after the update.
When using an external crystal, the pulse width
from rising to falling edge is temperature depen-
dent and may decrease with temperature. As a
result, the timer may require an additional oscilla-
tion to overflow.
Code examples are given for the affected devices:
• PIC12/14/16/17 devices – Example 1 and
Example 2
• PIC18 devices – Example 3
Both examples include code to wait for Timer1 to
increment twice between the RTCisr and Update
labels.
In PIC18 devices, it is not possible to reliably
update Timer1 in a low-priority interrupt. A high-
priority interrupt could occur at any time and
unexpectedly delay the TMR1 update.
PIC18 devices also include Timer3 which is
functionally identical to Timer1.
Work around
Switching Timer1 to the main system oscillator
after reloading, the timer ensures the timer will see
a falling edge before switching back to the external
clock source.
Due to the time from Timer1 overflow to the reload
being application specific, wait for the timer to
increment before beginning the reload sequence.
This ensures the timer does not miss a rising edge
during reload. The timing of the clock source
changing is critical and is detailed in Example 1
and Example 2.
EXAMPLE 1: PIC12/14/16/17 CODE EXAMPLE FOR 1 SECOND OVERFLOW PERIOD WITH 32.786
kHZ OSCILLATOR
BTFSC TMR1L,0
GOTO $-1
BTFSS TMR1L,0
GOTO $-1 ;Timer has just incremented, 31 μs before next rising edge to
;complete reload
Update:
BCF T1CON,TMR1CS ;Select system clock for Timer1
BSF TMR1H,7 ;Timer1 high byte 0x80
BCF T1CON,TMR1ON ;Timer1 off
BSF T1CON,TMR1C ;Select external crystal
BSF T1CON,TMR1ON ;Timer1 on
Critical Timing of code sequence for instructions following last write to TMR1L or TMR1H.