HT46R01/HT46R02/HT46R03
the timer registers before the timer is switched on; this is
because after power-on the initial values of the timer reg-
isters are unknown. After the timer has been initialised
the timer can be turned on and off by controlling the en-
able bit in the timer control register.
woken up from its Power-down condition. To prevent
such a wake-up from occurring, the timer interrupt re-
quest flag should first be set high before issuing the
²HALT² instruction to enter the Power Down Mode.
Timer Program Example
When the Timer/Event counter overflows, its corre-
sponding interrupt request flag in the interrupt control
register will be set. If the timer interrupt is enabled this
will in turn generate an interrupt signal. However irre-
spective 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 condi-
tion. 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 exter-
nal events and if an overflow occurs the device will be
The following example program section is based on the
HT46R02 and HT46R03 devices, which contains two in-
ternal 8-bit Timer/Event Counters. The program shows
how the Timer/Event Counter 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 respective 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.
:
:
; external interrupt vector
org 04h
reti
org 08h
; Timer Counter 0 interrupt vector
jmp tmr0int ; jump here when Timer 0 overflows
org 0ch ; Timer Counter 1 interrupt vector
jmp tmr1int ; jump here when Timer 1 overflows
:
:
org 20h
:
; main program
:
;internal Timer 0 interrupt routine
tmr0int:
:
; Timer 0 main program placed here
:
reti
:
;internal Timer 1 interrupt routine
tmr1int:
:
;Timer 1 main program placed here
:
reti
:
begin:
;setup Timer 0 registers
mov a,09bh ; setup Timer 0 preload value
mov tmr0,a
mov a,081h ; setup Timer 0 control register
mov tmr0c,a ; timer mode and prescaler set to /2
;setup Timer 1 registers
clr tmr1 ; clear timer register to give maximum count value
mov a,080h ; setup Timer 1 control register
mov tmr1c,a ; timer mode - Timer 1 has no prescaler
;setup interrupt register
mov a,00dh ; enable master interrupt and both timer
; interrupts
mov intc0,a
:
:
set tmr0c.4 ; start Timer 0
set tmr1c.4 ; start Timer 1
:
:
Rev. 1.00
23
September 21, 2007