Hallo sato,

es gibt da sicher mehrere Möglichkeiten.
Man könnte mit einem Timer und der zugehörigen ISR (Interrupt Service Routine) z.B. einen "1ms-Ticker" realisieren. Damit kann man 8 Sekunden (System_timer = 8000) gut erfassen. Diesen "Ticker" kannst du auch für andere Zwecke (Code-Laufzeit oder Timeouts) verwenden:
Code:
'Timer1 für genaue Zeitmessungen konfigurieren:
Config Timer1 = Timer , Prescale = 1              'Timer 1000Hz
'Startwerte für die Tim1_isr (Register werden mit 15 Takten gesichert):
'Const Startwert = 64551                           'Für 1MHz
'Const Startwert = 61551                           'Für 4MHz
Const Startwert = 57551                           'Für 8MHz
'Const Startwert = 49551                           'Für 16MHz
'Const Startwert = 45551                           'Für 20MHz
Timer1 = Startwert
On Timer1 Tim1_isr Nosave                         'Überlauf 1000x/s
Dim System_timer As Word                          '1ms Zählvariable
Enable Interrupts
Enable Timer1                                     '1ms Interrupt

'Weitere Definitionen

System_timer = 0
Do
  ' Hier serieller Empfang (nicht blockierend!)
  If "Empfang der 20 Bytes erfolgreich" Then Exit While
While System_timer <= 8000

If "Empfang der 20 Bytes erfolgreich" Then
  ' Verwenden der 20 Bytes
Else ' Timeout!
 ' Standardwerte einsetzen
End If

Do 
'weiter programm verarbeitung 
Loop 
end 

'###########################################################################
'Spezielle kurze Timer1-ISR (1000Hz/1ms) für Zeitmessungen:
Tim1_isr:                                         'gesamt ISR: 60 Takte
$asm
  push r24                                        'gesamt PUSHs: 15 Takte
  push r25
  push r26
  push r27
  push r30
  push r31
  in r24 , SREG
  push r24
$end Asm
  Timer1 = Startwert                              'Bascom-Code: 26 Takte
  Incr System_timer                               'Word-Variable!
$asm
  pop r24                                         'gesamt POPs: 15 Takte
  Out Sreg , R24
  pop r31
  pop r30
  pop r27
  pop r26
  pop r25
  pop r24
$end Asm
Return                                            'RETI: 4 Takte

'###########################################################################
Viel Erfolg!

Gruß Dirk