Wie realisiert ihr die messung solch hoher Frequenzen?

Ich muss für ein schulprojekt ein Kapazitätsmessgerät bauen und habe nun auch den Teil zu Frequenzmessung geschrieben, doch er schafft nur frequenzen bis 25 khz richtig anzuzeigen, danach kommt nur noch schrott raus. Ich brauche aber 780khz, also noch über eine Stelle mehr.

Das ganze soll auf einem LCD ausgegeben werden, was die Sache etwas Zeitkitisch macht.

Ich habe, dass zu messende signal an Int0 angeschlossen und lasse bei fallender Flanke eine Variable Hochzählen. Ein interner Timer zählt eine Sekunde und gibt dann Die Variable am Display aus. Eigentlich ganz einfach

Hardware
-Mega 8 8Mhz
-27x4 LCD
-Bascom
-Funktionsgenerator der Schule

Code:
 $regfile = "m8def.dat"                                     'Atmel MEGA 8 controller
 $crystal = 8000000                                         'Quarz auf 8MHz


 Ddrd.2 = 0                                                 'PD2/INT0 als Eingang deklarieren
 Portd.2 = 1                                                'Pullup Widerstand aktiveren



 '27 x 4 LCD Display angeschlossen
 'Festlegen der Verwendeten Ports
  Ddrc = &B00111111                                          ' LCD ANzeige
  Ddrd.6 = 1
  Ddrd.7 = 1
  Dim ___lcdno As Bit
  Config Lcdpin = Pin , E = Portc.2 , E2 = Portc.3 , Rs = Portc.0 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.6 , Db7 = Portd.7
  Config Lcd = 40 * 4


 Dim Tasten_zaehler As Integer                              'Variable für anzahl der Tastendrücke
 Dim Frequenz As Integer                                    'Frequens den tastendrucks

 Dim Timerprescale As Integer                               'um timer auf 1 sec ztu stellen

 On Int0 Taste0                                             'Interrupt Unterprogram für Taste 1 festlegen
 On Timer0 Ontimer                                          'Interrupt Programm für Timer0 überlauf

 Config Int0 = Falling                                      'Fallende Flake als Interrupt festlegen
 Config Timer0 = Timer , Prescale = 1                       'Timer als Timer Festlegen

 Enable Int0                                                'Interruptlauscher Aktivieren
 Enable Timer0                                              'Timer einschalten

 Enable Interrupts                                          'Allgemein Interrupts erlauben


 '--Hauptprogramm---------------------------------------------------------------
 Tasten_zaehler = 0                                         'startwert festlegen
 Timerprescale = 0                                          'startwert festlegen
 Stop Timer0                                                'erstmal stop damit nicht schon jetzt interrupts kommen
 ___lcdno = 0                                               'Ober Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt
 Initlcd
 Cursor Off
 Cls
 ___lcdno = 1                                               'untere Displayhälfte initialisieren, wenn das Display zwei LCD-Controller besitzt
 Initlcd
 Cursor On
 Cls

 ___lcdno = 0
 Home
 Lcd "Das neue Frequenzmessgerät"
 Locate 2 , 5
 Lcd "***** MEGA 8 *****"

 ___lcdno = 1
 Home
 Locate 1 , 5
 Lcd "(c) Boris Eskin"
 Locate 2 , 5
 Lcd "(c) Olaf Petersen"
 Wait 2


 '--jetzt kann es losgehen

 ___lcdno = 1
 Cls
 Home
 Start Timer0

 Do

   If Timerprescale >= 31250 Then                           'Sekundentakt auswerten der Tasten
      Stop Timer0                                           'damit nicht heimlich weitergezählt wird ffals die Anzeige länger braucht
      Disable Int0
      Timerprescale = 0
      Frequenz = Tasten_zaehler                             'Anzahl der Impulse in Frequenz umrechnen (Periodendauer 1sec)
      Tasten_zaehler = 0
      Locate 1 , 10
      Lcd Frequenz , " HZ"                                  'Ausgabe am LCD
      nop
      Enable Int0
      Start Timer0
   End If
 Loop

 End


'--Unterprogram--Interrupt an Taste 2-------------------------------------------
 Taste0:
   Incr Tasten_zaehler                                      'Impulse Zählen
 Return

'--Unterprogramm Timer Überlauf 256 mal Quarztakt-------------------------------
 Ontimer:
  Incr Timerprescale                                        'Überlaufzähler um eins erhöhen#
 Return