
PORT_DAC_CLOCK		EQU	P1.0
PORT_DAC_DATA		EQU	P1.1
LED_RED			EQU	P1.7

DAC_TEST:
;RESET THE DEVICE
	CALL	DAC_START_BIT
	MOV	A,#01010000B
	CALL	DAC_BYTE
	MOV	A,#00010000B
	CALL	DAC_BYTE
	CALL	DAC_STOP_BIT
	CALL	SEC1D			;1 SEC DELAY
	CALL	SEC1D			;1 SEC DELAY
;PUT OUT HALF VOLTAGE AT DAC 7
	CALL	DAC_START_BIT
	MOV	A,#01010000B		;DEVICE ADDRESS
	CALL	DAC_BYTE
	MOV	A,#07H			;DAC ADDRESS
	CALL	DAC_BYTE
	MOV	A,#07FH		;DAC DATA FOR HALF VOLTAGE
	CALL	DAC_BYTE
	CALL	DAC_STOP_BIT	
DONE_DAC_TEST:
	RET

DAC_START_BIT:
	SETB	PORT_DAC_CLOCK	
	SETB	PORT_DAC_DATA
	CALL 	DAC_DELAY
	CLR	PORT_DAC_DATA
	CALL 	DAC_DELAY
	CLR	PORT_DAC_CLOCK
	CALL 	DAC_DELAY
	RET

DAC_STOP_BIT:
	SETB	PORT_DAC_CLOCK
	CALL 	DAC_DELAY
	CLR	PORT_DAC_DATA
	CALL 	DAC_DELAY
	SETB	PORT_DAC_DATA
	CALL 	DAC_DELAY
	RET

DAC_BYTE:
	MOV	R0,#8H
DACB_LOOP:
	RLC	A
	MOV	PORT_DAC_DATA,C
	CALL 	DAC_DELAY		
	SETB	PORT_DAC_CLOCK
	CALL 	DAC_DELAY
	CLR	PORT_DAC_CLOCK
	CALL 	DAC_DELAY
	DJNZ	R0,DACB_LOOP

	SETB	PORT_DAC_DATA
	CALL 	DAC_DELAY
	SETB	PORT_DAC_CLOCK
	CALL 	DAC_DELAY
	JNB	PORT_DAC_DATA,DONE_DAC_BYTE
DAC_NO_ACK:
;TEMPORARY FOR DEBUGGING – FLASH LED TO INDICATE NO ACK FROM MAX521
	CLR	LED_RED
	CALL	SEC1D
	CALL	SEC1D
	SETB	LED_RED
	CALL	SEC1D
	CALL	SEC1D
	SJMP	DAC_NO_ACK
DONE_DAC_BYTE:
	CLR	PORT_DAC_CLOCK
	CALL 	DAC_DELAY
	RET

DAC_DELAY:
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	RET
