Komisches Verhalten bei while Schleifem it Interrupt unterbrechung

Gast #1917658
Lesenswert?

1
void Spracherkennung()
2
{
3
  //Schreibe auf Display welchen Modus:
4
  LCD_sprach;
5

6
  //Variablen-definitionen
7
  uint8_t getSpokenWord = 0;
8

9
  //Main-Loop:*********************************************************************
10
  while( !((getSpokenWord < 110) && (getSpokenWord > 100)) && !cancel_mode )  //Position 8
11
    //Führe Spracherkennung aus solang bis Beenden gesagt
12
    //wurde oder cancel-Mode Taste gedrückt wurde
13
  {
14
    //getSpokenWord = GetADC_8bit(7);
15

16
    if( (getSpokenWord < 10) && (getSpokenWord > 2))  //Wenn auf Position1 bekommt man einen DAC Wert von <10
17
    {
18
      Linienverfolgung();
19
    }
20
    else if( (getSpokenWord < 20) && (getSpokenWord > 10) )  //Position2
21
    {
22
      Ausweichmodus();
23
    }
24
    else if( (getSpokenWord < 30) && (getSpokenWord > 20) )  //Position3
25
    {
26
      Linienverfolgung_Ausweichmodus();
27
    }
28
    else if( (getSpokenWord < 40) && (getSpokenWord > 30) )  //Position4
29
    {
30
      Funksteuerung();
31
    }
32
    else
33
      ;
34
    lcd_setcursor(0,1);
35
    if(cancel_mode)
36
      lcd_string("true");
37
    else
38
      lcd_string("false");
39
  }
40
  //back***************************************************************************
41
  LCD_Mode_Verlassen;
42

43
  _delay_ms(50); //Wenn cancel gedrückt wurde dann soll entprellt werden
44
  cancel_mode = false;   // Damit können jetzt andere Unterprogramme ausgeführt werden
45
}

Wenn ich diesen Teil:
1
lcd_setcursor(0,1);
2
    if(cancel_mode)
3
      lcd_string("true");
4
    else
5
      lcd_string("false");
weglasse, dann komme ich auch nicht raus wenn cancel_mode true ist.

Problembeschreibung:
Ich habe eine Taste die ich auf den Interrupt führe. Wenn die steigende 
Flanke kommt, dann soll cancel_mode = true gesetzt werden.
1
ISR(INT0_vect)
2
{
3
  cancel_mode = true;
4
}

Danach springt das Programm wieder zur While() schleife.
Und ich sehe am LCD immer noch MODUS: Sprach.

erst wenn ich diesen Teil:
1
if(cancel_mode)
2
      lcd_string("true");
3
    else
4
      lcd_string("false");
wieder dazugebe dann komme ich raus und sehe am LCD MODUS Verlassen.
_____________________________________________________________________


Die Variable cancel_mode wird von sonst keinem Interrupt beeinflusst, 
also nur am Int0.
Was kann denn die Ursache dafür sein?
Kann es sein, dass das LCD einfriert aus irgendeinem Grund? Weil es ist 
wirklich nur dieser Teil, der darüber entscheidet ob ich rauskomme oder 
nicht.

Ich danke schon im Voraus für Support!

lg andy

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