switch case mit CodeVision

Gast #150075
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren