Estoy intentando leer el pin PB0 que está conectado a la resistencia interna de pull-up. En mi código lógico,
- si PB0 es ALTO, ejecute if-block
- si PB0 está BAJO, ejecute else-block
Pero cuando conecto PB0 al pin GND, todavía se está ejecutando if-block .
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
//For testing
DDRD = 0b11111111;
PORTD = 0b00000000;
/*
OLD CODE
DDRB |= (0<<PB0|1<<PB1);// PB0 -input, PB1 -output
PORTB |= (1<<PB0|0<<PB1);//activated pullup in PB0
*/
//CORRECTED CODE
DDRB |= (1 << PB1); // PB1 -output
DDRB &= ~(1 << PB0); // PB0 -input
PORTB |= (1 << PB0); // Activated pullup in PB0
PORTB &= ~(1 << PB1); // PB1 low
while(1)
{
_delay_ms(100);
if( PINB & (1<<PB0))
{
PORTD = 0x00;
}
else
{
PORTD = 0xFF;
}
_delay_ms(500);
}
}
EDITAR: Hubo un error en mi operación bitwise. Corregido y mencionado como NEWCODE. Guardó el código antiguo como CÓDIGO ANTIGUO para referencia. Pero, el código todavía no funciona como debería cuando conecto PB0 a GND.