Considere as técnicas de bitwise em linguagem C. Fazendo uso do operador de shift left, crie a operação descrita a seguir nos registradores de 8 bits:
a) Configurar bit alto no PORTD0;
b) Configurar bit alto em PORTD1, PORTD3, PORTD5 e PORTD7;
c) Limpar o PORTD3;
d) Testar se o PORTB1 está em nível alto.
a) Configurar bit alto no PORTD0;
b) Configurar bit alto em PORTD1, PORTD3, PORTD5 e PORTD7;
c) Limpar o PORTD3;
d) Testar se o PORTB1 está em nível alto.
Passo 1
Vamos dar uma olhada no que o exercício está pedindo. Ele trata das técnicas de operações bitwise em linguagem C, mais especificamente utilizando o operador de shift left (
<<
). Precisamos realizar algumas operações em registradores de 8 bits, como configurar ou limpar certos bits e testar o estado de um bit específico. Para resolver isso, vamos precisar entender como funcionam os operadores bitwise e, em particular, como usar o shift left para manipular bits.Passo 2
a) Configurar bit alto no PORTD0
Primeiro, vamos configurar o bit 0 do registrador PORTD. Para configurar um bit, usamos o operador OR bitwise (
|
). O operador de shift left (<<
) nos ajuda a posicionar o bit que queremos configurar. Aqui, queremos que somente o bit 0 seja alto (1).A fórmula fica assim:
PORTD = PORTD | (1 << 0);
Isso significa que estamos mantendo os outros bits de PORTD como estão e ajustando o bit 0 para 1.
Passo 3
b) Configurar bits altos em PORTD1, PORTD3, PORTD5 e PORTD7
Agora, precisamos configurar os bits 1, 3, 5 e 7 do PORTD. Podemos fazer isso combinando vários bits usando o operador OR (
|
). Usamos shift left para cada bit que queremos configurar e depois juntamos todos eles.A fórmula fica assim:
PORTD = PORTD | ( (1 << 1) | (1 << 3) | (1 << 5) | (1 << 7) );
Aqui, cada
(1 << n)
desloca o bit 1 para a posição n, e o operador OR combina esses bits para configurar todos de uma vez.Passo 4
c) Limpar o PORTD3
Para limpar ou zerar o bit 3 do PORTD, usamos o operador AND bitwise (
&
) juntamente com o operador NOT (~
). Primeiro, criamos uma máscara onde apenas o bit 3 é 0 e os demais são 1. Depois, aplicamos essa máscara usando AND para limpar o bit desejado.A fórmula fica assim:
PORTD = PORTD & ~(1 << 3);
Isso mantém todos os bits de PORTD inalterados, exceto o bit 3, que é definido como 0.
Passo 5
d) Testar se o PORTB1 está em nível alto
Para verificar se o bit 1 do PORTB está alto, usamos o operador AND bitwise (
&
) e comparamos o resultado com zero. Se o resultado for diferente de zero, significa que o bit está alto.O código fica assim:
if (PORTB & (1 << 1)) {
// PORTB1 está alto
} else {
// PORTB1 está baixo
}
Aqui,
(1 << 1)
desloca o bit 1 para a posição correta, e PORTB & (1 << 1)
verifica o estado desse bit.Resposta
As operações solicitadas podem ser realizadas da seguinte forma em C utilizando o operador de shift left:
a)
PORTD = PORTD | (1 << 0);
b)
PORTD = PORTD | ( (1 << 1) | (1 << 3) | (1 << 5) | (1 << 7) );
c)
PORTD = PORTD & ~(1 << 3);
d)
if (PORTB & (1 << 1)) {
// PORTB1 está alto
} else {
// PORTB1 está baixo
}