Hallo, ich habe irgendwie noch ein paar Probleme mir das vorzustellen,
wie genau die Pinabfrage funktioniert und mir deshalb einfach mal ein
paar Textprogramme geschrieben und geguckt was passiert.
Von außen habe ich einen Pin (PD5) vom ATMega8 den ich auf VCC/GND
schalte und mit einer Funktion schalte ich eine LED an und aus.
Jetzt wollte ich ein simples Programm schreiben, dass wenn PD5 auf VCC
liegt die LED leuchten lässt und wenn es auf GND gezogen wird wieder
ausschaltet.
1 | while (1)
|
2 | {
|
3 | LedSet(1);
|
4 | while (PIND & (1<<PD5)
|
5 | {
|
6 | LedSet(0); //LED aus
|
7 | }
|
8 | while (!(PIND & (1<<PD5))
|
9 | {
|
10 | LedSet(1); //LED an
|
11 | }
|
12 | }
|
Der Grund wieso ich gleich while und nicht if nehme ist, weil ich später
auf bestimmte Pinstellungen warten möchte und dazu sowieso auf eine
leere while Schleife zurückgreifen will.
Die Funktion LedSet() macht nicht mehr als den Pin an dem die LED sitzt
zu wechseln. Ich habe es nur so gemacht damit es etwas übersichtlicher
ist.
Die Bedingungen selbst sind praktisch aus dem Internet übernommen :D
Wenn ich jetzt PD5 auf VCC ziehe geht die LED an. Wenn ich auf GND ziehe
wieder aus, so weit so gut. Damit sie aber danach wieder angeht muss ich
sie erst wieder auf VCC ziehen, dann wieder GND und wenn ich sie dann
wieder auf VCC ziehe geht sie an.
Kann mir jemand erklären, wieso es nicht direkt umschaltet?