Intel 80C188XL User Manual
Page 248

9-19
TIMER/COUNTER UNIT
Example 9-1. Configuring a Real-Time Clock (Continued)
lib_80186 segment public ’code’
assume cs:lib_80186, ds:data
public _set_time
_set_time proc far
push
bp
;save caller’s bp
mov
bp, sp
;get current top of stack
hour
equ word ptr[bp+6]
;get parameters off stack
minute equ word ptr[bp+8]
second equ word ptr[bp+10]
T2Compare equ word ptr[bp+12]
push
ax
;save registers used
push
dx
push
si
push
ds
xor
ax, ax
;set interrupt vector
mov
ds, ax
mov
si, 4*timer_2_int
mov
word ptr ds:[si], offset
timer_2_interrupt_routine
inc
si
inc
si
mov
ds:[si], cs
pop
ds
mov
ax, hour
;set time
mov
_hour, al
mov
ax, minute
mov
_minute, al
mov
ax, second
mov
_second, al
mov
_msec, 0
mov
dx, T2CNT
;clear Count register
xor
ax, ax
out
dx, al
mov
dx, T2CMPA
;set maximum count value
mov
ax, T2Compare
;see note in header above
out
dx, al
mov
dx, T2CON
;set up the control word:
mov
ax, 0E001H
;enable counting,
out
dx, al
;generate interrupt on MC,
;continuous counting
mov
dx, TCUCON
;set up interrupt controller
xor
ax, ax
;unmask highest priority interrupt
out
dx, al