> aufbau: stk500
Randnotiz (wurde schon darauf hingewiesen): beim STK500 sind die LEDs
active-low.
> if (PIND == 0b00000010) //Bei diesem Statement leuchtet die LED immer
> {
> PORTB = 0b00000010;
> }
> else
> {
> PORTB = 0b00000000;
> }
Die LED leuchtet immer, also wird immer der else(!)-Zweig ausgeführt.
Das wird er nur, wenn die Bedingung 'PIND == 0b00000010' immer falsch
ist. Wenn ich das richtig interpretiert hab, dann habt ihr D.1 auf Input
mit Pullup gesetzt, der Rest vom PortD ist Input ohne Pullup. Ich
vermute jetzt mal ganz wild, dass ihr den Rest vom PortD nicht auf ein
festes Niveau gezogen habt (per Pullup/-down), also ist der Rest vom
PortD floating ('mal so mal so').
Ergo wird PIND immer 'irgendwas' liefern, mal 0b101001x1 (x ist der
Zustand des Tasters), mal 0b001100x0, und mal irgendwas anderes.
Vielleicht auch irgendwall mal 0b00000010. Aber eben nur vielleicht.
Deswegen wird obige Bedingung (fast) immer falsch sein.
Aber eigentlich interessiert ihr euch bei der Abfrage ja nur für den
einen Eingang, den einen an dem der Taster hängt. Das kann man dann auch
ausdrücklich so formulieren:
if (PIND & 0b00000010)
[Rest wie gehabt]
Das maskiert alle uninteressanten Eingänge aus. Übrig bleibt genau der
Zustand vom Taster, nämlich genau '0b0000010'/true oder
'0b00000000'/false. Und sonst nix.
Gibt übrigens auch einen schönen Artikel [1] dazu (am besten den Rest
auch noch gleich lesen ;-)
HTH
[1]
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Eing.C3.A4nge_.28Wie_kommen_Signale_in_den_.C2.B5C.29