Hallo allerseits, ich arbeite seit geraumer Zeit mit den AVR-µC von Atmel, besitze das STK500 und den CodeVision C-compiler. Folgendes Problem macht mir zu schaffen: Ich habe ein kleines Programm geschrieben zur Switch-Case Anweisung, welches in etwa so aussieht: //Globale Variable int modus=0; char a='a'; //usw. char *fehler="fehler"; //in einem Interrupt if(!PIND.3)modus++; if(modus==4)modus=0; switch(modus) { case 0: lcd_putchar(a); break; case 1: lcd_putchar(b); break; case 2: lcd_putchar(c); break; case 3: lcd_putchar(d); break; default: lcd_puts(fehler); } Dieses "kleine, eigenständige" Programm funktioniert einwandfrei, d.h. jedes mal beim Betätigen des Tasters D.3 (Taster sind mit Pull-up Widerständen versehen, deswegen die Negation !PIND.3) zählt die Variable modus 1 hoch. Übernehme ich nun den Programmcode in ein Programm, welches noch etliche andere Aufgaben zu erledigen hat; so funktioniert es insofern nicht mehr, als dass die variable modus immer auf 0 bleibt. Hält man den Taster D.3 gedrückt, so wird sie (int modus) 1, jedoch nur solange die Taste gedrückt gehalten wird. Lässt man den Taster los, so wird modus wieder 0. Nun meine Frage: Hat jemand eine Idee, vielleicht sogar dieses Problem selbst schon mal gehabt? Für Hilfen jeglicher Art wäre ich sehr dankbar. P.s.: Ich habe die ganze Sache auch schon mit if-else Anweisungen programmiert, was ohne Probleme läuft; ich will jedoch gerade der Übersichtlichkeit wegen, meinen Programmcode mit switch-case versehen. Gruß Schnitzi
Lies Dir mal in der Dokumentation Deines Compilers die Bedeutung des Schlüsselwortes "volatile" durch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.