Najważniejsze to chociaż troszkę samemu najpierw pokombinować i ew później dopytać co i jak

ale po co ten Inkey? toż jak już zajdzie zdarzenie Bytematch - to znaczy, że w twoim buforze jest już co najmniej jedeń łańcuch tekstowy, którzy przyleciał z Rs232 i zakończony znakiem ENTER (13) .... w związku z tym wystarczy dać polecenie Input linia i już w zmiennej linia będziesz miał pierwszy odebrany łańcuch z bufora i to już bez znaku (13) ponieważ Input go ładnie wytnie. (Coś takiego podpowiedział mi kiedyś tu na forum kolega zumek)
Zobacz co się dzieje:
1. Ustawiamy parametry RS232 i bufora wg potrzeb (wielkość itp)
2. definiujemy sobie podstawowe funkcje
3. definiujemy zmienne, gdzie
zmienna
Event - odpowiada ilości wystąpień znaków 13 w buforze co się równa ilości łańuchów znaków zakończonych enterem, które zdążyły nadlecieć przez RS232 do bufora. Tak więc procedura
Serial0charmatch zajmuje się tylko i wyłącznie zwiększaniem licznika tych łańuchów a dalsza obsługa już poprzez funkcję
Getline - która zwraca ilość znaków łańucha, który czeka spokojnie na ciebie, na obsłużenie w buforze. Tak więc w tej funkcji zerowana jest na początku zmienna
Linia, później sprawdzany jest licznik zdarzeń
Event i jeśli jest większy od 0 to znaczy, że trzeba szybko pobrać do zmiennej Linia cały ciąg znaków, który czeka w buforze. Robione jest to poleceniem Input, które jest też odpowiednio na początku skonfigurowane (zobacz jak) .... po czym Input pobiera te znaki z bufora do zmiennej Linia i wycina ładnie znak (13). Jednocześnie po odebraniu już jednej porcji danych z bufora (a może ich być więcej w zależności od jego rozmiaru) zmniejszana jest wartość zmiennej
Event
Całość pozwala pięknie i bezkolizyjnie obsługiwać tego typu transmisję w Bascomie przez RS232 .... działa to pięknie
Config Serialin = Buffered , Size = 180 , Bytematch = 13
Declare Function Getline() As Byte
Declare Sub Obsluga_rs232
Dim Event As Byte
Dim Linia As String * 120
Config Input = Cr , Echo = Crlf
' Pętla główna
Do
...
... 'jakieś tam twoje inne działania w pętli
...
' obsługa przychodzących danych przez RS232
If Getline() > 0 Then
Call Obsluga_rs232
End If
...
... 'jakieś tam jeszcze inne działania w pętli
...
Loop
Serial0charmatch: 'po odebraniu znaku Chr(13) zwiększenie licznika lini(zdarzeń)
lds r24,{event}
inc r24
sts {event},r24
Return
Function Getline()as Byte
Linia = ""
If Event > 0 Then
If _rs_bufcountr0 > 0 Then Input Linia , Noecho
Err = 0
Getline = Len(linia)
Cli
Decr Event
sei
End If
End Function
Sub Obsluga_rs232
.....'tutaj już spokojnie analizujesz sobie co masz w zmiennej LINIA
Return