DEV Community

Priscila Gutierres
Priscila Gutierres

Posted on

Manipulação de portas no Arduino usando registradores e operações lógicas

Cada porta no Atmega328p possui três registradores principais: DDRx (Data Direction Register), para setar o modo das portas;
PORTx, usado para escrever na saída digital da porta;
PINx, usado pelo buffer de entrada para que possamos ler o seu estado.

Irei usar o registrador DDRB para fins de ilustração, porém todos os outros casos são análogos.

O registrador DDRx (DDRB, por exemplo) assim como PORTx e PINx, possui 8 bits, e cada um dos bits controla uma das portas, como mostra o diagrama a seguir:

7 6 5 ...
DDx7 DDx6 DDx5 ...
#define DDB 7
#define DDB 6
#define DDB 5
.
.
.
Enter fullscreen mode Exit fullscreen mode

Assim, para configurar a porta 3 como saída, fazemos um shift à esquerda:

1 << DDB3
Enter fullscreen mode Exit fullscreen mode

de forma que agora DDRB tem o seguinte valor:

7 6 5 4 3 2 1 0
0 0 0 0 1 0 0 0

A operação OU (|) sempre resulta em 1 quando um dos operandos é 1, bit a bit, como descrito na tabela de operações lógicas de |:

11111111 | 10100000 = 11111111

10011110 | 00001001 = 1001111

Sempre que queremos modificar apenas um bit no registrador DDRB para ligado, ou seja uma das oito portas como entrada ou saída, podemos modificar apenas o bit da porta correspondente para ligado (1), com a seguinte operação:

DDRB = DDRB | (1 << DDB3)
Enter fullscreen mode Exit fullscreen mode

temos agora que o bit relativo a DDB3 está ligado (1).
A operação & sempre resulta em 0 quando um dos operandos é 1 ou 0, de forma que essa operação é muito conveniente quando queremos desligar um bit (ou seja, setar uma posição para 0):

11111111 & 10100000 = 10100000

11111111 & 00001000 = 00001000

11111111 & 00000000 = 00000000

Assim, para desligar o bit relativo a DDB3, podemos fazer:

DDRB = DDRB & (1 << DDB3)
Enter fullscreen mode Exit fullscreen mode

de forma que desligamos o bit relativo a porta 3 no registrador DDRB.

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up