the next timer clock pulse arrives. As a result, there may be small differences in measured values
requiring programmers to take this into account during programming. The same applies if the timer is
configured to be in the event counting mode, which again is an external event and not synchronised
with the internal system or timer clock.
When the Timer/Event Counter is read, or if data is written to the preload register, the clock is inhibited
to avoid errors, however as this may result in a counting error, this should be taken into account by the
programmer. Care must be taken to ensure that the timers are properly initialized before using them for
the first time. The associated timer enable bits in the interrupt control register must be properly set
otherwise the internal interrupt associated with the timer will remain inactive. The edge select, timer
mode and clock source control bits in timer control register must also be correctly set to ensure the
timer is properly configured for the required application. It is also important to ensure that an initial
value is first loaded into the timer registers before the timer is switched on; this is because after
power-on the initial values of the timer registers are unknown. After the timer has been initialized the
timer can be turned on and off by controlling the enable bit in the timer control register.
When the Timer/Event Counter overflows, its corresponding interrupt request flag in the interrupt
control register will be set. If the Timer/Event Counter interrupt is enabled this will in turn generate an
interrupt signal. However irrespective of whether the interrupts are enabled or not, a Timer/Event
Counter overflow will also generate a wake-up signal if the device is in a Power-down condition. This
situation may occur if the Timer/Event Counter is in the Event Counting Mode and if the external
signal continues to change state. In such a case, the Timer/Event Counter will continue to count these
external events and if an overflow occurs the device will be woken up from its Power-down condition.
To prevent such a wake-up from occurring, the timer interrupt request flag should first be set high
before issuing the
²
HALT
²
instruction to enter the Idle/Sleep Mode.
Timer Program Example-Timer/Event Counter 0
The program shows how the Timer/Event Counter 0 registers are setup along with how the interrupts
are enabled and managed. Note how the Timer/Event Counter is turned on, by setting bit 4 of the Timer
Control Register. The Timer/Event Counter can be turned off in a similar way by clearing the same bit.
This example program sets the Timer/Event Counters to be in the timer mode, which uses the internal
system clock as their clock source.
PFD Programming Example
org
04h
; external interrupt vector
org
08h
; Timer Counter 0 interrupt vector
jmp
tmr0int
; jump here when Timer 0 overflows
:
:
org
20h
; main program
:
:
;internal Timer 0 interrupt routine
tmr0int:
:
; Timer 0 main program placed here
:
:
begin:
;setup Timer 0 registers
mov
a,09bh
; setup Timer 0 preload value
mov
tmr,a
mov
a,001h
; setup Timer 0 control register
mov
tmrc,a
; timer mode and prescaler set to /2
;setup interrupt register
mov
a,00dh
; enable master interrupt and both timer interrupts
mov
intc0,a
:
:
set
tmrc.4
; start Timer 0
Rev. 1.50
74
April 28, 2020
BS83B08-3/B12-3/B16-3/B16G-3/C24-3
8-Bit Touch Key Flash MCU