[INTEL NAVIGATION HEADER]

Generate Square Wave on 186 Timer 1 Output

$mod186
name example_timer1_square_wave_code

;-------------------------------------------------------------
;
;FUNCTION: This function generates a square wave of given
; frequency and duty cycle on Timer 1 output pin.
;
; SYNTAX: extern void far clock(int mark, int space)
;
; INPUTS: mark - This is the mark (1) time.
; space - This is the space (0) time.
;
; The register compare value for a given time can be
; easily calculated from the formula below.
; (works for 80C186EX family of controllers)
;
; CompareValue = (req_pulse_width*f)/4
;
; OUTPUTS: None
;
; NOTE: Parameters are passed on the stack as required by
; high-level Languages
;-------------------------------------------------------------

T1CMPA equ xxxxH ;substitute register offsets
T1CMPB equ xxxxH
T1CNT equ xxxxH
T1CON equ xxxxH

lib_80186 segment public 'code'
assume cs:lib_80186

public _clock
_clock proc far

push bp ;save caller's bp
mov bp, sp ;get current top of stack


_space equ word ptr[bp+6] ;get parameters off the stack
_mark equ word ptr[bp+8]

push ax ;save registers that will be
;modified
push bx
push DX

mov DX, T1CMPA ;set mark time
mov ax, _mark
out DX, ax

mov DX, T1CMPB ;set space time
mov ax, _space
out DX, ax

mov DX, T1CNT ;Clear Timer 1 Counter
xor ax, ax
out DX, ax

mov DX, T1CON ;start Timer 1
mov ax, C003H
out DX, ax


pop DX ;restore saved registers
pop bx
pop ax

pop bp ;restore caller's bp
ret
_clock endp
;-------------------------------------------------------------
lib_80186 ends
end



Legal Stuff © 1997 Intel Corporation

Free Web Hosting