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