?=13
Fragezeichen gleich Dreizehn...
Hallo,
Vom Terminal soll ein String unterschiedlicher Länge zum ATMega8 übertragen werden.
Dazu wird im URXC Interrupt das Zeichen zum String hinzugefügt.
Wie frage ich das Ende des übertragenen Strings ab ?
Code:$regfile = "m8def.dat" $Crystal = 3686400 $baud = 38400 Dim S As String * 63 At &H60 Dim b(11) As Byte At &H60 Overlay Dim n As Byte On URXC OnRxD Enable URXC Enable Interrupts Main: If N > 62 Then 'Print s n = 0 End If Goto Main Onrxd: If ? Then Ende des Strings ist erreicht, er kann jetzt verarbeitet werden Else Incr N B(n) = Udr End If Return
?=13
Fragezeichen gleich Dreizehn...
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Das ist der Problempunkt. Wie muss ich das Ende des Strings abfragen ?
Wie soll der Microcontroller wissen, daß das letzte Zeichen übermittelt wurde ?
Naja, mal das letzte Zeichen abrufen:
letzteszeichen = RIGHT(empfangenes, 1)
und dann eben prüfen:
If letzteszeichen = Endzeichen Then ...
EDIT: Sorry, zu spät gesehen, dass ja der String eh schon zeichenweise aufgebaut wird... is noch etwas früh...
Hallo,
wäre das so richtig ?
Onrxd:
If udr = asc(10) or udr = asc(13) Then
varEnde = True
return 'Ende des Strings ist erreicht, er kann jetzt verarbeitet werden
Else
varEnde = False
Incr N
B(n) = Udr
End If
Naja... ASC(10) ... macht so ned viel sinn.
Wenn dann ASC(udr) = 10 oder udr = CHR(10) (sofern udr ein String ist)
Aber ansonsten dürfts klappen.
Kann noch sein, dass Bascom nen Umweg will in der Anweisung in der Form:
xCR = chr(13)
xLF = chr(10)
Und dann damit IF udr = xCR or udr = xLF...
Bascom kann ja blödeweise nur immer 1 "Rechen-Anweisung" pro Zeile.
Ich nehm eigentlich nur die Highlevels her.
Direktzugriff auf Register hab ich bisher noch nie benötigt.
(Werd ich wohl auch nur im Notfall verwenden; warum mitm Löffel im Garten rumgraben wenn man nen Bagger hat )
Direkt über die Register könnts im Fall der Fälle schneller sein.
(Irgendwo war mal was, dass ne Bascom-Anweisung 300µS braucht, ne direkte nur 80 oder so...)
Hallo,
noch ne Frage:
$regfile = "m8def.dat"
$crystal = 7372800
$baud = 19200
$hwstack = 40
$swstack = 16
$framesize = 32
Config Serialin = Buffered , Size = 63 , Bytematch = 13
Config Serialout = Buffered , Size = 63
Dim Rx_char As Byte
Dim Serinpstr As String * 63
Dim Cr_received As Bit
Enable Interrupts
Do
If Cr_received = 1 Then
Cr_received = 0
Input Serinpstr
End If
Loop
Serial0charmatch:
Cr_recieved = 1
Return
End
jetzt habe ich das mal mit Highlevels versucht.
Ist das so richtig ?
Bleibt durch Bytematch = 13 eventuell ein darauffolgendes 10 im Buffer hängen ?[/code]
also.. irgendwie interessant dieser quelltext von guenter1604. das funktioniert ja super.
aber mal ne fräge dazu:
1. wo kommt denn der inhalt der variablen Serinpstr her ? da wird ja nirgens was zugewiesen. der inhalt stimmt aber.
2. und warum wird das gemacht ?
If Cr_received = 1 Then
Cr_received = 0
wer weiss mehr ?
gruss klaus
Lesezeichen