Forum: Mikrocontroller und Digitale Elektronik switch case mit CodeVision


von Schntizi (Gast)


Lesenswert?

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

von Rufus T. Firefly (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.