PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC RS232 Verbindung



XDavidX
08.08.2005, 17:22
Hallo Leutle!
Ich habe aus "Hobbyistischen" Gründen ein PIC an die RS232 des PCs angeschlossen und
bekomme von diesem mehrere Bytes (8 Stück) nacheinander geschickt.
Diese befinden sich dann ja im Empfangspuffer der USART des PCs.
Nun meine Frage:
Wie bekomme ich die Einzelnen Bytes (im PC) auseinander um sie z.B. Variablen zuzuweisen?? :-k
Ich habe schon ein Terminal Programm geschrieben, das mir die empfangenen Daten in einem Textfeld anzeigt (mit MSCOMM in VB).
Ich weiß allerdings nicht wie ich sie getrennt und einzelnen Variablen zugewiesen bekomme.
Ich wäre sehr dankbar wenn mir jemand weiterhelfen könnte!

Goblin
09.08.2005, 15:16
naja, du kriegst ja afaik nen string rein. den kannst du doch bequem auseinandernehmen. versuch mal zwischen den einzelnen bytes nen sonderzeichen oder so zu übertragen, an dem du dich beim string-trennen orientieren kannst.

TomHumpen
09.08.2005, 17:54
Wenn du ein variables ByteArray an auf den Input von MsComm legst kanst du da dann die einzelnen Bytes (hoffe du überträgst 8 Bit und nicht 9)auslesen und zuweisen was immer du willst.



Dim echo As Variant
.
.
.
echo = MSComm1.Input


Das sollte dir ein Array von deiner inputlänge geben. Wenn dein Eingangspeicher 10 Byte ist, dann sind es 0-9! Wichtig ist das MsComm auf INPUTMODEBINARY gesetzt ist. Mit echo(0), echo(1) und so weiter kannst du dann drauf zugreifen. meld dich bei weiteren Fragen.

Viel Erfolg

So long...

XDavidX
09.08.2005, 18:32
Danke Goblin, danke Tom, werde beides jetzt mal ausprobieren

XDavidX
10.08.2005, 08:40
Hallo Tom,
ich hab das jetzt so gelöst: (mit viel Online_Hilfe)

Private Sub MSComm1_OnComm()

If MSComm1.CommEvent = comEvReceive Then
Data = MSComm1.Input
Data1 = AscB(Mid$(Data, 1, 1))
Data2 = AscB(Mid$(Data, 2, 1))
.
.
.
End If
Das funktioniert aber nur wenn ich MSCOMM auf InputmodeText stelle!?

Bei Deiner Variante bekomme ich den Fehler "Type unverträglich"

Dim Data1 As Variant
Dim echo AS Variant
...
Private Sub MSComm1_OnComm()

If MSComm1.CommEvent = comEvReceive Then

echo = MSComm1.Input
Data1 = echo(0)

mach ich da was falsch, oder muss da noch was bei?

; nicht einfach für ein VB-Anfänger auf der Welt

TomHumpen
10.08.2005, 13:53
Data1 = echo(0) ist nicht verträglich, wenn Data vom Typ Variant ist.

Dim Data1 as Integer sollte klappen.

Eine möglichkeit ist das du Data zu einer integer oder double Zahl machst, je nachdem wie groß deine rechnung wird. In echo() ist nur die Zahl gespeichert. Also nicht 11001100, sonder eben die Integer von 204. So kannst du dann damit rechnen.

Data = echo(0) + 5* echo(1)

Viel Erfolg.

XDavidX
10.08.2005, 20:34
Ja, jetzt funktionierts…und ist einfacher. Vielen Dank für die Hilfe!!!
PS. Das größte Leid, ist das was man sich selbst andeit! :)