PIC16F1938 No lee ADC


#1

Hola.
Tengo un problema con el ADC del pic 16F1938.
Tengo el siguiente código:


void inicializar_PIC()
{
 OSCCON = 0b11110000;    // 32 MHz
 SPLLEN = 1;
 
 // Registro de opciones
 OPTION_REG=0x85;
 WPUB = 0;  // Deshabilitacion de resistencias de pull-up en puerto B
 TRISA = 0xFF;  // Entradas:RA0-RA3 = 4xSensores Analogicos
 TRISB = 0xFF; // Sensores Digutales
 TRISC = 0x00; // Motores y led
 ANSELA = 0x0F;  // Los sensores Analogicos son RA0-RA3
 ANSELB = 0;  // Todo I/O digital
 // Interrupciones
 IOCBF = 0;
 INTCON=0x00; // Sin interrupciones
 SWDTEN = 0;
 TMR1GE = 0;
}
 
void Delay_1ms_T4(void)
{
    // Temporizacion = (256 - Precarga)*PS*(4/fosc);
    // 1e-3 = (256 - Precarga)*64*(4/32e+6); --> 125
    TMR4 = 0x83;
    TMR4IF = 0;
    TMR4ON = 1;
        while(!TMR4IF);
    TMR4ON = 0;
}
void Delay_X_ms_T4(int _milisegundos)
{
    while(_milisegundos>0)
    {
        Delay_1ms_T4();
        _milisegundos--;
    }
}
void Delay_10us_T6()
{
 // Temporizacion = (256 - Precarga)*PS*(4/fosc);
 //    0,00001 = (256 - Precarga)*PS*(4/32e+6);
    // COMPROBADO
    TMR6 = 210;
    TMR6IF = 0;
    TMR6ON = 1;
    while(TMR6IF == 0);
    TMR6ON = 0;
}
char leerSLDelantero()
{
    int valor;
 ADCON1 = 0b00000000; // El valor mas significativo se almacena en ADRESH
 ADCON0 = 0b00000000; // Canal 0 --> RA0 = SL_Del
 
 Delay_10us_T6();
 
 ADON = 1;   // Habilitamos el ADC, pero esta parado
 Delay_10us_T6();
 ADIF = 0;   // Se borra el flag de interrupcion --> No hay interrupcion pero nos sirve para saber si ha terminado la conversion
 GO_nDONE = 1;   // Iniciamos la conversion
 while(ADIF == 0);
        valor = ADRESH;
        if(valor > RANGO_LEJOS)
            return 1;
        else
            return 0;
}
 
void main(void)
{
 
    inicializar_PIC();
 
 while(1)
 {
  Delay_X_ms_T4(50); // Espero 50 msg para el refresco del sensor
  if(leerSLDelantero() == 1)
   LED = 1;
  else
   LED = 0; 
 } 
}
 

Cuando lo ejecuto, el led se queda encendido continuamente.
Al depurar, observo que el programa entra en la rutina de leerSLDelantero, pero el registro ADRESH del ADC siempre vale 0xFF.

Alguien me puede ayudar a saber que es lo que me está ocurriendo, y porqué no funciona correctamente el ADC?

muchas gracias