TIMER/COUNTER UNIT

$mod186

name example_80186_family_timer_code

;FUNCTION: This function sets up the timer and interrupt controller

;to cause the timer to generate an interrupt every

;10 milliseconds and to service interrupts to

;implement a real time clock.

;

;Timer 2 is used in this example because no input or

;output signals are required.

;

;SYNTAX: extern void far set_time(hour, minute, second, T2Compare)

;

;INPUTS: hour - hour to set time to.

;minute - minute to set time to.

;second - second to set time to.

;T2Compare - T2CMPA value (see note below)

;OUTPUTS: None

;NOTE:

Parameters are passed on the stack as required by

;high-level languages

;For a CLKOUT of 16Mhz,

;

 

f(timer2)

= 16Mhz/4

;

 

 

= 4Mhz

;

 

 

= 0.25us for T2CMPA = 1

;

 

 

 

;

 

T2CMPA(10ms)

= 10ms/0.25us

;

 

 

= 10e-3/0.25e-6

;

 

 

= 40000

;substitute register offsets

 

 

T2CON

equ xxxxh

;Timer 2 Control register

 

T2CMPA

equ xxxxh

;Timer 2 Compare register

 

T2CNT

equ xxxxh

;Timer 2 Counter register

 

TCUCON

equ xxxxh

;Int. Control register

 

EOI

equ xxxxh

;End Of Interrupt register

 

INTSTS

equ xxxxh

;Interrupt Status register

timer_2_int

equ 19

;timer 2:vector type 19

data

segment public ’data’

 

 

public _hour, _minute, _second, _msec

 

_hour

db ?

 

 

_minute

db ?

 

 

_second

db ?

 

 

_msec

db ?

 

data

ends

 

 

Example 9-1. Configuring a Real-Time Clock

9-18

Page 247
Image 247
Intel 80C186XL, 80C188XL user manual Example 9-1. Configuring a Real-Time Clock, Intsts