www.mikrocontroller.net

Forum: Compiler & IDEs if will nicht


Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe untenstehende funktion geschrieben und wollte diese nun mit
dem Simulator von AVR studio simulieren, doch irgendwie überspringt er
einfach die if(bit_is_set(PIND,button1)) if schleifen!! hat jemand ne
idee woran das liegt ???

void get_keys(void)
{
static unsigned char keypress = 0;
unsigned char key;

if (keypress)
{
    if(bit_is_set(PIND,button1))
    {
      if (keytime < 8 && keytime > 0)
      {
      aufgabe = play;
        keypress = 0;
      }
    }
    else
    {
      if (keytime > 8)
      {
      aufgabe = stop;
      keypress = 0;
      }
    }
}
else
{
    if (bit_is_clear(PIND,button1))
    {
    key = 1;
      if (keypress && keytime > 0)
      {
      keypress = key;
      }
      if (key == 0)
      {
      keytime = 0;
      }
    }
}

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörn!

>doch irgendwie überspringt er einfach die if(bit_is_set(PIND,button1))
>if schleifen!

Was heist denn "überspringt"?

Gruß,
Patrick...

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wann wird den die Variable "keypress" auf 1 gesetzt. Wenn Du die am
Anfang der Funktion neu initialisierst wird der erste Teil nie
ausgeführt.

Werner

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

 mit überspringt meine ich, das er das was in der if schleife steht
nicht ausführt auch wenn z.b keypress auf 1 ist und portd, button1 auf
1 ist

Ich dachte wenn ich schreibe static char keypress schreibe wird die
variable nur einmal initialisiert oder ist das falsch?

MFG Jörn

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörn!

Mach die Variable "keypress" global, dann wird's warscheinlich
Funktionieren.

Gruß,
Patrick...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, eine statische Variable in der Funktion hat die gleiche Wirkung.

Funktioniert's denn nur im Simulator nicht, oder auch in der realen
Welt?

Allerdings erscheint mir die Logik im obersten `else' suspekt: Du
setzt key auf 1 und hast weiter unten ein `if (key == 0)', das
folglich nie erreicht werden kann.

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

@Jörg Wunsch

Also in der realen Welt läufts auch nicht!!!

Stimmt das macht wirklich keinen sinn, das if(key == 0) muss in die
untere else schleife.

MFG Jörn

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

erstmal Danke für eure Hilfe!!!!

Mein Prog läuft nun einwandfrei!!! Im Simulator sowie in der Realen
Welt!!

Wo genau das Prob war weiß ich nicht so genau, könnte es denn daran
gelegen haben das ich mitten in einer endlosschleife eine variable
initialisiert habe??

Nun kann ich endlich Tasten per interrupt abfragen!!!

MFG Jörn

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.