
S1C88348/317/316/308 TECHNICAL SOFTWARE
EPSON
II-81
12 PROGRAMMABLE TIMER
ld
a,sc
and
a,#00111111b
or
a,#10000000b
ld
sc,a
;i0 flag clear (en. /irq3 intr.)
xor
a,a
ld
[lod ovf_flag],a
;overflow flag clear
;************************************************************************
;*** start event counter (timer 0) and programmable timer 1 interrupt
;
(user program)
;
loop:
ld
a,[lod ovf_flag]
cp
a,#0ffh
;event counter overflow ?
jrs
nz,evcnt_init00
;--> normal
;************************************************************************
;*** event counter overflow processing
;
(user program)
;
jrs
event_init02
;************************************************************************
;*** normal processing
evcnt_init00:
;
(user program)
;
event_init02:
jrs
loop
;-->
;************************************************************************
;*** end processing
and
[br:low pt_mode1],#11111110b
;stop event counter
and
[br:low pt_mode2],#11111110b
;stop timer 1
evcnt_init01:
carl
osc3toosc1
;change osc3 to osc1 ***
ret
(3) Interrupt processing for 8-bit event counter
;************************************************************************
;*
*
;*
programmable timer 1 interrupt processing routine (reload mode)
*
;*
*
;************************************************************************
pt1_intr:
push
ale
;
ld
br,#br_io
;set br reg. address to 0ffxxh
;
ld
a,[br:low ptd0]
;read event counter counting data
ld
[lod count],a
;set present event counter data
and
[br:low pt_mode1],#11111110b
;event counter stop
or
[br:low pt_mode1],#00000010b
;set event counter next data (max.)
ld
a,[lod pre_count]
sub
a,[lod count]
;a-reg. = input count number (4 msec)
;
programmable timer 1 processing (based on event counter counting data)
;
ld
a,[lod count]
ld
[lod pre_count],a
;move event counter data p(i-1) <- p(i)
and
[br:low intr_fac1],#10000000b
;clear fpt1 interrupt flag
pop
ale
rete
Source List