Hallo,
ich habe 4 7-Segmentanzeigen programmiert. zum testen wollte ich mit Timer1 die Variable Test hochzählen. Nur leider zählt der Timer nur bis 8 auf der 7-Segmentanzeige. Zur Kontrolle sende ich mit Print auf den PC mit dem Selben Ergebnis!?

Woran liegt das?

Tobias


Code:
'7Segmentanzeige mit 4 Anzeigen

$regfile = "m8def.dat"                                      'AT-Mega8
$crystal = 8000000                                          '18432000                                         '18,4320MHz Quarz

$baud = 9600                                                '38400

'_______________________________________________________________________________
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



'Dim Zeit As Word
'Dim Zeitfake As Word                                        'damit nicht mit dem Wert 0 gerechnet wird 0=108km/h!!!                                            'gemessene Zeit von Timer1
'Dim Zeit1 As Single
'Dim Zeit2 As Single
'Dim Zeit3 As Single

Dim Test As Integer

'Dim Int0_merker As Byte                                     'als verriegelung für den int0 Eingang
'Dim Int1_merker As Byte                                     'als verriegelung für den int1 Eingang
'Dim Timer0merker As Word                                    'um intMerker zurück zu setzen


'_______________________________________________________________________________
'TIMER0 Konfiguration für Ziffernwechsel:
Config Timer0 = Timer , Prescale = 64                       ' Timer0 für Anzeige
Const T0_preload = 130                                      ' Startwert Timer0 für 500Hz
'Tcnt0 = T0_preload
On Timer0 Timer_irq_led                                     ' Timer0-Overflow-Interrupt
Enable Timer0                                               ' Timer0 starten
Enable Interrupts
'Sreg.7 = 1                                                  'Globale Interruptfreigabe

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

'_______________________________________________________________________________
'Int0_merker = 0                                             'als verriegelung für den int0 Eingang
'Int1_merker = 0                                             'als verriegelung für den int1 Eingang
I = 1
'Zeit = 0                                                    'gemessene Zeit auf 0 setzen
Test = 1
Do                                                          ' Dauerschleife als Hauptprogramm

Anzeige_akt = Test                                          'Zeit3        'Wert zum anzeigen

'If Zeit =< 500 Or Zeit => 18615 Then                        'damit nicht mit dem Wert 0 gerechnet wird 0=108km/h!!!
'Zeitfake = 18616
'Else
'Zeitfake = Zeit
'End If


'Zeit1 = Zeit * 0.0058579
'Zeit2 = 109.05442 - Zeit1
'Zeit3 = Zeit2 * 10                                          'damit ich eine nachkommastelle habe!!!


'If Timer0merker => 1000 Then
'Timer0merker = 0
'Int0_merker = 0                                             'als verriegelung für den int0 Eingang
'Int1_merker = 0                                             'als verriegelung für den int1 Eingang
'End If
Print Test
Gosub Anzeige

Loop



'_______________________________________________________________________________
Timer_irq_led:
      'Gosub Anzeige

Return

Anzeige:
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)

      Portc = 0                                             'Ghosting vermeiden (Ziffern nicht Segmente)

      Select Case Anzeige_ziffer                            'Ziffer auf Port

           Case "0" : Portb = 126                           'NULL
           Case "1" : Portb = 12                            'EINS
           Case "2" : Portb = 182                           'ZWEI
           Case "3" : Portb = 158                           'DREI
           Case "4" : Portb = 204                           'VIER
           Case "5" : Portb = 218                           'FÜNF
           Case "6" : Portb = 250                           'SECHS
           Case "7" : Portb = 14                            'SIEBEN
           Case "8" : Portb = 254                           'ACHT
           Case "9" : Portb = 222                           'NEUN
           Case Else : Portb = 0                            'NICHTS ANZEIGEN!!! Wenn Stelle leer!!!

      End Select

     'Segment wählen
      If I = 1 Then Portc.1 = 1                             'EINER
      If I = 2 Then
      Portc.2 = 1                                           'ZEHNER
      'Portb.0 = 1                                           'mti einer Nachkommastelle
      End If

      If I = 3 Then Portc.3 = 1                             'HUNDERTER
      If I = 4 Then Portc.4 = 1                             'TAUSENDER

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

      'Timer0merker = Timer0merker + 1                       '+1 um intMerker zurück zu setzen
Return


Timer_irq_kmh:                                              'Aufruf jede oder jede halbe Sekunde
 Timer1 = Timervorgabe                                      'AUF TIMER EINSTELLUNG ACHTEN!!!!!!!
 Incr Test

Return