Hallo.
Ich habe momentan ein kleines Problem mit meinem rnbfra und dem Mega32 bezüglich der Kommunikation über UART.
Der Controller soll Strings empfangen und Rückgabewerte ausgeben.
Die Gegenseite (PC) mache ich mit C#.
Die C# Form besteht aus einem Button und 2 Textfeldern.
In das eine Textfeld kommt der String, der per button an die Com geschickt wird und dann an den Controller versendet wird.
Leider kommt der Controller dabei nicht mit.
Ich habe bascomseitig folgendes verwendet:
Ich benutze ischarwaiting und anschließendes inkey().
Das inkey Char wird dann in einen string gepackt --> so wird der Befehl den ich übertragen will aufgebaut.
Das klappt per Hyperterm prima, da ich jedes Zeichen einzeln eingebe und mit einem "?" den Befehl abschließe. Der Controller gibt ihn dann per "print" aus und er landet in C# im zweiten Textfeld.
Wenn ich aber nun per C# den String übergebe (nicht per Hyperterm), nimmt der Controller natürlich nur den ersten Char des Strings an, da er vermutlich nicht hinterherkommt.
Also habe ich den String in C# in ein Chararray konvertiert und lasse nun die Zeichen einzeln übertragen. Dabei muss ich aber zwischen jedem Zeichen soviel Timout einfügen, dass er für einen Befehl wie "#led_an,1100" fast 3 Sekunden brauch.
Hat jemand eine Idee, wie ich in Bascom, bzw. im Controller, Strings annehmen kann, die z.B. in einem Eingangspuffer landen und dann zusammengesetzt werden?
Oder hat jemand generell eine gute Musterlösung, wie man am sinnvollsten die Kommunikation mir RS232 verwirklicht, bzw. was sich allgemein am meisten bewährt hat?
MfgCode:Dim A As Byte Dim Temp As String * 1 Dim Befehl As String * 15 Dim Stringlänge As Integer Dim Parameter As Integer Dim B As Integer Print "Waitkey- Abbruch mit Escape" Do Start: A = Ischarwaiting() A = Inkey() If A = 35 Then ' hat eine # bekommen --> Befehlt folgt Print Chr(a) ; " Befehlscommando empfangen " ; A Temp = Chr(a) Befehl = Befehl + Temp Stringlänge = Len(befehl) Print "Stringlänge : " ; Stringlänge Goto Weiter Elseif A <> 35 Then Goto Start End If Weiter: Do A = Ischarwaiting() A = Inkey() If A <> 63 And Stringlänge > 0 And A <> 0 And A <> 44 Then ' 63 = ? = Ende des Befehls Print Chr(a) ; "Char eines Befehls erkannt " ; A Temp = Chr(a) Befehl = Befehl + Temp Print "Der Befehl lautet bisher: " ; Befehl Print "der letzte Char war: " ; A Elseif A = 44 Then ' 44 steht für , Komma - ab hier Parameter Inputbin Parameter , B Printbin Parameter ; B End If Loop Until A = 63 'Abschlusszeichen des Befehls 63 = ? Print " Abschlusszeichen erkannt, Befehl lautet: " ; Befehl ; Parameter
Marius
Lesezeichen