mikrocontroller.net

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


Autor: Andreas R. (svsalzburg1933)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forenkollegen!

Ich laboriere nun bereits seit geraumer Zeit an folgendem Problem:

Dieser Code wird beim Auftreten eines seriellen Interrupts abgearbeitet:
void EingehenderAnruf(){
  strcpy(Vergleichstring,"HFP");              //Format, das bei Anfrage gesendet wird: HFP 0 CALLERID "+436642734111" "" 80   
if(strstr(Module_Answer,Vergleichstring)!= NULL){    //Durchsuchen der Modulantwort nach 'HFP'
    strcpy(Vergleichstring,"CALLERID");            //nächste signifikante Zeichenkette für einen Anruf                
    if(strstr(Module_Answer,Vergleichstring)!= NULL){  //Durchsuchen der Modulantwort nach 'CALLERID'
      strcpy(Statusausgabe,"Eingehender Anruf");
      display_str(Statusausgabe);
      setcursor(13);
      Tastenwarten=1;
      delay_ms(2000);
      clear();
      do {
        if(input(dtaste6)){            //B2 - Denial
          Tastenwarten=0;            //Eingabe bereits erfolgt
          printf("hangup");
          putchar(13);      
          strcpy(Statusausgabe,"Anruf       abgewiesen");
          clear();
          display_str(Statusausgabe);      //Ausgabe Denial
          setcursor(13);
          delay_ms(2000);
          clear();
        }
        if(input(dtaste7)){            //B3 - Accept
          Tastenwarten=0;            //Eingabe bereits erfolgt
          printf("answer");
          putchar(13);      
          strcpy(Statusausgabe,"Anruf       angenommen");
          clear();
          display_str(Statusausgabe);      //Ausgabe Accept
          setcursor(13);
          delay_ms(2000);
          clear();
        }
      } while(Tastenwarten==1);            //Warten auf Benutzereingabe
    }
  }            
}
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

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.