PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aus Udr-Buffer Zeichen auslesen



FuRanKu
10.06.2005, 21:13
Hallo Zusammen,

ich habe ein kleines Problem. Ich möchte mit einem Interrupt Zeichen über die Serielle empfangen. Das klappt soweit auch ganz gut. Doch habe ich irgendwie Probleme mit dem Puffer, soviel weiss ich schon.

Denn wenn ich 255, 2, 100 sende, dann bekomme ich als Ausgabe "B:255-2" anstatt "B:2-100". Mein Atmel nimmt immer ein Zeichen vorher rein, nicht das gerade gesendete. So als ob eine Schlange im Buffer ensteht.
Die 255 sende ich immer am Anfang um zu wissen, dass nun ein neuer Befehl kommt.
Udr ist ja ein Puffer. Wie funktioniert denn der? Wird der nicht leer wenn ich den auslese bzw. wie kann ich sicher meine Werte auslesen.

Danke für Hilfe


$regfile = "m8def.dat"
$crystal = 8000000
$baud = 2400

'Serial Datenempfang
Dim S As String * 2 At &H60
Dim B(3) As Byte At &H60 Overlay
Dim N As Byte
S = ""
N = 0

On Urxc Onrxd

Enable Urxc
Enable Interrupts

Do
If N = 2 Then 'Übernahme
If B(1) > 0 And B(2) > 0 Then
'Übernahme wert für Servos
B(1) = 0
B(2) = 0
End If
End If

Loop


Onrxd:
If Udr = 255 Then
Udr = 0
N = 0
B(1) = 0
B(2) = 0
Else
Incr N
If N = 3 Then N = 2
B(n) = Udr
Print " B:" ; B(1) ; "-" ; B(2)
End If
Return

End

uwegw
10.06.2005, 22:15
UDR ist eigentlich nur ein byte groß, dh ein neu reinkommendes zeichen überschreibt das vorherige...

irgendwie versteh ich noch nicht so 100pro was du vorhast und wo genau dein problem lliegt...


was ich mal so spontan versuchen würde wäre UDR einmal am anfang des interrupts in eine variable zu packen und dann damit weiterzurechnen...

10.06.2005, 23:35
Super danke das war der Casus Knacktus...