TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 14 de Noviembre de 2005, 21:23:00

Título: Leyendo bits de un registro int8
Publicado 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... Sonrisa Gigante

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 Vacilando
Título: RE: Leyendo bits de un registro int8
Publicado por: El_Coach en 15 de Noviembre de 2005, 04:53:00
Es muy fácil Sonrisa , 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 Giño

Un saludo Rebotado
Título: RE: Leyendo bits de un registro int8
Publicado por: jfh900 en 15 de Noviembre de 2005, 13:47:00
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.
Título: RE: Leyendo bits de un registro int8
Publicado por: migsantiago en 15 de Noviembre de 2005, 19:17:00
Gracias coach y jfh900, interesantes soluciones, principalmente la de las estructuras. Sonrisa Gigante

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