Zitat 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