@m_herr: 'tschuldige, war ein Unterstellung
Das ist das, was Bascom draus macht, wer mag, kann die Zyklen zählen, viele sind es ja nicht
Die meiste Zeit vergeht beim Warten auf den ADCCode:----------------------------------------------
Ad0 = 0
----------------------------------------------
LDI r24,0x00
LDI r25,0x00
LDI XL,0x60
LDI XH,0x00
ST X+,r24
ST X,r25
----------------------------------------------
For X = 1 To 16
----------------------------------------------
LDI r24,0x01
STS 0x0062,r24
L_0x008C:
LDS r16,0x0062
CPI r16,0x10
BRLO L_0x009A
BREQ L_0x009A
JMP L_0x00D6
L_0x009A:
----------------------------------------------
Mtemp = Getadc(0)
----------------------------------------------
LDI r24,0x00
OUT ADMUX,r24
CALL L_0x00F6
LDI XL,0x63
LDI XH,0x00
ST X+,r24
ST X,r25
----------------------------------------------
Ad0 = Ad0 + Mtemp
----------------------------------------------
LDI XL,0x60 ad0
LDI XH,0x00
LD r16,X+
LD r17,X
LDI XL,0x63 mtemp
LDI XH,0x00
LD r20,X+
LD r21,X
ADD r16,r20 add
ADC r17,r21
LDI XL,0x60 store ad0
LDI XH,0x00
ST X+,r16
ST X,r17
----------------------------------------------
Next X
----------------------------------------------
LDI XL,0x62 x
LDI XH,0x00
LD r24,X
SUBI r24,0xFF +1
ST X,r24 store x
BRCC L_0x00D6 exit for..next
JMP L_0x008C continue
L_0x00D6:
----------------------------------------------
Shift Ad0 , Right , 4
----------------------------------------------
LDI r25,0x04
LDI XL,0x60
LDI XH,0x00
CALL L_0x0108
----------------------------------------------
END
----------------------------------------------
CLI
L_0x00E2:
RJMP L_0x00E2
----------------------------------------------
GETADC()
----------------------------------------------
L_0x00F6:
SBI ADCSR,ADSC
L_0x00F8:
SBIC ADCSR,ADSC
RJMP L_0x00F8 wait bit clear
SBI ADCSR,ADSC set bit
L_0x00FE:
SBIC ADCSR,ADSC
RJMP L_0x00FE wait bit clear
IN r24,ADCL read low
IN r25,ADCH read high
RET