Ich habe für mein aktuelles Projekt Datenpakete per UART zu empfangen.
Vorgabe ist das empfangen von 16Byte für die weiterverarbeitung im Hauptprogramm.
Aktuell ist es so gelöst, das die Pakete jeweils mit einem vorgegebenen Startzeichen beginnen müssen.
Diese sind dann entweder bis 16Byte begrenzt oder werden durch ein vorgegebenes Endzeichen abgeschlossen.
Ich möchte mir damit eine art Universelle Übertragung schaffen, die ich für weitere Projekte einfach anpassen kann.
Der Code sieht so aus:
Funktioniert soweit auch zufriedenstellend.Code:'------------------------------------------------------------------------------- 'Variablen '------------------------------------------------------------------------------- Dim Temp_byte As Byte Dim Datenblock(16) As Byte Dim Indexposition As Byte Dim Startzeichen As String * 1 Startzeichen = "{" Dim Endzeichen As String * 1 Endzeichen = "}" Dim Datenblock_komplett As Bit Dim Datenblock_laenge As Byte Datenblock_laenge = 16 Dim Datenblock_string As String * 16 '------------------------------------------------------------------------------- 'Hauptprogramm '------------------------------------------------------------------------------- Do If Datenblock_komplett = 1 Then For Indexposition = 1 To Datenblock_laenge Step 1 Insertchar Datenblock_string , Indexposition , Datenblock(indexposition) Next Print Datenblock_string Datenblock_string = "" Datenblock_komplett = 0 End If Loop End '------------------------------------------------------------------------------- 'Interrupt '------------------------------------------------------------------------------- Serial0charmatch: While Ischarwaiting() = 1 Temp_byte = Inkey() waitus 2000 If Temp_byte = Asc(startzeichen) Then Indexposition = 0 Datenblock_komplett = 0 Elseif Temp_byte = Asc(endzeichen) Then Datenblock_komplett = 1 Else Indexposition = Indexposition + 1 Datenblock(indexposition) = Temp_byte End If If Indexposition = Datenblock_laenge Then Datenblock_komplett = 1 Clear Serialin End If Wend If Indexposition < Datenblock_laenge Then Do Indexposition = Indexposition + 1 Datenblock(indexposition) = 0 Loop Until Indexposition = Datenblock_laenge Datenblock_komplett = 1 End If Return
Kurz noch Beispiele...
Allerdings möchte ich gerne eure Meinung hören, inwieweit es da zu Problemem kommen kann,Code:{1234567890123456} ergibt 1234567890123456 {123456 ergibt 123456 {123456} ergibt 123456 123456 ergibt "nix" (weil kein Startzeichen)
oder ob man das noch optimieren könnte (speziell wegen der Abarbeitungszeit im Interupt).
Derzeit wird per Kabel übertragen... soll aber die nächsten Tage durch ein Funkmodul (APC220) ersetzt werden.
P.S. ... sorry, das es nicht auskommentiert ist... sollte aber trotzdem leicht überschaubar sein.







Zitieren

Lesezeichen