Hola Eduardo2 ,
He revisado el código del fichero adjunto y no entiendo el significado de estas 2 líneas .
#define CPU_MHZ 4
#define delay_ms_break(t_ms,pinx) for(int32 n=15.46*CPU_MHZ*t_ms ; !input(pinx) && n>0 ; n--)
que significado tienen o que hace ?

Por otro lado gracias a tu corrección sobre el sensor DS18B20 ahora ya me lee bien la temperatura . Y lo que comentas :
- Leés mal el sensor.
Código: [Seleccionar]
sensor =ds18b20_read(0);
temper = (ds18b20_read(DS18B20_PIN), &value); //Lee el sensor
Sólo Dios sabe de donde sacaste eso. El argumento de ds18b20_read es una dirección de memoria no una constante y la 2da línea es un auténtico misterio.
Lo deduje de buscar en libros que tengo sobre programación o por internet algunos ejemplos . Pero esta claro que no supe hacerlo bien . Y gracias a ti se ha podido corregir.
También he realizado un cambio el pin A0 que es donde en un principio entraba el dato de la lectura de sensor ds18b20 , lo he cambiado a un pin digital : B6 y parece que funciona sigue leyendo la temperatura correctamente. Si sigue FUNCIONANDO lo dejare así y ganare otro pin analógico .
#define PIN_DS18B20_DATA PIN_B6
Sobre lo que comentas a continuación :
No, pero mientras la lectura del ADC se haga siempre dentro del menú, podés declarar:
Código: [Seleccionar]
setup_adc_ports(AN0_TO_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
al ingresar en la opción, y
Código: [Seleccionar]
setup_adc_ports(NO_ANALOGS) ;
al salir.
Entiendo que si pongo estas líneas de comando dentro de Menú y la otra linea al salir podría, utilizar un Pin digital . Creo que es lo que me quieres explicar ? Perdona mi torpeza a la hora de interpretar tus explicaciones pero me gustaría entenderlo para aprender.

Gracias . Por la ayuda que me estas echando .