FuRanKu
10.06.2005, 22: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
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