TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: dopoulo 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.
-
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!.
-
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
-
Pues la verdad es que si que era facil, pero estoy yo tadavia verde en esto.
Muchas gracias
-
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