TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 14 de Noviembre de 2005, 21:23:00
-
Hola!
Digamos que tengo un registro de 8 bits:
int8 registro;
y le asigno el valor binario siguiente:
registro=0b01110011; //01110011
Y luego quisiera en un registro de 1 bit (o bool) meter el bit 0 del registro de 8 bits, ¿cómo lo hago?
El resultado sería...
bit0=1
bit1=1
bit2=0
bit3=0
bit4=1
bit5=1
bit6=1
bit7=0
Espero ser claro... 
Me imagino que hay que usar filtros AND para deshacerse de los bits no necesitados, pero siendo C debe haber una forma rápida de sacar un bit de un registro y ponerlo en otro.
Gracias
-
Es muy fácil
, con la instrucción bit_test():
bit0 = bit_test( registro , 0 );
bit1 = bit_test( registro , 1 );
bit2 = bit_test( registro , 2 );
...
bit7 = bit_test( registro , 7 );
También está bit_set() y bit_clear() , que se utilizan igual que bit_test, pero en este caso ponen a 1 o a 0 el bit indicado de la variable. En la ayuda del ccs lo verás más claro 
Un saludo
-
La forma mas sencilla es definir una estructura, como por ejemplo:
struct sByte
{
bit bit0;
bit bit1;
bit bit2;
bit bit3;
bit bit4;
bit bit5;
bit bit6;
bit bit7;
}
union
{
struct sByte usByte;
int nByte;
} uByte;
La forma de utilizarlo es:
uByte.nByte = 0b01110011;
Y para acceder a cualquiera de los bit"s:
uByte.usByte.bit4 devolveria el bit 4 del registro.
-
Gracias coach y jfh900, interesantes soluciones, principalmente la de las estructuras.

Voy a checarla más en la ayuda, a ver si le entiendo mejor.