[INTEL NAVIGATION HEADER]

Active-low 1-shot Pulse on Timer1 Code

Active-low 1-shot Pulse on Timer1 Code

$mod186
name example_timer1_1_shot_code

;-------------------------------------------------------------
;
;FUNCTION: This function generates an active-low one shot
; pulse on Timer 1 output pin.
;
; SYNTAX: extern void far one_shot(int CMPB);
;
; INPUTS: CMPB - This is the T1CMPB value required to
; generate a pulse of given pulse width. This value
; is calculated from the formula below.
;
; CMPB = (req_pulse_width*f)/4

;
; OUTPUTS: None
;
; NOTE: Parameters are passed on the stack as required by
; high-level languages
;
;--------------------------------------------------------------

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

MaxCount equ 0020H

lib_80186 segment public 'code'
assume cs:lib_80186

public _one_shot
_one_shot proc far

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

_CMPB equ word ptr[bp+6] ;get parameter off the stack

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

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

mov DX, T1CMPA ;set time before t_shot to 0
mov ax, 1
out DX, ax

mov DX, T1CMPB ;set pulse time
mov ax, _CMPB
out DX, ax

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

CountDown: in ax, DX ;read in T1CON
test ax, MaxCount ;max count occurred?

jz CountDown ;no: then wait

and ax, not MaxCount ;clear max count bit
out DX, ax ;update T1CON

pop DX ;restore saved registers
pop ax

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

Free Web Hosting



Legal Stuff © 1997 Intel Corporation