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?

Code:
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
Mfg

Marius