TIMER/COUNTER UNIT

sti

 

;enable interrupts

pop

si

;restore saved registers

pop

dx

 

pop

ax

 

pop

bp

;restore caller’s bp

ret

 

 

_set_time endp

 

timer_2_interrupt_routine proc far

 

push

ax

;save registers used

push

dx

 

cmp

_msec, 99

;has 1 sec passed?

jae

bump_second

;if above or equal...

inc

_msec

 

jmp

short reset_int_ctl

 

bump_second:

 

 

mov

_msec, 0

;reset millisecond

cmp

_minute, 59

;has 1 minute passed?

jae

bump_minute

 

inc

_second

 

jmp

short reset_int_ctl

 

bump_minute:

 

 

mov

_second, 0

;reset second

cmp

_minute, 59

;has 1 hour passed?

jae

bump_hour

 

inc

_minute

 

jmp

short reset_int_ctl

 

bump_hour:

 

 

mov

_minute, 0

;reset minute

cmp

_hour, 12

;have 12 hours passed?

jae

reset_hour

 

inc

_hour

 

jmp

reset_int_ctl

 

reset_hour:

 

 

mov

_hour, 1

;reset hour

reset_int_ctl:

 

mov

dx, EOI

 

mov

ax, 8000h

;non-specific end of interrupt

out

dx, al

 

pop

dx

 

pop

ax

 

iret

 

 

timer_2_interrupt_routine endp

lib_80186 ends end

Example 9-1. Configuring a Real-Time Clock (Continued)

9-20

Page 249
Image 249
Intel 80C186XL, 80C188XL user manual Timer2interruptroutine proc far