El gets() se queda esperando encerrado ahi hasta que llegue un 13 como decis, pero OJO, no un numero 13 ( que serian un '1' y un '3' ) sino el numero 13 decimal o si lo queres en hexa 0xD
Lo correcto seria : '4','H','O','L','A',0xD
Voy a nombrar varias cosas que para mi estan mal:
En una interrupcion no deberias tener un loop infinito como es gets(); , deberias tomar el dato con getch y salir, cuando detectas el 0xD realizas la copia. Algo asi (hecho rapidamente no se si esta bien y tal ves rebuscado):
int8 indice = 0xFF;
#int_rda
void bluetooth(void)
{
// Me aprovecho del overflow asi de 0xFF pasa a 0x00
// Y no tengo que complicarla
indice++;
// Guardo
cadena
[indice
] = getch();
// Reviso si llego el final
if(cadena[indice] == 0xD)
{
// Cierro el string
cadena[indice] = 0x0;
// Copio al segundo, no uso el dato de longitud
for(i = 1; i < 6; i++ )
{
segunda[i-1] = cadena[i];
}
// Indice con valor 0xFF, asi la proxima ves que entra ese 0x00
indice = 0xFF;
}
// Proteccion contra buffer overflow
if(indice >= 6 && indice != 0xFF)
{
indice = 0xFF;
}
}
Observa unas cosas, proteccion contra overflow, es decir si el array tiene 6 lugares (de 0 a 5) no deberia pasar de eso,
La otra en el for que vos usas la L, aca tenes 2 errores, Suponer un que '4' es 4, lo cual no lo es , sino que es 0x34 o 52 en decimal. A no ser que enviaste 0x4 y no '4'.
Y la otra es esperar que L este dentro de los valores del array (0 a 5), si en algun momento llega un valor como 20 estarias escribiendo lugares que no deberias.
En tu main luego ahces L == 2, pero no se si es L == '2'.
Todo esto suponiendo que realmente estes recibiendo algo.
----------------------------------------------------------------------------
Para verificar que el PIC recibe correctamente podes hacer que TODO lo que reciba lo envie de vuelta, de esa forma en tu aplicacion deberias recibir el mismo texto.
#int_rda
void bluetooth(){
putc(getc());
}
De esa forma sabes si lo que llego es correcto