Quais as funções dos registradores PORTB, PORTC, PORTD?

Passo 1

Beleza, a pergunta é simples: “Quais as funções dos registradores PORTB, PORTC, PORTD?” Isso cai no conteúdo de microcontroladores (por exemplo AVR/ATmega), mais especificamente nos registradores de I/O digitais. Pra resolver a gente vai precisar entender dois pontos-chave:
  1. O que é um registrador de I/O num microcontrolador.
  2. Como o PORTx (x = B, C ou D) interage com DDRx e PINx pra controlar entradas, saídas e resistores pull-up.

Passo 2

Antes de falar de cada PORTx, vamos ver a teoria por trás do PORTx num AVR:
  • DDRx (Data Direction Register) define se cada pino do port x é entrada (0) ou saída (1).
  • PORTx é o registrador de dados propriamente dito. O que você escrever nele vai afetar o pino:
    • Se DDRx.bit = 1 (saída), escrever 1 em PORTx.bit põe o pino em nível alto (Vcc) e escrever 0 põe em nível baixo (GND).
    • Se DDRx.bit = 0 (entrada), escrever 1 em PORTx.bit ativa o resistor pull-up interno (deixa a entrada “puxada” pra 5 V), enquanto 0 desativa esse pull-up.
  • PINx é o registrador de leitura: você lê nele o valor lógico presente no pino quando está configurado como entrada.

Passo 3

Agora sim, falando especificamente de PORTB, PORTC e PORTD:
  1. Cada um desses registradores controla um conjunto de até 8 pinos físicos que formam a “Porta B”, “Porta C” e “Porta D”.
  2. Eles funcionam TUDO igual entre si – a diferença é só quais pinos do chip eles mapeiam.
  3. Exemplo prático: se você quiser acender LED no PB3, você faz
DDRB |= (1<<PB3);   // configura PB3 como saída  
PORTB |= (1<<PB3);  // coloca PB3 em nível alto (liga o LED)  
  1. Se você quiser ler um botão em PD2 com pull-up, faz
DDRD &= ~(1<<PD2);  // PD2 como entrada  
PORTD |= (1<<PD2);  // ativa pull-up em PD2  
if ( PIND & (1<<PD2) ) { 
   // aqui botão solto (= nível alto graças ao pull-up) 
}

Resposta

Os registradores PORTB, PORTC e PORTD são os “data registers” dos respectivos conjuntos de pinos do microcontrolador. Você escreve neles para:
  • Colocar um pino configurado como saída em nível alto (1) ou baixo (0).
  • Ativar/desativar o resistor pull-up interno num pino configurado como entrada.

Exercícios relacionados