Se supone que sólo entraría en el if si kbhit() fuera 1 o TRUE pero con -1 no debería entrar. Ya que no se cumpliría con la condición " kbhit() verdadero "
Si nunca querés salir del loop conviene escribirlo como
do
{
...
...
...
}
while (TRUE);
Eso sería un loop infinito y no presta lugar a confusiones.
Podés buscar en CCS el .h del PIC que estés utilizando y ver como llama al registro donde se encuentre el bit RCIF. Luego buscar la manera de testear dicho bit en forma manual sin hacer uso de kbhit() para ver que pasa.
Me parecío haber leído en algunos post que CCS tiene la función bit_test, con ella podrías testear el bit RCIF.
Sería llegar a poner algo así....
while (TRUE)
{
if (bit_test(PIR1,RCIF) == 1)
{
// todo lo que quieras hacer si se pulsa una tecla
}
else
{
detencion();
}
}
Tal vez hay algún bug en el compilador y por ello el fallo