Da ist auch ein Wait 1 in der isr...

So würde ich es wohl probieren: (ungetestet, da nur Laptop hier und keine Hardware)
Code:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Programmname:    UART-Schnittstelle.bas
'Letzte Änderung: 03.03.2013
'Funktion:        Empfang von gesamt 18Byte,
'                 ausgabe als echo über seriell und lcd zur kontrolle
'Mikrocontroller: Mega8
'
'Input:
'Output:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Den Atmega mit den passenden Daten füttern.
'-------------------------------------------------------------------------------
$regfile = "m8def.dat"                                      'eingesetzter Mikrocontroller
$crystal = 8000000                                          'eingestellte Taktfrequenz (8MHz)
$hwstack = 40                                               'Standardwert
$swstack = 40                                               'Standardwert
$framesize = 20                                             'Standardwert
$baud = 9600


'-------------------------------------------------------------------------------
'Ports/Pins/Configs
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
'Timer/OCR/PWM/ISR usw. setzen
'-------------------------------------------------------------------------------
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Serialin = Buffered , Size = 18
Enable Interrupts

'-------------------------------------------------------------------------------
'Variablen
'-------------------------------------------------------------------------------
Dim Temp_byte As Byte
Dim Datenblock(16) As Byte
Dim Indexposition As Byte
Const Startzeichen = 123
Const Endzeichen = 125
Const Datenblock_laenge = 16
Dim Datenblock_komplett As Bit
Dim Lcd_position As Byte
Dim Datenblock_string As String * 16
Dim Datenblock_byte(16) As Byte At Datenblock_string Overlay

'-------------------------------------------------------------------------------
'Hauptprogramm
'-------------------------------------------------------------------------------
Cls
Waitms 100

Do
   If Ischarwaiting() = 1 Then
      Gosub Empfangen
   End If
   If Datenblock_komplett = 1 Then
      Reset Datenblock_komplett
      Gosub Anzeige
   End If
Loop
End

Anzeige:
      Cls
      Waitms 100
      For Indexposition = 1 To 3 Step 1
         Lcd_position = Indexposition
         Locate 1 , Lcd_position
         Lcd Chr(datenblock(indexposition))
      Next
      For Indexposition = 3 To Datenblock_laenge Step 1
         Lcd_position = Indexposition - 8
         Locate 2 , Lcd_position
         Lcd Chr(datenblock(indexposition))
      Next
   'Echo zurücksenden zur Kontrolle
      Print Datenblock_string


Return


Empfangen:
   Temp_byte = Inkey()
   If Temp_byte > 12 Then                                   'unter 13 sind nur Sonderzeichen
      If Temp_byte = Startzeichen Then
         Indexposition = 0
      Elseif Temp_byte = Endzeichen Then
         Gosub Auswerten
      Else
         Incr Indexposition
         Datenblock(indexposition) = Temp_byte
      End If
      If Indexposition = Datenblock_laenge Then
         Gosub Auswerten
      End If
   End If

Return

Auswerten:
   Dim Dummy As Byte
   Datenblock_string = String(datenblock_laenge , 0)
   Dummy = Memcopy(datenblock(1) , Datenblock_byte(1) , Indexposition)
   Datenblock(1) = String(datenblock_laenge , 22)           'Wozu?
   Indexposition = 0
   Set Datenblock_komplett
Return