Hola foreros, tengo una duda a la hora de enviar y recibir datos via serie con mi 18F452.
La cuestión es la siguiente: mediante el puerto B del micro recibo el estado de unos interruptores, me creo una trama y se la envío por el rs232 a un programa que tengo en el ordenador (creado en Visual C++).
A su vez, el programa del PC me envía mi PIC una trama de datos de 9 bytes, la cual tengo yo que guardar para luego hacer unas operaciones con ella.
La pregunta es la siguiente: cómo se yo cuando REALMENTE recibo esa trama??
>> He probado con una interrupcion serie: creo que funciona de la siguiente manera: cuando le llega al pic un dato por el puerto serie, se activa la interrupcion #int_rda, es decir, que puedo poner una funcion que me haga un bucle para almacenar en un array los 9 bytes que me envía el PC. Corregirme si esto no es así.
Pero de lo que no estoy seguro es que me coja bien los datos con el bucle: ¿que és lo que debería poner realmente? ¿algo parecido a ésto?:
for (i=0;i<9;i++)
{
buffer=getc();
i++;
}
>> Otra cuestión que me está rondando por la cabeza es cómo puedo manejar los flags de interrupcion de los registros de envío y recepcion, y si se puede acceder a ellos directamente.
Por qué pregunto ésto? Debido a que me gustaría saber si puedo implementar una funcion que me diga el estado del puerto: es decir, saber yo de antemando que si está ocupado recibiendo datos del PC, no puedo mandar datos hasta que no acabe.
Sabríais cómo hacer ésto, como preguntar el estado de los bits RCIF,TXIF Y SSPIF del registro de interrupción PIR1???, y ver realmente cuando termina de recibir o enviar??
Si podeis ilustar algun ejemplo o remitirme cualquier tipo de información os lo agradecería.
Un saludo