Ojeojeoje. Es ist eben immer schlecht, wenn man es nicht selbst testen kann. Beim Timer2 sollte man schon das Zählregister TCNT2 manipulieren, OCR2 ist hier völlig falsch.

Takt3 zählt die Aufrufe der Interruptroutine des Timer2. Solange Takt3 kleiner als 250 ist wird es erhöht. Bei 250 sollte eine halbe Sekunde vergangen sein. Es werden dann die Zählerstände von Taktx_temp nach Taktx kopiert und die Taktx_temp gelöscht. Takt3 wird wieder auf null gesetzt und das Spiel beginnt von vorne.

Code:
If Takt3 < 250 Then                                         'solange Takt3 kleiner 250
   Takt3 = Takt3 + 1                                        'Takt3 erhöhen
Else                                                        'die 1/2 Sek. ist vorbei
   Takt3 = 0                                                'Takt3 reseten
   Takt1 = Takt1_temp                                       'Zähler auslesen
   Takt1_temp = 0                                           'und reseten
   Takt2 = Takt2_temp
   Takt2_temp = 0
End If
Gleichzeitig werden ca. alle 300ms die aktuellen Werte von Takt1 und 2 am LCD ausgegeben. Der Code mit dem richtigen TCNT2-Register sieht dann so aus:

Code:
                                     ' Display an folgenden Ports
' Enable = Port C.4
' RS = Port C.5
' DB7 = Port C.7
' DB6 = Port C.6
' DB5 = Port C.3
' DB4 = Port C.2
'
' Leds an folgenden Ports
' Grün an A.0
'
$regfile "m32def.dat"                                       'Definiert den Atmega als Atmega 32
$crystal = 1000000                                          'Gibt die Quarzfrequenz an in Herz
$hwstack = 32                                               'Default use 32 for the hardware stack
$swstack = 10                                               'Default use 10 for the SW stack
'-------------------------------------------------------------------------------
' Konfiguration fürs Display
Config Lcd = 16 * 2                                         'definiert das LCD Display in Art und Größe
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.6 , Db7 = Portc.7 , Rs = Portc.5 , E = Portc.4

'------------------------------------------------------------------------------
' Variablen
Dim Takt1 As Word
Dim Takt2 As Word
Dim Takt3 As Word
Dim Takt1_temp As Word
Dim Takt2_temp As Word
'------------------------------------------------------------------------------

Portb = &B00011110                                          ' Pull Up setzen für Pin B1
Ddra = &B11111111                                           ' Pin A.7 als Ausgang setzen für blaue Led
'------------------------------------------------------------------------------
' Timer 0
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
On Timer0 Timer_null
'---------------------------------------
' Timer 1
Config Timer1 = Timer , Prescale = 64
Enable Timer1
On Timer1 Timer_eins
'---------------------------------------
' Timer 2
Config Timer2 = Timer , Prescale = 8
Tcnt2 = 6                                                   'nach 250 Zählschritten folgt der Interrupt
Enable Timer2
On Timer2 Timer_zwei

Enable Interrupts

Takt3 = 0
Cls
'------------------------- H A U P T P R O G R A M M --------------------------
Do
Gosub Anzeige

Waitms 300
Loop


'------------------------------ D I S P L A Y - A N Z E I G E -----------------
Anzeige:
Cls
Locate 1 , 1
Lcd "Takt1: " ; Takt1
Lcd "Takt2: " ; Takt2
Return

'--------------------------------- T I M E R - 0 -----------------------------
Timer_null:
Toggle Porta.0                                              ' Led Grün
Takt1_temp = Takt1_temp + 1
Return

'--------------------------------- T I M E R - 1 ------------------------------
Timer_eins:
Toggle Porta.7                                              ' Led Blau
Takt2_temp = Takt2_temp + 1
Return

'--------------------------------- T I M E R - 2 ------------------------------
'Die Werte werden jede 1/2 Sekunde ausgelesen. Das Setup des Timers sieht so aus:
'1MHz mit Prescaler/8 ergibt 125000 Timertakte pro Sekunde. Das Zählregister startet
'mit 6, nach 250 Schritten erfolgt der Interrupt. Das ergibt 125000/250=500 Interrupts
'pro Sekunde.Nach 250 Interrupts werden dann die Werte eingelesen und zurückgesetzt.
'Die Frequenzkorrektur berücksichtigt auch die Takte, die schon gezählt wurden und
'entfernt zusätzliche 3 Takte für Laden, Berechnen und Speichern des TCNT2-Wertes.
Timer_zwei:
Tcnt2 = Tcnt2 + 9                                           'Frequenzkorrektur (256-6-3)
If Takt3 < 250 Then                                         'solange Takt3 kleiner 250
   Takt3 = Takt3 + 1                                        'Takt3 erhöhen
Else                                                        'die 1/2 Sek. vorbei
   Takt3 = 0                                                'Takt3 reseten
   Takt1 = Takt1_temp                                       'Zähler auslesen
   Takt1_temp = 0                                           'und reseten
   Takt2 = Takt2_temp
   Takt2_temp = 0
End If
Return
'------------------------------------------------------------------------------
Zum Debuggen könnte man im else-Zweig in der Timer2-ISR noch eine Led togglen. Die sollte dann mit 1 Hz blinken.

Hast du inzwischen die Takte1 und 2 mal nachgemessen? Viele Multimeter können auch Frequenzen messen.

Gruß

mic