
Zitat von
MDKMurdoc
er soll ja z.b. bei 1 soll er das machen bei 2 das oder bei xy das sowas meine ich. das er je nachdem welches signal oder zeichen kommt soll er was bestimmtes machen
Es kommt da schon ein wenig auf die Feinheiten an.
Wenn der µC eine 1 bekommt und dann sofort irgendetwas machen soll, dann wird er niemals auf eine 10 reagieren können, weil dann bei Auftreten der 1 schon etwas gemacht wird.
Ich habe es so gemacht, dass jeder Befehl an den µC mit einem <CR> abgeschlossen wird. Dann können die Befehle unterschiedlich lang sein. Außerdem kann man den ganzen Befehl in einem Puffer schreiben lassen und beim Auftreten des Zeichens <CR> einen Interrupt ausgelöst bekommen.
All dies wird automatisch gemacht, du brauchst das nur zu konfigurieren, ohne in deinem Programm auf etwas zu warten.
Wenn dann der Interrupt ausgelöst wird, liest du den Puffer ein uand kannst ihn dann in aller Ruhe - in deinem Hauptprogramm - verarbeiten und die entsprechende Aktion ausführen.
Vielleicht ist das eine Alternative:
Code:
Config Serialin = Buffered , Size = 20 , Bytematch = 13 'maximal 20 Zeichen empfangen, beim Zeichen 13 (<CR>) eine ISR ausführen.
Dim Command_string as String * 20 'hier wird der Befehl reingeschrieben
Dim Command_count As byte 'dies ist die Länge des Befehls
Dim Command_key As byte 'dies ist ein eingelesenen Zeichen
Dim Command_flag As Byte 'wenn dies 1 ist, Befehl im Hauptprogramm verarbeiten
Do
If Command_flag = 1 Then
Command_flag=0
'hier kommen deine Aktionen für die jeweiligen Befehle
End If
...
Loop
End
Serial0charmatch: 'dieses Label muss genau so heißen
Command_count = 0
Command_string = ""
While Ischarwaiting() = 1 'nur weiter einlesen, wenn noch Zeichen im Puffer sind
Command_key = Inkey() 'nächstes Zeichen einlesen
If Command_key <> Chr(13) Then 'wenn es kein <CR> war
Incr Command_count
If Command_count < 20 Then
Command_string = Command_string + Chr(command_key) Zeichen an den Befehl hängen
End If
End If
Wend
Print Command_string 'zur Kontrolle noch mal ausgeben
Clear Serialin 'Puffer löschen
Command_flag = 1
Return
Gruß
Rolf
Lesezeichen