hiho..
hab vor 2 tagen angefangen mich mit pic's zu beschäftigen und wollte das selbe zum adc-test realisieren...
verwendet hab ich einen 16f873 auf einem geäztem testboard...
* porta = adc
* portb = in
* portc = out (8xled)

Code:
; Variablen declaration

wait    	EQU     0x20		; 'wait' variable für den ADC
adcvalue	EQU		0x21		; Ergebniss des ADC
chansel		EQU		0x22		; ADC Channel für Unterprogramm getana (0-3 auf TestBoard verfügbar)

; Standard Init des TestBoard PIC16F873
Init
        bsf     STATUS, RP0     ; auf Bank 1 umschalten
        movlw   B'11111111'     ; PortB alle input
        movwf   TRISB
        movlw   B'00000000'     ; PortC alle output
        movwf   TRISC
        BCF     ADCON1, 7
        bcf     STATUS, RP0     ; auf Bank 0 zurückschalten
		bsf		ADCON0,0		; PORTA als analog-in festlegen
		bcf		ADCON0,3		; AN0 einstellen
		bcf		ADCON0,4		; "
		bcf		ADCON0,5		; "
        BSF     ADCON0, 7       ; ADC Speed
        BCF     ADCON0, 6       ; "
        clrf    PORTC           ; alle LEDs ausschalten

; Init ende
;**************************************************************
; Beginn Hauptprogrammschleife

main
		btfsc	PORTB, 0
		call	anaout
		goto	main

; Ende Hauptprogrammschleife
;**************************************************************
; Beginn Unterprogramme

anaout
		clrf	chansel
		nop
		btfsc	PORTB, 0
		bsf		chansel, 0
		btfsc	PORTB, 1
		bsf		chansel, 1
		nop
		call	getana
		movfw	adcvalue
		movwf	PORTC
		return

; Ende Unterprogramme			
;**************************************************************





;***************************************
;*	Standard Funktionen für TestBorad  *
;***************************************

		goto	main			; versehentlichen Aufruf verhindern

; Analog Input
getana	; ADC Vorgang starten
		btfsc	chansel, 0		; ADC Channel Auswahl - bit3
		bsf		ADCON0, 3
		btfss	chansel, 0
		bcf		ADCON0, 3
		btfsc	chansel, 1		; bit4
		bsf		ADCON0, 4
		btfss	chansel, 1
		bcf		ADCON0, 4
		btfsc	chansel, 2		; bit5
		bsf		ADCON0, 5
		btfss	chansel, 3
		bcf		ADCON0, 5
		nop						; 1Takt Pause
        bsf     ADCON0, 2       ; ADC starten
adcloop
        btfsc   ADCON0, 2       ; ist der ADC fertig?
        goto    adcloop         ; nein, weiter warten
        movfw   ADRESH          ; obere 8 Bit des alanogwertes ins arbeitsverzeichnis
		movwf	adcvalue		; Ergebniss zwischenspeichern
        clrf    wait			; Warten, damit der ADC sich erholen kann
adcwarten
        decfsz  wait, f
        goto    adcwarten
        return

        end
in chansel (0x22) lege ich den abzufragenden ad kanal fest und speichere das ergebniss (8bit) in adcvalue..
erstmal sry für meinen ghetto-code bin leider selbst anfänger, aber ich hoffe er hat dir geholfen