Manipulação de bits
Manipulação de Bits
Na programação de microcontroladores, é muito frequente a necessidade de controlar o valor de apenas alguns bits, dentro de um byte, deixando os demais bits intactos. A linguagem C possui alguns recursos para esse fim. Vamos estudar alguns deles aqui:
Máscara de Bits:
Observe as propriedades lógicas abaixo: X ∙0 = 0 →Leva a zero X ∙1 = X →Mantém X +0 = X X +1 = 1 X ⊕0 = X X ⊕1 = X →Mantém →Leva a um →Mantém →Inverte
Perceba que, para cada par de operações, sempre há um valor que modifica o valor de X (Leva a zero, Leva a um, ou inverte), e outro que mantém o valor de X. Assim, sempre que quisermos aplicar uma dessas ações sobre alguns bits, preservando os demais, usaremos os operadores lógicos, da seguinte forma: Ex 1: desejase levar a zero os bits 5, 3 e 2 de um registrador, preservando o valor dos demais bits. Solução: realizar a operação AND bitabit entre o registrador e uma máscara de bits, a qual contém 0 nos lugares que se deseja zerar:
Código C: rgsrdr=rgsrdr&01001; eitao eitao b1101
ou rgsrdr& 01001; eitao = b1101 Ex 2: desejase levar a um os bits 7, 6, 3 e 0 de um registrador, preservando o valor dos demais bits. Solução: realizar a operação OR bitabit entre o registrador e uma máscara de bits, a qual contém 1 nos lugares que se deseja levar a um:
Código C: rgsrdr=rgsrdr|01010; eitao eitao b1001 ou rgsrdr| 01010; eitao = b1001 Ex 3: desejase inverter os bits 4 e 3 de um registrador, preservando o valor dos demais bits. Solução: realizar a operação XOR bitabit entre o registrador e uma máscara de bits, a qual contém 1 nos lugares que se deseja inverter:
Código C: rgsrdr=rgsrdr^00010; eitao eitao b0100 ou rgsrdr| 00010; eitao = b0100
Mais exemplos: ● Testar apenas um bit, ignorando todos os demais: Ex: desejase testar apenas o bit 5 de um registrador: Solução: