www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik switch case mit CodeVision


Autor: Schntizi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies Dir mal in der Dokumentation Deines Compilers die Bedeutung des
Schlüsselwortes "volatile" durch.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.