; Dual Slope Wandler mit 8051 ; benutzt T0, P3.2, P3.4, P3.5 ; Timing für 12 MHz, ca. 10 Wandlungen pro Sekunde StckStrt EQU 080H ORG 00H MOV SP, #StckStrt ;Stackpointer versetzen Start: SETB P3.4 ;wähle Vref SETB P3.5 ;wähle Output MOV A, #0FFH ;25,5 ms auf entladen warten ACALL T100 ;C mit Vin aufladen ORL TMOD, #00000001B ;T0 16 bit zähler ANL TMOD, #11110001B MOV TL0, #0 ;load auf null MOV TH0, #080H CLR P3.5 ;wähle Vmaxabs CLR P3.4 ;wähle Vin SETB TR0 ;start zähler CLR TF0 ;clear overflow Flag Wait4Vref: JNB TF0, Wait4Vref ;warte das Zähler fertig ;C mit Vref entladen und Zeit messen SETB P3.4 ;wähle Vref ORL TMOD, #00001001B ;T0 16 bit zähler, gated by /INT0 MOV TL0, #0 ;load auf -max MOV TH0, #0 CLR TF0 ;clear overflow Flag Wait4Vin: JB P3.2, Wait4Vin ;warten das Zähler fertig JNB TF0, MOK ;Überlauf ??? MOV TL0, #0FFH ; dann auf max setzen MOV TH0, #0FFH MOK: ;Hier TH0 und TL0 abfragen und ausgeben bzw verarbeiten SJMP Start