Wenn Du Bytematch nutzt, dann musst Du die Register sichern. Ich nutze immer die ischarwaiting() Methode.

Ungetestet:
Code:
$regfile = "M8def.dat"                                      '.dat-file ATmega8'
$crystal = 8000000                                          'Taktfrequenz 8MHz'
$hwstack = 350                                              'Größe Hardwarestack'
$swstack = 350                                              'Größe Softwarestack'
$framesize = 200                                            'Größe Frame'

''$lib "i2c_twi.lbx"                                          ' Für Hardware TWI

$baud = 19200                                               'Baudrate UART

'Declare Sub Serial0charmatch()
'Declare Sub Verarbeiten()
'Declare Sub Setzen()

''Config Scl = Portc.5                                        'SCL-Pin
''Config Sda = Portc.4                                        'SDA-Pin

''Config Twi = 400000                                         'Clockspeed für SCL
''Twcr = &B00000100                                           'TWI einschalten

''Const Pcf_write = &H39                                      'Adresse jeelabs LuxPlug
''Const Pcf_read = &H40

''I2cinit                                                     'SCL und SDA initialisieren

Config Serialin = Buffered , Size = 4                       'kann man bei Speichmangel immer noch runtersetzen                       ' , Bytematch = 37      '37=%

Const Ledtakt = 2000
Dim Durchlauf As Long

Enable Interrupts

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portd.5 , Db7 = Portb.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2

Kontrollled Alias Portb.0
Led1 Alias Portd.7
Led2 Alias Portd.6


Config Kontrollled = Output                                 'Kontroll-LED
Config Led1 = Output                                        '1. schaltbare LED
Config Led2 = Output                                        '2. schaltbare LED

Dim B As Byte
Dim I As Byte                                               'Splitting der Hauptschleife
Dim Incoming_data As String * 4                             'UART Buffer
Dim Port As String * 2                                      'Portnummer (String)
Dim Wert As String * 2                                      'Wert -> Port (String)
Dim B_port As Byte                                          'Portnummer (Wert)
Dim B_wert As Byte                                          'Wert -> Port (Wert)
'Dim Flag12 As Bit                                           'Zustand Pin 12
'Dim Flag13 As Bit                                           'Zustand Pin 13

B_port = 50
B_wert = 49

Cls
Cursor On Blink
Lcd "USB-IO_plus"
Waitms 150
Locate 2 , 1
Lcd "."
Waitms 150
Locate 2 , 2
Lcd "."
Waitms 150
Locate 2 , 3
Lcd "."
Waitms 150
Locate 2 , 4
Lcd "initialisiert"


Do
   Gosub Taktled
   If Ischarwaiting() = 1 Then
      Gosub Empfangen
   End If
   Gosub Setzen
   'Print "Port " ; B_port ; " Wert " ; B_wert               'Ausgabe zu Debuggingzwecken
Loop

End

Taktled:
   If durchlauf = Ledtakt Then
      Durchlauf = 0
      Toggle Kontrollled
   endif
   Incr Durchlauf
Return                                                      'end program


Empfangen:

   B = Inkey()
   If B = 37 Then
      Gosub Verarbeiten
   Else
      If Len(incoming_data) < 4 Then
         Incoming_data = Incoming_data + Chr(b)
      Else
         Incoming_data = ""
        ' Print "...Fehler..."
      End If
   End If

Return



'Sub Serial0charmatch()
'   Input Incoming_data Noecho                               ' Daten aus Buffer auslesen
'      Verarbeiten
'   Clear Serialin                                           ' Buffer leeren
'End Sub

Verarbeiten:
   Port = Left(incoming_data , 2)                           'Byte 1 und 2 extrahieren
   Wert = Mid(incoming_data , 3 , 2)                        'Byte 3 und 4 extrahieren
   B_port = Val(port)                                       'String zu Wert konvertieren
   B_wert = Val(wert)
Return


Setzen:


   Select Case B_port                                       'zu setzenden Pin auswählen
      Case 50 : If B_wert = 49 Then
                     Set Led2
                     Gosub Print_on
                 Elseif B_wert = 50 Then
                     Reset Led2
                     Gosub Print_off
                 End If
      Case 51 : If B_wert = 49 Then
                     Set Led1
                     Gosub Print_on
                 Elseif B_wert = 50 Then
                     Reset Led1
                     Gosub Print_off
                 End If
      Case Else : !nop                                      'wozu?
   End Select
Return

Print_on:
   Print "Pin set high"
   B_port = 0
   B_wert = 0
Return

Print_off:
   Print "Pin set low"
   B_port = 0
   B_wert = 0
Return