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<
... 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<
) ... 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!.