Hallo,

habe noch zufällig irgendwelchen ADC-Code für den 90S4433 gefunden, den ich mal zum Test geschrieben habe.

Es hat definitiv funktioniert, allerdings wurde der Code danach noch etwas modifiziert. Ich kann also keine Funktionsgarantie geben.
Allerdings ist das ganze nicht wirklich schwer. Das meiste findet in der ISR statt (Ergebnis in r18:r17), allerdings habe ich die Displayausgabe auskommentiert.

Das sollte Dir einen groben Überblick verschaffen. Das Lesen des Datenblattes ist natürlich immer Pflicht.

Code:
.include "4433def.inc"


.CSEG
.org 0x0000 ; code segment start

; Interrupt vectors
rjmp RESET ; 0x00 external reset
rjmp NO_INTERRUPT ; 0x01 external int0
rjmp NO_INTERRUPT ; 0x02 external int1
rjmp NO_INTERRUPT ; 0x03 timer1 capture event
rjmp NO_INTERRUPT ; 0x04 timer1 compare match
rjmp NO_INTERRUPT ; 0x05 timer1 overflow
rjmp NO_INTERRUPT ; 0x06 timer0 overflow
rjmp NO_INTERRUPT ; 0x07 SPI serial transfer complete
rjmp NO_INTERRUPT ; 0x08 UART, Rx complete
rjmp NO_INTERRUPT ; 0x09 UART data register empty
rjmp NO_INTERRUPT ; 0x0a UART, Tx complete
rjmp ADC_INTERRUPT ; 0x0b ADC conversion complete
rjmp NO_INTERRUPT ; 0x0c EEPROM ready
rjmp NO_INTERRUPT ; 0x0d Analog comparator


;--------------------------------------------------------------------
;     ISRs
;--------------------------------------------------------------------

RESET:
rjmp main


ADC_INTERRUPT:
	in r20, SREG
	push r16
	push r17
	push r18

	in r17, ADCL
	in r18, ADCH

; skip 2 LSB
;	asr r18
;	ror r17
;	asr r18
;	ror r17

; display output
;	mov r16, r18
;	rcall lcd_printdec ; print high byte
;	mov r16, r17
;	rcall lcd_printdec ; print low byte
;	ldi r16, ' '
;	rcall lcd_data

	; start next conversion
	sbi ADCSR, 6

	pop r18
	pop r17
	pop r16
	out SREG, r20
reti


NO_INTERRUPT:
reti


;--------------------------------------------------------------------
;     MAIN
;--------------------------------------------------------------------
main:

        ldi r16, low(RAMEND)  ; initialise stack pointer
        out SPL, r16

	sei ; global interrupt enable


	; analog input 0
	ldi r16, 0x00
	out ADMUX, r16

	; enable, start dummy conversion, no free run, interrupt, factor 128
	ldi r16, 0b11011111
	out ADCSR, r16

loop:
	rjmp loop
Jens