La parte de la recepción de los datos funciona bien de la manera que la estoy realizando.
Lo intenté de esa manera, no funcionó. Por ello lo hice de la forma que mostré.
Lo que hiciste... con lo hecho con el for es lo mismo, debería funcionar correctamente. Si no funciona entonces es algún otro problema con otra parte del código tenes. En ves de repetir 300 veces lo mismo, hice un bucle para que repita esas 300 veces, nada mas.
De todas formas, puede ser que al manipular un arreglo de esa magnitud (300), el compilador entre en conflicto?
Para algunos PICs si, los de gama baja y base, pero ahora que veo es un PIC18 lo cual no tenes limite ( solo la RAM entera). No habia visto el PIC que estabas usando.
El tema es que puedo llegar a recibir hasta 300 caracteres.
Desde la parte del bluetooth imagino ( datos ) , Y espero que los datos recibidos ninguno tenga una 'K', sino seria un problema.
-----------------
Hasta ahora el unico problema que puede suceder con el codigo pasado ( no se las demas partes), es que no estas recibiendo por una interrupcion, lo cual podes tener un
error de overrun al llegar 2 caracteres mientras estas haciendo otra cosa.
Todo codigo que pasaste no veo problema en el mismo, si ineficiencia como la parte de preguntar 300 veces lo mismo.
Todo codigo que pase deberia funcionar correctamente.
Una sola cosa, sacaria el Busy2USART() del for, ya que eso es para cuando trasmitis, no hay bit que indique que estas a mitad de una recepcion, sino que hay un bit para cuando recibiste el dato, quedando simplemente:
for(i =0; i<300; i++)
{
while(!DataRdy2USART());
Rxdata[i] = Read2USART();
if(Rxdata[i]=='K'){break;}
}
De todas formas, tengo mis dudas respecto a la condicion de que sea una 'K', y si o si deberias agregar un timeout ( un simple contador, aunque reformaria el bucle). En fin... En el codigo que pasaste/pase no veo error alguno, seguramente debe estar en otro lado.
En MPLAB podes simular las cosas, crea un nuevo proyecto con el mismo micro, crea un array de 300 lugares y hacerles pasar ese codigo. Ejemplo:
Ejemplo aca siempre saltaria el While como si tuviera caracteres recibidos, guardaria el mismo valor que el indice (en tu codigo seria lo que hay en RCREG) y cuando llegue a 200 ( tu 'K' de mentira para este ejemplo) deberia salir de ese bucle. Si lo simulas deberia hacer eso (podes crear un proyecto aparte de prueba, y vas a ver )
Tambien lo podes hacer pasar por el otro codigo para comprobar que funcione.
// Todo esto dentro de un while(1)
for(i =0; i<300; i++)
{
while(0);
Rxdata[i] = i;
if(Rxdata[i]==200)
{
break; //breakpoint aca
}
}
for(i=0;i<300;i++){
if(Rxdata[i] == 150){
Rxdata[299] = 0; // Poner un breakpoint aca y ver si entra
break;
}
}
En fin, aprovecha que podes simular en el MPLAB, podes simular los perifericos ( UART/I2C/etc) pero hacelo simple no dependas de ellos y vas a ver que los codigos pasados son correctos.