Hallo,
nimm die Pullups, die im Controler schon integriert sind. Den Taster zwischen AVR und Masse.
Versuch mal:

Ein-/Ausgänge definieren(wie du willst)
Pullup z.B. bei portd, pin0 aktivieren
outp (0x01,PORTD); // Pull-Up auf Port D, Pin 0 aktivieren

Auslesen:
/* Pin 0 von Port D abfragen, eine logische 0 heisst 'Taster gedrückt'.
ACHTUNG: Es muss Register PIND abgefragt werden, nicht PORTD */
if (bit_is_clear (PIND, PIND0)) {
tu was.........
}

In C nimmt man normalerweise statt "while(1)" bevorzugt "for (;"

mfg