PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Time Out???



Xeus
20.10.2005, 09:36
hallo,
mal ne doofe frage, hab ein prog geschrieben, das bytes übers uart empfängt.
jetzt ist es aber so, wenn der sender nicht verbunden ist, dass der mc solange wartet bis er seine bytes empfängt. ist es nicht möglich eine art time out mit einzubauen, so das er z.b. wenn er 5s lang nichts empfängt einen fehler ans lcd sendet?

gruß

xeus

Marco78
20.10.2005, 19:03
Was hälst du davon, den Empfäng Interruptgesteuert zu gestalten? Dann 'unterbricht' das Programm nur wenn auch wirklich Daten kommen. So brauchst du kein Timeout.

Xeus
21.10.2005, 05:23
mein prog geht ja davon aus, wenn es eine anfrage sendet auch direkt darauf antwort zu bekommen. deswegen bräucht ich irgendeine routine die bei nichtempfang die sub neustartet

Marco78
21.10.2005, 14:36
Die Zeit, in der eine Antwort kommt ist ja in etwa voraussehbar.
Du kannst ja nach dem PRINT eine Pause einlegen und den Empfang per Interrupt machen. In der ISR kannst du ja ein Bit setzen, wenn was empfangen wurde.
Nach der eingelegten Pause, die ja evtl durch den INT unterbrochen wurde kannst du ja das Bit auswerten und siehst, ob Daten empfangen wurden.
Wenn ja, dann mit den daten machen, was mit ihnen zu machen ist.
Wenn nein, dann LOOP

Oder von Anfang an LOOP UNTIL STATUSBIT = 1
Wenn es nicht 1 ist, wird weiterhin gesendet und eine Pause gemacht bis das Bit 1 ist.
Wenn es dann 1 ist, wird Do LOOP sowieso verlassen und der Code ausgeführt, der danach kommt. Und das könnte dann der Code sein, der die Empfangenen Daten verarbeitet.
Und in der Schleife kannst du noch einen Zähler einbauen, um z.B. maximal 10 mal zu versuchen was zu senden/empfangen.

Ich hoffe du kannst in etwa nachvollziehen, was ich meinte.