I'm having a problem with the A/D convertor in the chip. It seems to always return 0x13 no matter if the input voltage is 5V or 0V. I've used interrupt driven and polling, both return the same result. I'm reading the results from PORTB and PORTD with a multimeter (limited parts availability in the lab, ie no leds). I'm using the internal RC to drive the '877 (assumed 4MHz). I've tried values of 00, 10, 11 for the ADSC1:ADSC0 with no difference in the output. I've used MPLAB (v 5.xx) and GPSIM to simulate the '877. GPSIM gives odd results (0x0266 if AN0 is High, and 0x019A if Low). MPLAB just shows 0 for ADRESL and ADRESH for both cases. Here is the offending code: ; Set TRISA for analog input. bsf STATUS, RP0 ; switch to bank1 movlw 0x3f ; Set bits 5-0 as 1 movwf TRISA ; Sets PORTA<5:0> as inputs. : ; Set up the A/D convertor. bcf STATUS, RP0 bcf STATUS, RP1 ; Switch to bank0. clrf ADCON0 ; Clear ADCON0. ; Selects channel 0 (AN0) ; Turns the A/D off. ; Clears GO flag. bsf ADCON0,ADCS1 ; Set ADSC1 and ADSC0 since we ; are going to bsf ADCON0,ADCS0 ; Use A/D's internal RC for its ; clock source. bsf STATUS, RP0 bcf STATUS, RP1 ; Switch to bank1. clrf ADCON1 ; Clear ADCON1 bsf ADCON1, ADFM ; Right justify 10 bits in ; ADRESH and ADRESL bsf ADCON1, PCFG1 ; ADCON1<3:0> = 0010 ; Set AN7-AN5 as Digital. ; Set AN4-AN0 as Analog inputs. ; Use AVDD/AVSS (internal) as ; reference voltages. ; Do a test A/D conversion. bcf ADCON0, CHS0 ; Select Channel 0 (AN0). bcf ADCON0, CHS1 ; bcf ADCON0, CHS2 ; bsf ADCON0, ADON ; Turn A/D on. movlw d'31' ; 23 us/0.25 us = 92 total ; clocks ; since loop has 3 ; instructions... 92/3 = 30.67 ; -> 31 ; 23 us is worst case, 10k ohm ; impedance and 100 deg C. ; 1/4MHz = 0.25 us bcf STATUS, Z ; Make sure Zero flag is off. addaq1 addlw -1 ; W=W-1 btfss STATUS, Z ; Is W = 0? goto addaq1 ; NO, loop again. bsf ADCON0, GO ; Begin A/D conversion. loop btfsc ADCON0, GO goto loop bcf STATUS, RP0 bcf STATUS, RP1 ; switch to bank0 to access ; ADRESH. movf ADRESH, W movwf adsaveh ; copy upper portion of A/D ; result. bsf STATUS, RP0 ; switch to bank1 to access ; ADRESL. movf ADRESL, W movwf adsavel ; copy lower potion of A/D ; result. bcf STATUS, RP0 bcf STATUS, RP1 ; switch to bank0 to access ; PORTB. movf adsavel, W movwf PORTB movf adsaveh, W movwf PORTD -- http://www.piclist.com hint: The list server can filter out subtopics (like ads or off topics) for you. See http://www.piclist.com/#topics