Interrupt nicht mehr Deaktivierbar - Endloses While :(

OP #1692757
Lesenswert?

Hallo

Ich empfange per RS232 Eine Zeichenkette.

Ich überprüfe nach jedem empfangenen /r ob ein bestimmter Text enthalten 
ist

Dies löse ich so:
1
ISR(USART_RX_vect)
2
{
3
    unsigned char buffer;
4
  
5
    // Daten aus dem Puffer lesen
6
    buffer = UDR0;
7

8
    
9
    if (buffer!='\r' && buffer!='\n' && uart_str_count<uart_maxstrlen-1){
10
      uart_string[uart_str_count]=buffer;
11
      uart_str_count++;
12
    } 
13
    else {       //String komplett
14
      uart_string[uart_str_count]='\0';
15
      uart_str_count=0;
16
      
17
      if( strcmp( uart_string, "OK" ) == 0 ) 
18
      {
19
        cli();        //Interrupt Deaktivieren
20
        status(3);    //Lässt LED's Blinken
21
        Acknowledge = 1;
22
      }
23
      
24
    }
25

26
}


Wie man Sieht, warte ich auf das String Ende welches mir durch
/r angezeigt wird.

Enthält der String nun OK so weiss ich das mein GSM Modem alles 
verstanden hat. Deshalb setze ich die Global Definierte Variable 
Acknowledge auf 1


Mein Aufruf sieht so aus:
1
Acknowledge = 0;
2
              while(Acknowledge != 1)  //Befehl soll solange gesendet werden bis OK empfangen wird!!!
3
              {
4
                uart_puts("AT+CMGD=1");
5
                uart_putc('\r');
6
                uart_putc('\n');
7
              }
8
              sei();
9
              status(2);
10
              Acknowledge = 0;

Das merkwürdige ist, die LED's Blinken beim Empfang von OK
jedoch springt mein Programm NIE!!! aus der While Schleife.

Selbst CLI() Innerhalb des Interrupts brachte keine Hilfe..

Ich bin echt ratlos
hoffe ihr könnt mir helfen

Danke schonmal

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