Realmente no logro comprender que es lo que estas queriendo preguntar.
En estos casos es mejor dar un ejemplo del string que envías y lo que te devuelve, para entender mejor cual es el problema, ya que no se que estas comunicandote, como es la comunicacion, etc.
Pero observando tu programa hay unos cuantos errores de programación.
- Primero que nada, identá tu código, es mas fácil de entender donde se abre y cierra un corchete:
void Read_ID(void)
{
int i=0;// variable para el contador for
char temp; // guarda cada caracter
for(i=0;(kbhit()==1);i++) // si hay dato disponible
{
temp
=fgetc(); //guarde en temp el dato entrante delay_ms(2);
if (temp==0X02) //recieve the ssrt bit detecta el primer caracter de la tarjeta(siempre es 2)
{
output_low(rele);
flag=1;
delay_ms(1);
i=0; // reinicio el contador
RX_Flag=0;// bandera
}
if (flag==1)
{
if (temp==0x03)//detect the end code, (detecta el final de la cadena (siempre es 3)
{
flag=0; //zero clearing
if(i==13) // verifica que el 3 esta en la posicion 14
{
putc('R'); // aqui reviso si esta entrando RX_Flag=1;//
} else {
RX_Flag=0;
}
break;
}
Code[i]=temp;
}
// printf("temp %c\r\n",temp);
}
flag=0;//
}
- También necesitas entender la comunicación. Los datos llegan, pero vos no podes determinar el tiempo entre caracteres, por lo tanto tu for esta destinado a fallar en algun momento.. Mejor esperar todo lo que necesitas o esperas y recien ahi tratarlo... Veamos el for y veamos unos ejemplos donde vas a tener problemas
for(i=0;(kbhit()==1);i++) // si hay dato disponible
{
temp
=fgetc(); //guarde en temp el dato entrante delay_ms(2);
//.....
}
Obtenes una letra, y esperas 2ms mas todo lo que puede venir después.. Supongamos que son 3ms, si recibís una letra cada 2ms, la primera letra va a llegar bien, la segunda también, pero la tercera vas a tener problemas que tal ves se superpongan 2 caracteres que llegar.
Otro ejemplo con mas tiempo. Vos lees cada 3ms, pero las letras llegan cada 5ms, la primera vez va a tomarlo, y la segunda el kbhit va a ser 0 y no va a funcionar.
En las comunicaciones siempre lo mejor es tratarlo en las interrupciones, de esa forma no perdes nunca un caracter ni tampoco estas perdiendo el tiempo observando si llego algo. Apenas llega lo atiende la interrupción y te olvidas de eso en tu main.
Si estas enviando desde la PC, no tenes que esperar un caracter nulo '\0' sino tenes que esperar el salto de linea o retorno de carro '\r' o '\n'. Una forma facil es guardar hasta ver algun caracter de esos, al ver alguno de estos caracteres terminar la string con un '\0' y luego esperar hasta otro caracter distinto de '\r' o '\n'.
Observa que si o si necesitas o un caracter final, o un caracter inicial (con la condicion de saber el largo o determinar un tiempo de timeout). O de ultima, un tiempo entre comunicaciones.
De otra forma nunca a vas a poder determinar cuando inicia o termina un string enviado.
Nuevamente, necesitamos saber que es lo enviado para poder tratar de ayudarte lo mejor posible.