PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit RS232-Empfang



Tido
24.10.2011, 14:38
Hallo,

ich sende mit diesem Programm den String "F99223344567Y":



$regfile "m32def.dat"
$framesize = 42
$swstack = 62
$hwstack = 62
$crystal = 16000000
$baud = 9600

Enable Interrupts
Config Serialout = Buffered , Size = 13

Do
Print "F99223344567Y"
Loop

Empfangen wird aber das, was zwischen dem "-" steht:
F-
-99-
-22-
-33-
-44-
-56-
-7Y-
-
-
-F9-
-92-
-23-
-34-
-45-
-67-
-Y
-

Das ist das Programm:


$regfile = "m2560def.dat"
$hwstack = 82
$framesize = 68
$swstack = 68
$baud = 9600
$crystal = 16000000

Config Com3 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com3:" For Binary As #3 'Uplink
Config Serialin3 = Buffered , Size = 13

Dim Zeichen As String * 1
Dim Empfang As String * 13
Dim Count As Byte

Do

If Ischarwaiting(#3) = 1 Then
Empfang = ""
Count = 0
For Count = 1 To 13
Zeichen = Inkey(#3)
Empfang = Empfang + Zeichen
Next
Print "-" ; Empfang ; "-"
End If
Loop



Was mache ich da schon wieder falsch?

Searcher
24.10.2011, 14:58
Hallo,

wahrscheinlich ist die "for count ... next" Schleife zu schnell - Inkey wird möglicherweise öfter mal kein Zeichen bekommen.

Versuch statt Inkey mal Waitkey. Das wartet immer laut BASCOM-HELP bis wirklich ein Zeichen da ist.

Also:


For Count = 1 To 13
Zeichen = Waitkey(#3)
Empfang = Empfang + Zeichen
Next


Gruß
Searcher

Tido
24.10.2011, 18:01
Hi,

nein, leider genauso schlecht.
Folgendes Empfangsprogramm funktioniert:

Do
If Ischarwaiting(#3) = 1 Then
Input #3 , Daten
Print #4 , Daten
End If

'Waitms 100

Loop


Ausgabe ist dann F99223344567Y.
Wenn ich ein bel. Waitms (z.B. 100) hinzufüge, bekomme ich nur noch F9.

Warum? Es muss doch möglich sein, zu bel. Zeitpunkten den gesamten Puffer auszulesen.
Ich benötige nicht alle empfangenen Strings, ab und zu möchte ich aber einen komplett auslesen, egal wie
lang das gesamte Programm ist.
Kann mir jemand helfen?

Richard
24.10.2011, 18:19
Warum "For Binary"? Probiere mal ein Anderes Datenformat.....

Gruß Richard

Searcher
24.10.2011, 18:30
Hallo,
wüßte auch nicht, warum das mit waitkey nicht funktionieren sollte. Man darf bei

Print "F99223344567Y"

nicht vergessen, das da immer noch ein Carrige Return , Line Feed angehangen wird, die auch wieder als Zeichen behandelt werden.

Mit Input geht's, da Input auf dieses CR LF wartet.

Print "F99223344567Y" ; (Mit Semikolon am Ende kann man CR LF unterdrücken.)

Gruß
Searcher

Searcher
24.10.2011, 19:33
Könnte hier noch was sein?

Open "com3:" For Binary As #3 'Uplink
Config Serialin3 = Buffered , Size = 13

Die com Portnummern beginnen mit 1 an zu zählen. Config Serialin3 bezieht sich auf com4. Config Serialin (ohne Nummer) würde com1 sein.

PS: Config Serialin würd ich vor Open ausführen.

Gruß
Searcher

Tido
24.10.2011, 21:06
Könnte hier noch was sein?

Open "com3:" For Binary As #3 'Uplink
Config Serialin3 = Buffered , Size = 13

Die com Portnummern beginnen mit 1 an zu zählen. Config Serialin3 bezieht sich auf com4. Config Serialin (ohne Nummer) würde com1 sein.



Searcher, für heute bist du mein Held! Mit "Config Serialin2" geht es.
Nur sehen, ob es morgen noch funzt...