; ADC-Routinen fürs Hauptprogramm sonne

; ADCINIT - initialisiert ADC
ADCINIT:
        ;         xxx  gibt Divide-Ratio 2^x zu PLL-Clock an
        lda     #%00010000
        sta     ADCLK
        rts

; ADCPOWEROFF - schickt ADC schlafen
ADCPOWEROFF:
        lda     #%00011111
        sta     ADSCR
        rts

; ADC - startet Aktualisierung beider Helligkeitswerte
; mehrere Messungen: 256
; ADC benötigt für eine Messung 105 Zyklen = 52.5 us -> 256* =12.5ms
ADC:
        lda     #0          ; Werte löschen
        sta     left
        sta     right
        sta     leftl
        sta     rightl
        lda     #$FF
ADC0:
        psha
        ;              xxx  gibt PTBx-Port für links an
        lda     #%00000000
        sta     ADSCR
ADC1:   brclr   7,ADSCR,ADC1
        ; COnversion COmplete
        lda     ADR
        add     leftl
        sta     leftl
        lda     #0
        adc     left
        sta     left
        ;              xxx  gibt PTBx-Port für rechts an
        lda     #%00000010
        sta     ADSCR
ADC2:   brclr   7,ADSCR,ADC2
        ; COnversion COmplete
        lda     ADR
        add     rightl
        sta     rightl
        lda     #0
        adc     right
        sta     right
        ; Schleifenbehandlung
        pula
        deca
        bne ADC0
        rts

; ADCCOMPARE - vergleicht beide Helligkeitswerte,
; setzt Flags für 0 für nachfolgende Tests bei "Wertgleichheit"
ADCCOMPARE:
        lda     right
        cmp     left
        rts

ADCOUTi:
        bset 3,DDRC
        lda left
        cmp right
        bmi ADCOUT1  ; branch if minus
        ; left is greater
        bset 3,PORTC
        jmp ADCOUT2
ADCOUT1:
        ; right is greater/equal
        bclr 3,PORTC
ADCOUT2:
        rts

