Autor Tema: Setear bit de una variable  (Leído 3539 veces)

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

Desconectado dopoulo

  • PIC10
  • *
  • Mensajes: 24
Setear bit de una variable
« en: 23 de Febrero de 2006, 11:55:00 »
¿Tiene alguien una implementacion de las funciones "set_bit" y "clear_bit" (o un nombre parecido) que sirven para setear y borrar un bit en una variable determinada?

Creo que el compilador de ccs las trae interna, pero estoy haciendo un trabajo con el HI-Tech y modificar todo mi codigo solo para eso me parece poco viable.

Gracias.

Desconectado fonta2

  • PIC10
  • *
  • Mensajes: 19
RE: Setear bit de una variable
« Respuesta #1 en: 23 de Febrero de 2006, 13:33:00 »
Hola dopoulo, muy buenas.
En la ayuda del compilador CCS especifica que el bit_clear(var,bit); es lo mismo que
var &= ~(1<<bit);
mientras que el bit_set(var,bit); es lo mismo que var |= (1<<bit);
Dicho de otra forma; si quieres poner el bit 0 de la variable var a 0, solo tienes que hacer la función lógica AND con  var=var&0b11111110;
si quieres poner el bit 0 de la variable var a 1, solo tienes que hacer la función lógica OR con  var=var|0b00000001;

1<<bit es para que desplace a la izquierda un 1 tantas veces como diga bit:
1<<0 ... 00000001
1<<1 ... 00000010
1<<2 ... 00000100
1<<3 ... 00001000
1<<4 ... 00010000
1<<5 ... 00100000
1<<6 ... 01000000
1<<7 ... 10000000
El símbolo ~ significa complementar el dato o variable:
~(1<<0) ... 11111110
~(1<<1) ... 11111101
~(1<<2) ... 11111011
~(1<<3) ... 11110111
~(1<<4) ... 11101111
~(1<<5) ... 11011111
~(1<<6) ... 10111111
~(1<<7) ... 01111111
Todo esto es válido si se trabaja con registros de 8 bit, si fueran de 16 bit se debe indicar que el 1 del desplazamiento sea de 16 bit (para la operación de cambio de bit se procese correctamente, te lo digo por experiencia).
Entonces para 16 bits las funciones serían:
var &= ~((unsigned int)1<<bit); para poner a 0 el bit especificado en bit.
var |= ((unsigned int)1<<bit); para poner a 1 el bit especificado en bit.
Mira la ayuda del compilador de CCS que te será muy útil.
Espero haberte ayudado, un saludo y suerte!.


Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Setear bit de una variable
« Respuesta #2 en: 24 de Febrero de 2006, 02:05:00 »
Buenas.

Cambiar el valor de un bit de una variable es muy sencillo:

Supongamos que tenemos la variable "v" y queremos poner el bit 4 a 1:

v |= 0x10; // Hacemos una operacion OR (|) de v con el binario 00010000
// El único bit que ponemos a 1 es el bit que queremos cambiar en el vector v



Supongamos que tenemos la variable "v" y queremos poner el bit 2 a 0:

v &= 0xFB; // Hacemos una operacion AND (&) de v con el binario 11111011
// El único bit que ponemos a 0 es el bit que queremos cambiar en el vector v


Supongamos que tenemos la variable "v" y queremos cambiar el estado del bit 7, es decir, si estaba a 0 ponerlo a uno y viceversa. El "toggle" se hace asi:

v ^= 0x80; // Hacemos una operacion XOR (^) de v con el binario 10000000
// El único bit que ponemos a 1 es el bit que queremos cambiar de estado en el vector v

Desconectado dopoulo

  • PIC10
  • *
  • Mensajes: 24
RE: Setear bit de una variable
« Respuesta #3 en: 24 de Febrero de 2006, 16:25:00 »
Pues la verdad es que si que era facil, pero estoy yo tadavia verde en esto.
Muchas gracias

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Setear bit de una variable
« Respuesta #4 en: 26 de Febrero de 2006, 13:12:00 »
Estos vichos disponen de instrucciones para el manejo de bits muy rapidas y simples .
Seguro que ccs tambien las usa .

  #asm  
    BCF Registro , 0
    BCF Registro , 1

    BSF Registro , 7
    BSF Registro , 6
  #endasm


 

anything