Mit INT0 und Timer0 habe ich mal für einen Mega8 so ein Testprogramm gemacht:

Code:
$crystal = 8000000
$regfile = "m16def.dat"
$hwstack = 64                                               ' default use 32 for the hardware stack
$swstack = 64                                               'default use 10 for the SW stack
$framesize = 128                                            'default use 40 for the frame space
$baud = 38400

Dim Impuls_laenge As Word , Flanken_index As Byte , Flanken_anzahl As Byte , Bit_count As Byte
Dim Timer0_startwert As Byte

Config Timer0 = Timer , Prescale = 8                        'hier den Timer eintragen (8-bit)
On Ovf0 Tim0_isr
Enable Timer0
Timer0_startwert = 156                                      'bei mir 8000000/8/(256-156) entspricht 10Khz
Timer0 = Timer0_startwert                                   'Auflösung reicht und gefundene Werte entsprechen immer 100µs

Config Int0 = Change                                        'externer interrupt, bei mir Int0 auf portd.2
On Int0 Get_rc_isr
Enable Int0
Ddrd.2 = 0                                                  'ausgang des RC-empfängers
Portd.2 = 1
Config Serialout = Buffered , Size = 100
Print ""
Enable Interrupts
Do
Loop
End

Tim0_isr:
   Timer0 = Timer0_startwert
   Incr Impuls_laenge                                       'bei jedem Überlauf um 1 erhöhen
   If Impuls_laenge > 1000 Then                             'nach 0.1 ohne Signal Stop Timer0
      Stop Timer0
      Timer0 = Timer0_startwert
      Impuls_laenge = 0
      Print ""
   End If
Return

Get_rc_isr:                                                 'RC Impuls erkannt
   If Impuls_laenge > 0 Then
      Print Impuls_laenge ; " ";
      Impuls_laenge = 0
   Else
      Start Timer0
   End If
Return
Es sollte die High- und Low-Zeiten zum PC schicken.
Probier es mal aus. Musst du aber auf deinen 8051 umändern.