Timer/Counter programming Arduino I'm trying to blink an LED on an ATMega328P (same MCU as Arduino I think..) using the internal timer but I'm stuck since it doesn't seem to light the LED at all....

#include &lt;avr/io.h&gt;
//#include &lt;avr/delay.h&gt;

void delay(void);

void delay_long(void);

int main(void) {

  DDRB = 0xFF;                   // port B is configured as output   DDRB : 0b11111111
  DDRB &amp;= ~(1&lt;&lt;PB1);             // pin 1 of port B is configured as input  DDRB : 0b11111101
  PORTB = 0x00;                  // pins of port B are low (output) and with no pull-up resistor (input)
  PORTB |= (1&lt;&lt;PB0)|(1&lt;&lt;PB1);    // pin 0 is high (output) and pin 1 is pulled high (input)    PORTB : 0b00000011

  while(1) {
    PORTB &amp;= ~(1&lt;&lt;PB0);
    delay();
    PORTB |= 1&lt;&lt;PB0;
    delay();
    PORTB = ~(1&lt;&lt;PB0);
    delay_long();
    PORTB = 1&lt;&lt;PB0;
    delay_long();      
  }

  return 1;

}

void delay(void) {
  TCNT0 = 0x00;
  TCCR0B = 0x05;
  while ( (TIFR0 &amp; TOV0) == 0 ) 
    ;
  TCCR0B = 0x00;
  TIFR0 |= 1&lt;&lt;TOV0;
}

void delay_long(void) {
  TCNT0 = 0x00;
  TCCR0B = 0x05;
  while ( (TIFR0 &amp; TOV0) == 0 ) 
    ;
  TCCR0B = 0x00;
  TIFR0 |= 1&lt;&lt;TOV0;
  TCCR0B = 0x05;
  while ( (TIFR0 &amp; TOV0) == 0 ) 
    ;
  TCCR0B = 0x00;
  TIFR0 |= 1&lt;&lt;TOV0;
}


if I remove the body of the event loop it lights up... so I think I must be missing something in the delay functions...
It seems that the offending line is:

while ( (TIFR0 &amp; TOV0) == 0 )


TOV0 by itself equals 0, so the above loop will never end.

You should use:

 while ( (TIFR0 &amp; (1&lt;&lt;TOV0)) == 0 )


instead.