Escolar Documentos
Profissional Documentos
Cultura Documentos
Registradores
DE RODOLFO PICORETI ·
Para determinar os estados de suas entradas e saídas o microcontrolador possui registradores na
qual esses dados são armazenados. Ao chamar as funções de entrada e saída fornecidas pela
biblioteca padrão do Arduino o que fazemos é nada mais que modificar tais registradores.
Então porque acessar estes registradores diretamente?
DDR
Os registradores do tipo DDR (Data Direction Register) são responsáveis por determinar se os
pinos de um determinado PORT se comportarão como entrada ou saída. Cada bit do
registrador DDR controla o estado do respectivo pino. Por exemplo: O bit 1 do registrador
DDRB (DDB1) controlará o estado do pino PB1 e consequentemente o pino D9 do Arduino
Uno como mostrado no mapa.
Para definir um pino como saída devemos setar seu respectivo bit do registrador DDR
como 1 e para defini-lo como entrada seta-lo para 0.
1 /* Equivalente:
2 pinMode(9,OUTPUT);
3 pinMode(9,INPUT);
4 */
5
6 DDRB |= (1 << DDB1);
DDRB &= ~(1 << DDB1);
7
PORT
Os registradores do tipo PORT são responsáveis por determinar se um pino está definido como
alto (HIGH) ou baixo (LOW).
Para definir um pino como alto devemos setar seu respectivo bit do registrador PORT
como 1 e para defini-lo como baixo seta-lo para 0.
1 /* Equivalente:
2 pinMode(9,OUTPUT);
3 digitalWrite(9,LOW);
4 */
5
6 DDRB |= (1 << DDB1);
PORTB &= ~(1 << PORTB1);
7
/* Equivalente:
01 digitalWrite(8,HIGH);
02 digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
03 digitalWrite(11,HIGH);
04 digitalWrite(12,HIGH);
05 digitalWrite(13,HIGH);
06 */
07
PORTB = 0xFF;
08
09
10
PIN
Os registradores do tipo PIN são responsáveis por guardar o estado lógico de um pino.
?
1
/* Equivalente:
2 pinMode(9,INPUT);
3 digitalWrite(9,HIGH); //Nesse contexto, ativa o pull-up interno.
4 bool x = digitalRead(9);
5 */
6
7 DDRB &= ~(1 << DDB1);
PORTB |= (1 << PORTB1);
8 bool x = (PINB & (1 << PINB1));
9
Todo o conteúdo apresentado pode ser encontrado no datasheet do microcontrolador.