Forum: Mikrocontroller und Digitale Elektronik Mit PIC Tasten einlesen in Interrupt, Wiederholung schlägt fehl


von Andreas R. (svsalzburg1933)


Lesenswert?

Hallo Forenkollegen!

Ich laboriere nun bereits seit geraumer Zeit an folgendem Problem:

Dieser Code wird beim Auftreten eines seriellen Interrupts abgearbeitet:
1
void EingehenderAnruf(){
2
  strcpy(Vergleichstring,"HFP");              //Format, das bei Anfrage gesendet wird: HFP 0 CALLERID "+436642734111" "" 80   
3
if(strstr(Module_Answer,Vergleichstring)!= NULL){    //Durchsuchen der Modulantwort nach 'HFP'
4
    strcpy(Vergleichstring,"CALLERID");            //nächste signifikante Zeichenkette für einen Anruf                
5
    if(strstr(Module_Answer,Vergleichstring)!= NULL){  //Durchsuchen der Modulantwort nach 'CALLERID'
6
      strcpy(Statusausgabe,"Eingehender Anruf");
7
      display_str(Statusausgabe);
8
      setcursor(13);
9
      Tastenwarten=1;
10
      delay_ms(2000);
11
      clear();
12
      do {
13
        if(input(dtaste6)){            //B2 - Denial
14
          Tastenwarten=0;            //Eingabe bereits erfolgt
15
          printf("hangup");
16
          putchar(13);      
17
          strcpy(Statusausgabe,"Anruf       abgewiesen");
18
          clear();
19
          display_str(Statusausgabe);      //Ausgabe Denial
20
          setcursor(13);
21
          delay_ms(2000);
22
          clear();
23
        }
24
        if(input(dtaste7)){            //B3 - Accept
25
          Tastenwarten=0;            //Eingabe bereits erfolgt
26
          printf("answer");
27
          putchar(13);      
28
          strcpy(Statusausgabe,"Anruf       angenommen");
29
          clear();
30
          display_str(Statusausgabe);      //Ausgabe Accept
31
          setcursor(13);
32
          delay_ms(2000);
33
          clear();
34
        }
35
      } while(Tastenwarten==1);            //Warten auf Benutzereingabe
36
    }
37
  }            
38
}
Wenn ich nun angerufen werde funktioniert das ganze einmal. Also kann 
ich auflegen oder abheben. Bei einem erneuten Anruf (nach Beendigung des 
vorherigen) wird allerdings die ganze Funktion nicht mehr ausgeführt. 
Wenn ich die do-while Schleife entferne dann funktioniert das ganze 
allerdings prächtig vom Ablauf her, nur kann ich dann eben nicht 
auflegen oder abheben.

Das ganze funktioniert über das BT-Modul WT32, dieses sendet jedes Mal 
den gleichen String (bereits überprüft).

Ich würde mit wünschen, dass ich bei jedem Anruf abheben oder auflegen 
kann und die Schleife keine Probleme mehr macht. Hat jemand von Euch 
eine Idee?

Mit freundlichen Grüßen
Andreas

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.