; DACONV.ASM
; WRITE TO A WEIGHTED RESISTOR D/A CONVERTER ON IO1-IO8

	ORG	8000H		;MUST ALWAYS BE ORG'ED AT 8000H FOR SBC-1

DACONV:	CLR	C		;(C3 HEX) NEEDED ONLY IF USING AUTOBOOT
REPEAT:	MOV	R2,#64D		;64 STEPS
	MOV	B,#0		;START WITH ZERO VOLTS
NEXT:	MOV	24H,B		;24H IS IO1-8, 80H IS BIT 7 ONLY ON
	CALL	4BH		;IOSCAN ROUTINE IN JUMP TABLE
	MOV	A,B		;GET VALUE JUST SENT
	CALL	TXDEC		;SEND VALUE IN ACC TO THE TERMINAL
	CALL	42H		;CR/LF OUT ROUTINE IN JUMP TABLE
	MOV	A,#200		;NUMBER OF MILLISECONDS TO DELAY
	CALL	45H		;DELAY IN MILLISECONDS ROUTINE IN JUMP TABLE
	INC	B		;NEXT VOLTAGE VALUE TO D/A CONVERTOR
	DJNZ	R2,NEXT		;DO ANOTHER STEP IF NOT DONE
	JMP	REPEAT		;REPEAT THE CYCLE


; SEND DECIMAL VALUE IN ACC TO THE TERMINAL AS 2 ASCII DIGITS
TXDEC:	PUSH	B		;SAVE B
	MOV	A,B		;GET VALUE
	MOV	B,#10		;DIVIDE BY VALUE BY 10
	DIV	AB		;ONES IN B, TENS IN A
	PUSH	B		;SAVE ONES DIGIT
	ADD	A,#30H		;ADD THE ASCII CHARACTER OFFSET
	CALL	3CH		;DISPLAY CHARACTER ROUTINE IN JUMP TABLE
	POP	ACC		;RESTORE ONES DIGIT
	ADD	A,#30H		;ADD THE ASCII CHARACTER OFFSET
	CALL	3CH		;DISPLAY CHARACTER ROUTINE IN JUMP TABLE
	POP	B		;RESTORE B
	RET

	END			;NEEDED BY MANY ASSEMBLER PROGRAMS

