Podes hacerlo con interrupciones o sin interrupciones. Con sus ventajas y desventajas.
La interrupcion te permite rapidamente leer lo que llego y volver a seguir lo que estabas haciendo
Sin interrupcion te permite leerlo cuando quieras, el tema esta en que tenes que tener la precaucion de leerlo antes que llegue otro dato.
Vos envias 12 bits, anque en realidad se transmiten en bytes, es decir serian 2 bytes a transmitir. Y recibis en Bytes tambien, 1 por ves, si transmitis 100, recibis 100 pero uno por ves.
Supongamos sin interrupcion , con un receptor de 1 nivel de buffer ( o sesa puede almacenar solo 1 dato, la cantidad depende del modulo)
Cuando se almacena el dato se activa el flag RXIF , (esto depende del micro) y tu dato va a estar en RXREG (el nombre tmb depende del micro)
Algo asi, parecido pero para que te des una idea, seria sin interrupciones
int Vector_Guardado[2],j=0;
bit dato_listo;
if (RXIF == 1) //Si esta en 1 llego un dato
{
dato_listo=0; // Pongo a 0 ya que no se si ya llegaron los 2 datos o no, para que no me quede mitad de un dato viejo y mitad de uno nuevo
Vector_Guardado[j] = RXREG; // Guardo lo que llego primero en Vector_Guardado[0] y luego cuando entre de nuevo en Vector_Guardado[1]
j++;
RXIF=0; // Borro el flag
if(j==2) // LLego a 2, es decir ya se guardaron los 2 datos?, entonces pongo a 0 j, asi comienza de nuevo y 1 dato_listo para saber que el valor es valido.
{
j=0;
dato_listo=1;
}
}
Con interrupciones es exactamente igual, nomas que el codigo ese estaria dentro de la interrupcion
int Vector_Guardado[2],j=0;
bit dato_listo;
void interrupt(void){
if (RXIF == 1) //Si esta en 1 llego un dato
{
dato_listo=0; // Pongo a 0 ya que no se si ya llegaron los 2 datos o no, para que no me quede mitad de un dato viejo y mitad de uno nuevo
Vector_Guardado[j] = RXREG; // Guardo lo que llego primero en Vector_Guardado[0] y luego cuando entre de nuevo en Vector_Guardado[1]
j++;
RXIF=0; // Borro el flag
if(j==2) // LLego a 2, es decir ya se guardaron los 2 datos?, entonces pongo a 0 j, asi comienza de nuevo y 1 dato_listo para saber que el valor es valido.
{
j=0;
dato_listo=1;
}
}
}
Aclaracion: los codigos son de guia, no significa que vayan a funcionar perfectamente.