Der Source code enthält grundsätzliche Fehler beim Zugriff auf die
Ports.
if(PORTB == 0b00000010);
Zunächst mal sorgt das Semikolon, dass nichts gemacht wird, wenn die
Bedingung erfüllt ist. Der gewünschte Code-Block gehört VOR das
Semikolon.
Weiterhin liest PORTB nicht den Zustand der Eingänge ein, sondern den
der Ausgänge. Es muss PINB heissen.
Wenn Du die Eingänge so abfragst, testest Du alle 8 Bit gleichzeitig.
Also nur, wenn der Status aller 8 Eingänge dem Bitmuster 0b00000010
entspricht, ist die Bedingung erfüllt. Du wolltest sicher aber nur ein
einzelnes Bit antesten, das geht so:
if (PINB & 0b00000010) { ... };
Aus der Zugriff auf die Ausgänge ist nicht in Ordnung:
PORTB = 0b00000100;
Damit schaltest Du 7 Bits auf Low und ein Bit auf High. Sicher wolltest
Du aber nur ein Bit auf High setzen und die anderen unverändert lassen.
Das geht so:
PORTB |= 0b00000100; // auf High
PORTB &= 0b11111011; // auf Low
PORTB &= ~0b00000100; // auch auf Low
oder ander geschrieben:
if (PINB & (1<<1)) { ... };
PORTB |= (1<<2);
PORTB &= ~(1<<2);
Die Zahl rechts neben "<<" gibt an, welches Bit Du abfragen oder setzen
willst. Die Zahl links von "<<" ist immer 1.
1<<2 bedeutet: Den Wert 1 zweimal nach links schieben, entspricht also
0b00000100.
Noch ein Tip zum Compilieren:
Vermeide Leerzeichen in Dateinamen und Verzeichnis Namen. Unter
bestimmtem Umständen (an die ich mich nicht mehr genau erinnere) lösen
sie Fehler aus.
Bedenke, dass bei einigen deutschen Windows Versionen "C:\Programme" in
Wirklichkeit "C:\Program Files" heisst und "Eigene Dateien" nicht in
allen Windows Versionen artig auf einen Pfad ohne Leerezeichen gemappt
ist (bei mir ist es C:\Users\sfrings\Documents, also Ok).
Installiere WinAVR und Deine Projekte nicht in Verzeichnisse mit
Leerzeichen.