Funções de Manipulação de bits com o Arduino
Manipulação de bits com o Arduino
Nesta lição vamos apresentar diversas funções que permitem realizar manipulação de bits no Arduino. Com estas funções podemos controlar individualmente os bits que compõem um valor numérico inteiro, mesmo que ele seja representado no sistema de numeração decimal.
As funções que estudaremos são cinco: bit(), bitRead(), bitSet(), bitClear() e bitWrite().
Função bit()
Retorna o valor de uma dada posição de um bit (independente de variável)
bit(0) é igual a 1, bit(1) é 2, bit(2) é 4, e assim por diante.
A posição de bit 0 é e menos significativa (bit mais à direita, LSB)
Sintaxe:
bit(posiçãoBit)
Função bitRead()
Retorna o valor (0 ou 1) do bit em uma determinada posição de uma variável x.
Sintaxe:
bitRead(x, posiçãoBit)
Função bitSet()
Escreve um valor 1 em uma posição especificada de uma variável x.
Sintaxe:
bitSet(x, posiçãoBit)
Função bitClear()
Apaga (escreve um valor 0) em uma posição especificada de uma variável x.
Sintaxe:
bitClear(x, posiçãoBit)
Função bitWrite()
Escreve um valor 1 ou 0 em uma posição especificada de uma variável x.
Sintaxe:
bitWrite(x, posiçãoBit, valor)
Exemplo
Vejamos um exemplo de manipulação de bits. No programa a seguir declaramos uma variável x, que será utilizada para lermos e gravarmos bits utilizando as funções apresentadas na lição.
// Usando funções de manipulação de bits int x = 0; void setup() { Serial.begin(9600); } void loop() { Serial.print("Valor inicial de x: "); Serial.println(x); bitSet(x, 2); Serial.print("Valor de x apos configurar bit na pos. 2: "); Serial.println(x); Serial.print("Valor em binario: "); Serial.println(x, BIN); Serial.print("Verificando o bit na pos. 6: "); Serial.println(bitRead(x, 6)); Serial.print("Valor em binario: "); Serial.println(x, BIN); Serial.print("Alterando o bit na pos. 6 e verificando novamente: "); bitWrite(x, 6, 1); Serial.println(bitRead(x, 6)); Serial.print("Valor em binario: "); Serial.println(x, BIN); Serial.print("Valor atual do numero: "); Serial.println(x); Serial.print("Valor em binario: "); Serial.println(x, BIN); Serial.print("Limpando todos os bits do numero: "); for (int i=0; i<8; i++) { bitClear(x, i); } Serial.println(x); Serial.println(); delay(3000); }
Neste programa de exemplo declamaros uma variável x, inicializada com o valor 0. Logo em seguida configuramos o bit da segunda posição em 1, o que equivale ao valor 4 (22), e exibimos seu valor em decimal e em binário na saída do Monitor Serial.
Depois, é verificado o valor do bit na posição 6 (que é 0), e então alteramos esse bit para 1. Essa alteração irá somar o valor 64 ao número, pois 26 = 64. Verificamos novamente o valor do número, em binário e em decimal, que será igual a 68 (4 + 64).
E, por fim, limpamos todos os bits do número, zerando-o novamente, por meio de uma instrução bitClear() aplicada em um laço for.
Escreva um comentário