Code wird nicht immer ausgeführt

OP #2651775
Guten Tag.
Ich muß mich wiedermal an Euch Experten wenden.
Ich verwende in meinem Programm die Software Uart und Entprellung von 
Peter Dannegger (Vielen Dank dafür an Peter). Leider funktioniert die 
Entprellung nur dann wenn auch die Kommunikation läuft. Der betreffende 
Teil ist dieser
1
for(;;)
2
  {
3
    
4
      
5
    RxProt(ugetchar());
6
    if (protoflag &(1<<RxComp))
7
    {
8
      //Proto.output= PINA;
9
      Proto.analog[0]=analog[0];
10
      Proto.analog[1]=analog[1];
11
      Proto.analog[2]=analog[2];
12
      Proto.analog[3]=analog[3];
13
      Proto.crc = CalcCRC16(&Proto,sizeof(Proto)-1);
14
      Transmit(&Proto,sizeof(Proto));
15
      protoflag &= ~(1<<RxComp);
16
    }
17
    if( get_key_short( 1<<KEY1 ))
18
    {
19
      PORTA ^= 1<<PA0;
20
    }    
21
    if( get_key_long( 1<<KEY1 ))
22
    {
23
      PORTA ^= 1<<PA1;
24
    }  
25
  }
26
}
Nochmal zur Erklärung die Led an PA0 und PA1 lassen sich nur Toggeln 
wenn zuvor ein korrektes Datenpaket empfangen wurde und somit das RxComp 
Flag auf 1 gesetzt wurde.Der Timer 0 mit der Entprellroutine läuft immer 
durch
Ich begreife einfach nicht was ich falsch mache.
Ich wäre Dankbar wenn mir jemand helfen könnte

Gruß
Peter
Angehängte Dateien:
OP
Danke für die Schnelle Antwort.
Ich war der Meinung das die Funktion nachschaut ob etwas Empfangen wurde 
und dann die Daten aus der Fifo holt.
So kann man sich täuschen.
Hat jemand eine Idee wie ich das am Besten löse

Gruß
Peter
Der Aufruf von kbhit() liefert 0 zurück, wenn der Puffer leer ist.
Wenn Du also nicht warten willst, dann vorher kbhit() aufrufen.
1
int nowait_getchar()
2
{
3
  int i = -1;      // -1 = no byte received
4
  if( kbhit())
5
    i = ugetchar();
6
  return i;
7
}


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.