AVR: Portas I/O
O Registro DDRx seleciona a direção de um pino. Cada bit deste registro controla um pino específico. Se for escrito com 1 será configurado como saída. Se for 0, será configurado como entrada.
O Registro PORTx, quando o pino é configurado como saída (DDRxn=1), cada bit do registro configura o estado das saídas. Se for escrito com 1, o pino terá nível lógico alto. Se for escrito com 0, o pino terá nível lógico baixo. Quando o pino é configurado como entrada (DDRxn=0), cada bit do registro irá habilitar o resistor de pull-up. O bit PUD do registro MCUCR desativa/ativa todos os resistores de pull-up.
Todas as portas do AVR possui um resistor de pull-up em cada pino.
O Registro PINx é usado para fazer a leitura de um determinado pino. Este registro também tem uma outra função interessante, quando um bit deste registro é definido como 1, inverte o valor do bit do registro PORTx, assim pode ser usado para alterna os estados das saídas.
Estou utilizando o compilador MikroC PRO AVR.
EXEMPLO (Leitura e Escrita)
//ATMEGA328P
void main()
{
DDRB = 255; // define os pinos da portb como saída
DDRC = 0; //define os pinos da portc como entrada
while(1)
{
if(PINB.F0)//faz a leitura do pino 0 da portb (PB0)
{
PORTC.F0 = 1;//pino 0 da portc (PC0) nivel logico alto
PORTC.F1 = 0;//pino 1 da portc (PC1) nivel logico baixo
}
else
{
PORTC.F0 = 0;//pino 0 da portc (PC0) nivel logico baixo
PORTC.F1 = 1;//pino 1 da portc (PC1) nivel logico alto
PORTD = 6; //define o valor das saidas da portd
}
delay_ms(100);
}
}
EXEMPLO (Pisca-Pisca com Led)
//ATMEGA328P
void main()
{
DDRB = 1;//pino 0 da portb (PB0) definido como saida
while(1)
{
PINB.F0 = 1;//alterna o estado do pino 0 da portb (PB0)
/////////OU/////////
PORTB.F0 = ~PORTB.F0;//também alterna o estado do pino 0 da portb (PB0)
delay_ms(500);
}
}



Legal Thiago, conhecer o AVR obrigado por mais esta aula!
ResponderExcluir