Código nuevo por si lo quieres revisar abajo expongo algunas dudas en el siguiente post:
#include <16F88.h>
#device ADC=10 //INDICO EL NÚMERO DE BITS DEL ADC
#include <stdio.h>
#include <string.h>
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_B5, rcv=PIN_B2) //CONFIGURO PUERTO SERIE
char DireccionPIC[10]= "$ADQ,P01,"; //Es la direccion del PIC
char DireccionPICrespuesta[10]="$DAT,P01,";
//Definición de variables
int ValorADC=0; //Variable para lectura ADC
//int CopiaValorADC=0;
int i=0; //Variable para ciclos for
//int Maskara=0; //Variable para obtencion de bits '0' o '1'
char StringValorADC[12]={0};//Cadena de caracteres para guardar valor ADC en Carcteres
char DatoEntrada[13]={0}; //String para guardar el dato de entrada por UART
char DatoSalida[24]={0}; //String para guardar lo que envio por UART
char DireccionRecibida[10]={0}; //Variable para guardar direccion entrada
char CanalRecibido[4]={0}; //Variable para guardar canal ADC a leer
int FlagUART=0;
int FlagString=1;
#INT_RDA
void INT_UART() {
for(i=0;i<12;i++){
DatoEntrada[i]=getc();
}
DatoEntrada[12]='\0';
i=0;
FlagUART=1;
} //ya he enviado por UART: "$ADQ,P01,CHx,n"
void main(){
enable_interrupts(GLOBAL); //HABITILRO TODAS LAS INTERRUPCIONES GLOBALES
enable_interrupts(INT_RDA); //HABILITO LA INTERRUPCIÓN UART
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5); //INDICO EL PIN A0/A1/A2/A3/A4/A5 COMO ENTRADA ANALÓGICA
setup_adc(ADC_CLOCK_INTERNAL); //CLOCK INTERNO PARA CONVERSIÓN ADC
while(1){
if(FlagUART==1){
FlagUART=0;
for(i=0;i<9;i++){ //Con éste for obtengo la direccion recibida por UART
DireccionRecibida[i]=DatoEntrada[i];
}
i=0;
DireccionRecibida[9]='\0'; //Pongo caracter nulo para que sea string
FlagString=strcmp(DireccionRecibida, DireccionPIC);
if(FlagString==0){ //Comparo si la direccion recibida coincide con la del PIC
for(i=0;i<3;i++){
CanalRecibido[i]=DatoEntrada[i+9]; //Si coincide obtengo el canal de lectura del ADC
}
i=0;
CanalRecibido[3]='\0'; //Pongo caracter nulo para que sea string
if((FlagString=strcmp(CanalRecibido,(char*)"CH0"))==0){ //voy comparando para ver qué canal he obtenido y leo CHX
set_adc_channel(0); //SELECCIONO CANAL 0 (PIN A0) DEL ADC PARA A LEER.
}
else if((FlagString=strcmp(CanalRecibido,(char*)"CH1"))==0){
set_adc_channel(1);
}
else if((FlagString=strcmp(CanalRecibido,(char*)"CH2"))==0){
set_adc_channel(2);
}
else if((FlagString=strcmp(CanalRecibido,(char*)"CH3"))==0){
set_adc_channel(3);
}
else if((FlagString=strcmp(CanalRecibido,(char*)"CH4"))==0){
set_adc_channel(4);
}
else if((FlagString=strcmp(CanalRecibido,(char*)"CH5"))==0){
set_adc_channel(5);
}
delay_us(20); //retardo para leer ADC
ValorADC=read_adc(); //lectura ADC
////for(i=0;i<10;i++){ //Con un for recorreré solo 10 posiciones del resultado ValorADC (ADC 10 bits)
//
// CopiaValorADC=ValorADC; //Realizo una copia del valor numérico del ADC para no perderlo
// Maskara=CopiaValorADC>>i; //Quiero tener el bit "i" a la derecha del todo
// Maskara=Maskara&0x0000000000000001; //realizo una AND para ver si tengo un [1] o un [0].
// if(Maskara==1){
// StringValorADC[10-i]='1'; //Meto los bits (en forma de caracter) en el String StringValorADC
// }
// else{
// StringValorADC[10-i]='0';
// }
//}
//
sprintf(StringValorADC,",%d",ValorADC); //pongo en StringValorADC el ValorADC pero en formsto string
//StringValorADC[0]=','; //Pongo una ',' al principio del resultado
//StringValorADC[11]='\0'; //Por último pongo el caracter nulo (para que sea String)
strcat(DatoSalida,DireccionPICrespuesta); //Concateno DireccionPICrespuesta y el canal "CHX")
strcat(DatoSalida,CanalRecibido);
strcat(DatoSalida,StringValorADC);//concateno String anterior y Valor del ADC
printf("%s", DatoSalida); //Envio un solo String con la direccion, canal CHX y el resutado del PIC por UART.
}
}
}
}