Zitat Zitat von walkonshit
Ich dachte es is vielleicht geschickter die Routinen ausserhalb des Interupts zu lassen, da sonst der Interrupt zuviele Zyklen verbraucht.
Nicht aus dem Grund, aber machen würde ich das wirklich genau so.
Bei mir wird die Variable Sec übrigens in ASM Farbe dargestellt. Daher habe ich die Variable mal auf Seco geändert. Dann funktioniert dein Programm.
Zusätzlich noch ein wenig aufgeräumt sieht es dann so aus:
Code:
$regfile "m8def.dat"
$crystal = 16000000

Dim Seco As Byte
Dim Minu As Byte
Dim Hour As Byte
Dim Flag As Bit
Dim X As Byte
Dim Y As Byte
'Dim Tag As Integer
Seco = 0
Minu = 0
Hour = 0

Config Portd = Output
Config Portc = Output
Config Portb = Output
Config Timer1 = Timer , Prescale = 256
Load Timer1 , 62500

Enable Timer1

On Timer1 Timer_interrupt
Enable Interrupts

' Portd.0 = 0
'Tag = 0
Do
   If Flag = 1 Then
      '(
      If Tag > 976 Then
         Incr Sec
         Tag = 0
         If Portd.0 = 1 Then Portd.0 = 0
      Else
         Portd.0 = 1
      End If
      ')
      Flag = 0
      If Seco > 59 Then
         Seco = 0
         Incr Minu
      End If
      If Minu > 59 Then
         Minu = 0
         Incr Hour
      End If
      If Hour > 23 Then
         Hour = 0
      End If
      Portb.3 = Seco.0
      Portb.4 = Seco.1
      Portb.5 = Seco.2
      Portc.0 = Seco.3
      Portc.1 = Seco.4
      Portc.2 = Seco.5
      Portd.5 = Minu.0
      Portd.6 = Minu.1
      Portd.7 = Minu.2
      Portb.0 = Minu.3
      Portb.1 = Minu.4
      Portb.2 = Minu.5
      Portd.0 = Hour.0
      Portd.1 = Hour.1
      Portd.2 = Hour.2
      Portd.3 = Hour.3
      Portd.4 = Hour.4
   End If
Loop


Timer_interrupt:
   Load Timer1 , 62500
   Incr Seco
   Flag = 1
   'Toggle Portd.0
Return
Gruß

Rolf