Intel 80C186XL Computer Hardware User Manual


 
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