NoSepComo te recomiendo que dentro de la isr hagas las menos tareas posibles, ya que si pones delay_ms, printf, etc... todo esto hace que el micro esté mucho tiempo dentro de la interrupción, y piensa que mientras estés en la interrupción, si te llega otro carácter, no te vas a enterar.
Te recomiendo que hagas algo así...
void RDA_isr()
{
if (kbhit())
{
dato_rx=fgetc();
if(dato_rx=='Z')
{
bandera=1;
cadena_rx[incremento_cadena]=dato_rx;
incremento_cadena=0;
}
else
{
cadena_rx[incremento_cadena]=dato_rx;
incremento_cadena++;
}
}
}
este código almacena en "cadena_rx" todo lo que llega por el serie hasta que recibe una 'Z' que yo he asignado como carácter de final de trama. Una vez ha recibido la 'Z' pone bandera=1, y es en tu main donde has de comparar las cadenas y hacer todo lo que tengas que hacer, pero no dentro de la interrupción.
dentro de tu main, has de tener algo así...
while(TRUE)
{
if(bandera==1)
{
bandera=0;
incremento_cadena=0;
(...) aquí comparas tus cadenas de caracteres y lo que tengas que hacer
}
}
Saludos...