El 16F877 también tiene ADC de 10 bits;
Para poder usar los 10 bits tenés que utilizar "Right Justified" y así vas a tener en ADRESH los 2 bit de mayor peso y en ADRESL los 8 bit de menor peso. Luego puedes almacenarlos en una variable int y listo. En Hitech podés hacer algo asi...
int lectura_adc; // declaracion de la variable
lectura_adc = (ADRESH<<8) + ADRESL;
la línea anterior multiplica por 256 ADRESH (para que ocupe el byte alto de la variable int) y luego sumo ADRESL
Como una sugerencia yo hice lo siguiente para escribir en el timer1 (16bits) en una sola línea de C
volatile unsigned int TIMER1 @ &TMR1L; // con eso apunto mi variable a la dirección de TMR1L.
TIMER1 = 60000; // al poner esto, se cargan perfectamente tanto TMR1H como TMR1L
tal vez se pueda hacer algo similar con ADRESH y ADRESL