Tja dank euch funktioniert Teil 1 von meinem Programm - aber mal von vorne:

Also ich möchte eine Geschwindigkeit mit zwei Lichtschranken messen. Abstand 30cm und jede löst einen Interrupt aus(INT0 und INT1). Wenn INT0 kommt wird Timer1 gestartet. Nun möchte ich zählen wie oft Timer1 überläuft bis INT1 den Timer stoppt.
Irgendwie klappt das zählen vom Timerüberlauf nicht.
Kann mir jemand sagen warum und ob meine Vorgehensweise im Prinzip richtig ist?

Tobias



Code:
'7Segmentanzeige mit 5 (oder 4) Anzeigen

$regfile = "ATtiny2313.dat"                                 'ATTiny2313
$crystal = 18432000                                         '18,4320MHz Quarz

$hwstack = 64                                               ' default use 32 for the hardware stack
$swstack = 64                                               ' default use 10 for the SW stack
'$baud = 9600

'_______________________________________________________________________________
Ddrb = &B11111111                                           'PortB = Ausgang (PB0=A usw.)
Ddrd = &B1110011                                            'PortD = Ausgang (PD0=Anzeige1, PD4=A2, PD5=A3, PD6=A4) PD2/3 =INT

Config Int0 = Rising                                        'Falling                                       'wechsel von High auf Low
Config Int1 = Rising                                        'Falling                                       'wechsel von High auf Low
Enable Int0
Enable Int1
On Int0 Irq0
On Int1 Irq1


'_______________________________________________________________________________
Dim Anzeige_akt As Word                                     'Aktuelle Zeitmessung
Dim Anzeige_str As String * 5                               'Zeit als String
Dim Anzeige_str_len As Byte                                 'String-Länge
Dim Anzeige_ziffer As String * 1                            'Aktuelle Ziffer
Dim Anzeige_pos As Byte                                     'Aktuelle Ziffer im String
Dim I As Byte                                               'Allgem. Laufzahl
I = 1


Dim T1ueberlauf As Single                                   'gemessene Zeit von Timer1
Dim Kmh As Single                                           'Geschwindigkeit

'_______________________________________________________________________________
'TIMER0 Konfiguration für Ziffernwechsel:
Config Timer0 = Timer , Prescale = 256                      ' Timer0 für Anzeige
Const T0_preload = &H70                                     ' Startwert Timer0 für 500Hz
Tcnt0 = T0_preload

On Timer0 Timer_irq_led                                     ' Timer0-Overflow-Interrupt

Enable Timer0                                               ' Timer0 starten
Sreg.7 = 1                                                  'Globale Interruptfreigabe

'_______________________________________________________________________________
'TIMER1 Konfiguration für Messzeit Lichtschranke:
Config Timer1 = Timer , Prescale = 1024
Const Timervorgabe = 0                                      '29535 -> 0,5 Hz
On Timer1 Timer_irq_kmh                                     'Unteprogramm aufrufen
Stop Timer1
Enable Interrupts

'_______________________________________________________________________________

T1ueberlauf = 0                                             'Timer1Zähler auf 0 setzen
Do                                                          ' Dauerschleife als Hauptprogramm
'Waitms 250
Anzeige_akt = T1ueberlauf                                   'Wert zum anzeigen



Loop



'_______________________________________________________________________________
Timer_irq_led:

      Tcnt0 = T0_preload                                    'Timer wieder laden

      Anzeige_str = Str(anzeige_akt)                        ' Wert in String umwandeln
      Anzeige_str_len = Len(anzeige_str)                    ' Stringlänge messen

      Anzeige_pos = Anzeige_str_len - I
      Anzeige_pos = Anzeige_pos + 1

      Anzeige_ziffer = Mid(anzeige_str , Anzeige_pos , 1)

      Portd = 0                                             'Ghosting vermeiden

      Select Case Anzeige_ziffer                            'Ziffer auf Port

           Case "0" : Portb = 63                            'NULL
           Case "1" : Portb = 6                             'EINS
           Case "2" : Portb = 91                            'ZWEI
           Case "3" : Portb = 79                            'DREI
           Case "4" : Portb = 102                           'VIER
           Case "5" : Portb = 109                           'FÜNF
           Case "6" : Portb = 125                           'SECHS
           Case "7" : Portb = 7                             'SIEBEN
           Case "8" : Portb = 127                           'ACHT
           Case "9" : Portb = 111                           'NEUN
           Case Else : Portb = 0

      End Select

     'Segment wählen
      If I = 1 Then Portd.0 = 1                             'EINER
      'If I = 2 Then Portd.1 = 1                            'ZEHNER
      If I = 2 Then
      Portd.4 = 1                                           'HUNDERTER
      Portb.7 = 1                                           'Kommastelle
       End If
      If I = 3 Then Portd.5 = 1                             'TAUSENDER
      If I = 4 Then Portd.6 = 1                             'ZEHNTAUSENDER

      I = I + 1                                             'Nächste Ziffer
      If I >= 6 Then I = 1                                  'max Anzeigen angeben! damit Anzeige möglichst hell ist(bei 5Anzeigen muss bei der 6. wieder bei 1 Angefangen werden)


Return

Irq0:                                                       'Aufruf bei Lichtschranke 1 per Interrupt
 Timer1 = 0                                                 'Timer auf 0 setzen
 T1ueberlauf = 0                                            'Timer1Zähler auf 0 setzen
 Start Timer1                                               'Timer starten
 Return

Irq1:                                                       'Aufruf bei Lichtschranke 2 per Interrupt
 Stop Timer1                                                'Timer stoppen
 Return


Timer_irq_kmh:                                              'Aufruf jede oder jede halbe Sekunde
 Timer1 = Timervorgabe                                      'AUF TIMER EINSTELLUNG ACHTEN!!!!!!!
 T1ueberlauf = T1ueberlauf + 1                              'Timer1Zähler hoch zählen
Return