Forum: Compiler & IDEs Code wird nicht immer ausgeführt


von Pier S. (bigpier)


Angehängte Dateien:

Lesenswert?

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

von Pier S. (bigpier)


Lesenswert?

habe 3mal das Programm angehängt Bitte entfernt es 2 mal!

Gruß
Peter

von Andreas B. (andreas_b77)


Lesenswert?

ugetchar() wartet, bis ein Zeichen empfangen wurde. Deshalb geht es ohne 
empfangene Zeichen nicht weiter.

von Pier S. (bigpier)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

1
u8 kbhit( void )      // check, if rx buffer not empty


Peter

von Pier S. (bigpier)


Lesenswert?

Peter Dannegger schrieb:
> u8 kbhit( void )      // check, if rx buffer not empty
>
>
> Peter

Ich kann Deinen Hinweis nicht verstehen wärst Du so nett und hilfst mir 
auf die Sprünge!

Peter

von Peter D. (peda)


Lesenswert?

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

von Pier S. (bigpier)


Lesenswert?

Vielen Dank für die schnelle Hilfe jetzt läuft das Programm.
Trotz der guten Kommentierung des Codes falle ich immer wieder auf meine 
Schnauze.

Danke
Peter

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.