INCLUDE 80c31.mc ; vorläufige Speicherstellen frü zähler1 EQU 0Ah ; 1 Volt zähler01 EQU 0Bh ; 0,1 Volt zähler001 EQU 0ch ;0,01 Volt gerundet ;***************************************************************************** ; Zerlegen des 10 bit Binärwertes nach Dezimal ; Der Wert vom A/D wird erst in ganze und dann in 1/10 Volt aufgelöst ; Der Rest ( 1mV ) kommt aus der Tabelle als schon gerundeter Wert ; Damit spare ich die Mittelwertbildung und das runden ; Zum testen wird der A/D wert in R2 High und R3 Low übergeben. ; alles unsigniert !! ; die Dez. Zahlen stehen am Ende in R5 (1V), R6 (0,1V) und R7 (0.01V) ; dann noch 30h dazu und ab aufs Display in zähler1,zähler01,zähler001 stehen die Ascii-Werte ;***************************************************************************** ; Meßwert wird erstmal vorgegeben MOV R2,#00h ; Meßwert vom A/D High Byte MOV R3,#2h ; Meßwert vom A/D Low Wert ;****************************************************************************** wandel: MOV zähler1 ,#'0'-1 ; alle Zähler nullen MOV zähler01,#'0'-1 MOV A,R2 MOV R5,A ; High wert MOV A,R3 MOV R6,A ; Low wert CLR C subtraktion: INC zähler1 SUBB A,#250 ; Wert für 1 Volt bei 4,096V Vref und 10 Bit A/D laden MOV R6,A MOV A,R5 SUBB A,#0 MOV R5,A MOV A,R6 JNC subtraktion ADD A,#250 zehntel: INC zähler01 SUBB A,#25 JNC zehntel ADDC a,#25 MOV DPTR,#rest ; die werte für 0,01V aus Tabelle lesen MOVC A,@a+dptr ; sind schon gerundet 4mV / Wert MOV zähler001,A RET rest DB '0011222334445556677788999' END