Upps , hab Hi und Lo vertauscht.

Code:
$regfile = "2313def.dat"
$crystal = 10000000
$baud = 9600

Dim Hi As Byte
Dim Lo As Byte
Dim Freq As Byte
Dim Zeit As Byte

Config Pind.2 = Output

Config Timer1 = Timer , Prescale = 1

Enable Interrupts
On Timer1 Icnr
Enable Timer1
Timer1 = 65531



Do
    Input "High x mal 1us: " , Hi
    Input "Low x mal 1us: " , Lo
Loop



Icnr:

Incr Zeit

If Zeit = Lo And Portd.2 = 1 Then

  Portb.2 = 0
  Timer1 = 65531
  Zeit = 0
  End If

If Zeit = Hi And Portd.2 = 0 Then

   Portb.2 = 0
   Timer1 = 65531
   Zeit = 0
   End If

Return
warum benutzt du kein else?
Ist doch einfach, wenn ich ein else benutzen würde, würde bei JEDEM Interrupr der port verändert, die Zeit auf null und der Timer auf 65531 gesetzt, und das DARF ned sein.

Oszi?
Ganz einfach Hi und lo auf 1 setzen ( ergibt 0,5 Mhz ) und timervorgabe so lange verändern, bis man am oszi eine Frequen von 500kHz misst.