Hola, os comento mi problema por si alguien puede echarme una mano o aconsejarme, gracias a todos de antemano...
Estoy trabajando en C18 con un PIC18f4550 que se comunica con dos dispositivos diferentes: una memoria externa y otro PIC. De la memoria obtengo datos en forma de BYTES y al PIC secundario tengo que enviarle los datos de la memoria(despues de modifcarlos, etc) en serie pero en forma de BITS(16 en concreto).
Bueno mi primer problema es el enviarle los bits al PIC, pues en C18 no hay variables booleanas; he optado por utilizar una estructura para crear un nuevo tipo de dato, algo así como:
typedef struct{
int8 bit0;
int8 bit1;
//....
int8 bit15
}dato;
con lo que puedo declarar variables de "tipo dato" que contienen el valor de 16 bits.... Hasta aquí bien pero, el verdadero problema que tengo es que no se como pasar desde los bits(reales) de cada byte que cojo de la memoria hasta los bits del tipo de estructura que he definido. Es decir, lo que quiero es cojer un byte de la memoria y meter el primer bit en dato1.bit0, el segundo en dato1.bit1, etc. para despues mandarselos al otro PIC.
Creo que podría hacerlo "jugando" con bucles, rotaciones de bits y el acumulador, pero me parece bastante lioso. Tambien he pensado que podría usar ensamblador en linea dentro de mi código, pues en asm(si no recuerdo mal) si que puedes manejar los bits de una variable. Sería algo asi:
dato_memoria = 0xAA; //imaginemos que este es el dato que me viene de la memoria externa....
asm{
dato1.bit0 = dato_memoria.0;
dato1.bit1 = dato_memoria.1;
//....
}
Lo que ocurre es que nunca he utilizado ensamblador para PIC18(sólo para PIC16) y tampoco he utilizado ensamblador dentro de código en C por lo que ni siquiera se si se pueden mezclar variables declaradas fuera del trozo en ensamblador, dentro de este(que es lo que he heco aqui).
Si alguien pudiese aconsejarme, se lo agradezco de antemano. Saludos!