Programació en C del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Manipulació de bits

Posar bits a 0

Per posar bits a 0 fem servir la funció and (i lògica) entre la variable i la màscara. Els bits que estiguin a 0 a la màscara seran desactivats i els que estiguin a 1 es mantindran inalterats. El següent diagrama descriu el procediment per a una variable W.

Funció and
	W = W & 0b11110000

Podem definir una macro que ens permeti desactivar un bit concret amb una funció senzilla. Per fer-ho, posarem aquesta definició a la inicialització del programa:

#define clrbit(var, bit) ((var) &= ~(1 << (bit)))

I dins del programa podem fer-la servir com es mostra a continuació:

	clrbit(Valor, 1);	// Posa a zero el bit 1

Posar bits a 1

Per posar bits a 1 fem servir la funció ior (o inclusiva) entre la variable i la màscara. Els bits que estiguin a 1 a la màscara seran activats i els que estiguin a 0 es mantindran inalterats. El següent diagrama descriu el procediment per a una variable W.

Funció ior
	W = W | 0b11110000

Podem definir una macro que ens permeti activar un bit concret amb una funció senzilla. Per fer-ho, posarem aquesta definició a la inicialització del programa:

#define setbit(var, bit) ((var) |= (1 << (bit)))

I dins del programa podem fer-la servir com es mostra a continuació:

	setbit(Valor, 1);	// Activa el bit 1

Invertir bits

Per invertir tots els bits d'una variable podem emprar l'operador ~. Però si només volem invertir alguns bits podem fer servir la funció xor (o exclusiva) entre la variable i la màscara. Els bits que estiguin a 1 a la màscara seran invertits i els que estiguin a 0 es mantindran inalterats. El següent diagrama descriu el procediment.

Funció xor
	W = W ^	0b00001111

Podem definir una macro que ens permeti invertir un bit concret amb una funció senzilla. Per fer-ho, posarem aquesta definició a la inicialització del programa:

#define flipbit(var, bit) ((var) ^= (1<<(bit)))

I dins del programa podem fer-la servir com es mostra a continuació:

	flipbit(Valor, 1);	// Inverteix el bit 1

A l'Exemple RB podeu veure una possible implementació.

Consultar bits

Per saber si un bit concret d'una variable està activat podem fer una and amb un vslor que només té a u el bit de la posició que ens interessa i a zero tots els altres. Si el resultat és zero vol dir que el bit estava desactivat i si és diferent de zero és que estava activat. No cal fer una comparació perquè en un if s'interpretarà com a cert qualsevol resultat més gran que zero.

Podem definir una macro que ens permeti consultar un bit concret amb una funció senzilla. Per fer-ho, posarem aquesta definició a la inicialització del programa:

#define testbit(var, bit) ((var) & (1 <<(bit)))

I dins del programa podem fer-la servir com es mostra a continuació:

	if(testbit(Valor, 1)){		// Mira si està activat el bit 1

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.