
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
Lesezeichen