Autor Tema: Leyendo bits de un registro int8  (Leído 2480 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Leyendo bits de un registro int8
« 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

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: Leyendo bits de un registro int8
« Respuesta #1 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
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
RE: Leyendo bits de un registro int8
« Respuesta #2 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.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Leyendo bits de un registro int8
« Respuesta #3 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.


 

anything