; ---------------------------------------------------------------------------- ; WRITTEN BY GARY PEEK, INDUSTROLOGIC, INC., WWW.INDUSTROLOGIC.COM ; CONVERT 12 BIT A/D VALUE IN VARIABLES VARB AND VARA TO ; BCD VOLTS IN VARIABLES VARA, VARB, VARC, AND VARD, FORMATTED "0.000" TO "5.000" ; USES R2, R3, R4, PLUS MEMORY STORAGE ADH AND ADL BA2V: MOV ADH,VARB ;PUT VARIABLES INTO TEMPORARY STORAGE MOV ADL,VARA CALL AD2VD ;DIVIDE VALUE BY DIGIT VALUE MOV VARA,R2 ;SAVE VOLT DIGIT CALL AD2VM ;MULTIPLY REMAINING BY 10 CALL AD2VD ;DIVIDE VALUE BY DIGIT VALUE MOV VARB,R2 ;SAVE VOLT DIGIT CALL AD2VM ;MULTIPLY REMAINING BY 10 CALL AD2VD ;DIVIDE VALUE BY DIGIT VALUE MOV VARC,R2 ;SAVE VOLT DIGIT CALL AD2VM ;MULTIPLY REMAINING BY 10 CALL AD2VD ;DIVIDE VALUE BY DIGIT VALUE MOV VARD,R2 ;SAVE VOLT DIGIT RET AD2VD: MOV R2,#0 ;CLEAR COUNT AD2V1: MOV A,ADL ;GET LOW BYTE OF A/D VALUE CLR C ;NEEDED FOR SUBTRACTION SUBB A,#33H ;LOWER BYTE OF 819D MOV R4,A ;TEMPORARY SAVE MOV A,ADH ;GET HIGH BYTE OF A/D VALUE SUBB A,#03H ;UPPER BYTE OF 819D MOV R3,A ;TEMPORARY SAVE JC AD2VX ;SUBTRACTED TOO MUCH, DONE WITH THIS LOOP MOV ADL,R4 ;NO ROLL UNDER, SAVE SUBTRACTED A/D VALUE MOV ADH,R3 INC R2 ;INDICATE ONE MORE VOLT JMP AD2V1 AD2VX: RET AD2VM: MOV B,#10 ;MULTIPLY BY 10 MOV A,ADL ;GET LOWER BYTE OF A/D VALUE MUL AB ;A*B=B:A PUSH B MOV ADL,A MOV B,#10 ;MULTIPLY BY 10 MOV A,ADH MUL AB ;A*B=B:A POP B ;GET CARRY ADD A,B MOV ADH,A RET