PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten aus UART verwerfen, wenn unvollständig



frank-wob
18.06.2007, 14:45
Hallo,

ich habe mal wieder ein Problem.

Ich habe eine kleine Steuerung gebaut, nichts aufregendes. Ich benutze einen Tiny2313, der nach empfangen eines 3 Byte langen Protokolls Port B schalten soll. Hier mal der wichtigste Teil des Codes


Config Watchdog = 200

On Urxc Onrxd
Enable Urxc

Dim c as byte, v as byte, x as byte 'c = Kommando, v = Wert, X = Xor Checksumme

Config Portb = Output
Portb = 0
Start Watchdog
Enable Interrupts

Do
Reset Watchdog
Loop

Onrxd:
inputbin C,V,X
if c = $01 then
Portb = V
end if
Return
end



Der Code ist noch länger aber um diesen Teil geht es mir.

Im Grunde funktioniert das (fast) so wie ich möchte. Wenn der Befehls-Frame nicht komplett oder in 200ms gesendet wird, wird durch den Reset der Frame verworfen und auf einen neuen gewartet.

Jetzt das Problem: Ich möchte das dabei der Zustand des Portb erhalten bleibt. Hat jemand einen Tip wie ich das umsetzen kann?

Wäre schön wenn jemand helfen kann.

Gruß Frank

Rofo88
18.06.2007, 15:01
In der Watchdog-Schleife das Recive-Complete Bit abfragen. Wenn das 1 ist in die 3Byte Empfangsrotine Springen und nen Timer starten der nach 200ms nen Interrupt bring. Wenn die 3 Bytes richtig da sind Timer stoppen und gut wenn nicht kommt der Interrupt und da kannst Du ja sagen das er wieder zurüch zur Watchdog-Schleife soll.

MfG

PicNick
18.06.2007, 15:19
Du mußt ja ohnehin den Empfang checken (Prüfsumme?), dann brauchst du ja ggf. die Daten nur zu ignorieren.
Mit Watchdog hast du halt jedesmal einen Reset.

frank-wob
20.06.2007, 08:18
PicNick:
Ja, ich überprüfe die Daten ja auch. Aber wenn nicht alle Bytes beim µC ankommen komme ich nie an diese Stelle, weil der Watchdog den Controller zurücksetzt.

Rofo88
Ehrlich gesagt verstehe ich nicht was du meinst. Wenn ich in der Empfangs-ISR ein Flag setzte, springt er doch auch erst aus der Routine, wenn ich die 3 Bytes Empfangen habe, oder?
Oder habe ich das ganz falsch verstanden?

Gruß Frank