Hallo!
Ich will den Zustand von PIND5 abfragen und je nach Zustand den Wert einer Variablen ändern. Leider funktioniert es nicht. Was mache ich falsch?
while (TRUE)
{
sta = 1;
if (!( PIND & (1<<PIND5))) {sta=0;};
}
MfG Sven
Druckbare Version
Hallo!
Ich will den Zustand von PIND5 abfragen und je nach Zustand den Wert einer Variablen ändern. Leider funktioniert es nicht. Was mache ich falsch?
while (TRUE)
{
sta = 1;
if (!( PIND & (1<<PIND5))) {sta=0;};
}
MfG Sven
Was geht denn nicht ?
Pin auch als Eingang definiert ?
Ja, ist als Eingang definert. "sta" wird dann in einer Interruptroutine verwendet. Das Programm ist ein Videoinserter mit einem AtMega8. Dort soll je nach Zustande des PIND5 ein anderes Zeichen eingblendet werden.
Sven
Servus Sven,
hast das JTAGEN-Fuse richtig gesetzt? Probiers mal damit zuerst bevor du lange suchst.
Grüße Wolfgang
@BlueNature
Beim Mega 8 gibts kein JTag !
@afusven
und was geht jetzt nicht, ist sta immer 0 oder 1, oder wo zwickts ?
Servus linux_80,
da stand nichts von einem AtMega8, man muß immer von allem ausgehen wenn man keine genaue Infos hat. Woher weißt Du das es ein AtMega ist? :)
Grüße Wolfgang
sta ist immer 1. Wenn ich sta an Anfang auf 0 setze, ist sta immer 0. Ich vermute, das es an der while-Schleife liegt...
Ich werde morgen nochmal experimentieren.
Hallo BlueNature,
im 2. Post hat afusven geschrieben:
deswegen dachte ich es geht um einen Mega 8 :-)Zitat:
Zitat von afusven
@afusven
ich glaub das ! spielt dir einen Streich, lass es mal weg, und stell das Programm um (if ... else ...).
Ich habe mit AVR-Studio nochmal simuliert:
Wenn ich die while-Schleife weglasse, wird sta in Abhängigkeit von PIND5 gesetzt. Mit while-Sschleife geht es nicht!
Neuer Versuch: while-Schleife durch goto-schleife ersetzt - geht auch nicht!
Aber: Compiler-optimierung von -o3 auf -o1 gesetzt - jetzt geht es!!!