PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Buffered serialin



hululu
25.08.2006, 17:00
Habe ein problem mit dem Empfangen von einem String.

Ich bekomme immer nur zwei zeichen. das heisst er liest nur 2Bytes und der rest ist irgendwo verschwunden.

habe folgendes drin aber es funktioniert nicht.

Config serialin = buffered, size = 20

er hat trotzdem immer nur 2 zeichen im Buffer, obwohl ich ihm ja platz für 20 gebe. brauch übrigens maximal 5zeichen = 5Byte

habe ich noch etwas vergessen??

PicNick
25.08.2006, 18:15
Naja, wie liest du die Daten ? Lass gucken !

hululu
25.08.2006, 19:10
Config Serialin = Buffered , Size = 20
Enable Interrupts
.

.

If Ischarwaiting() <> 0 Then
Zeichen = Inkey()
If Zeichen = 10 Then
B = 1
Buf = ""
Else
If B = 1 Then
If Zeichen = 13 Then
Buf = Buf + Chr(0)
Eingang = Val(buf)
B = 0
Print "eingang" ; Eingang;
Else
Buf = Buf + Chr(zeichen)
End If
End If
End If
End If


mit inkey() lese ich aus, aber ich habe immer nur 2 zeichen auch wenn ich mehr sende
ich denke irgdenwie akzeptiert er meine Buffergrösse nicht, weil ich kann dort angeben was ich will er hat immer nur 2Byte


edit:
kann es möglicherweise daran liegen?
The M32 USART may not work with Bascom Buffered support as the Mega32
has a 2 byte FIFO buffer. I have never used it , but maybe another group
member have tested it

Gento
25.08.2006, 21:31
Ohne Buffer mit timeout ein Auszug was läuft:



Dim Char_vergleich(20) As Byte
Dim Char_da(20) As Byte
Const Timeoutfaktor=100 '100mSek



Charzaehler = 0 'Prüfen auf Startstring und IO / Startstring einlesen
Timeout = 0
Do
Hole_char = Ischarwaiting() 'RS232 Port auf Daten abfragen
If Hole_char = 0 Then 'keine Daten da
Waitms 1
Incr Timeout
Else 'Daten da
Timeout = 0
Hole_char = Inkey() 'Byte auslesen
Incr Charzaehler 'Feldzähler hoch
Char_da(charzaehler) = Hole_char
If Char_da(charzaehler) <> Char_vergleich(charzaehler) Then Charzaehler = 100 'Vergleiche Byte im Startsting
End If
If Timeout > Timeoutfaktor Then Exit Do 'Timeout abfragen
Loop Until Charzaehler > 8 'Schleife bis alle 8 Byte vom Startstring ausgelesen oder Timeout
If Charzaehler <> 9 Then
Datenuebergabe_rs232 = Fehler_im_startstring '10
Exit Sub
End If


Gento