Was meinst du mit
so ganz hab ich das leider noch nicht kapiert, wann ein befehl gelesen wird und wann er ausgeführt wird.
Prinzipiell werden alle Befehle nacheinander ausgeführt, Schritt für Schritt
wie sie im Programm stehen, es sein denn
es gibt immer ein "Aber" es kommt ein Interrupt dazwischen. Dann wird nämlich Dein Programmablauf an der Stelle unterbrochen und die ISR, die Interrupt Service Routine, ausgeführt, es sein denn ... und da gibts dann wieder ein Aber, zumindest beim AVR, der Controller ist schon am Abarbeiten einer anderen ISR 
Du hast eine Abfrage " = 20" drinnen für den Sekundenzähler, doch was passiert, wenn der Zähler 20 erreicht, aber in der Mainloop noch nicht wieder an der Abfragestelle ankommt und die ISR nochmal ausgelöst wird? ... er zählt auf 21 weiter und die Bedingung wird nicht ausgeführt, erst wieder wenn der Zähler die 255 überlaufen hat und wieder bei 0 anfängt zu zählen.
Probiers mal so:
Code:
$regfile = "attiny26.dat"
$crystal = 1000000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 20
Ddrb = &B00011100 'Bit 0, 1 auf Eingang
Portb = &B00000011
Config Timer0 = Timer , Prescale = 1024 'Timer0 als timer definieren, teiler 1024 '
On Timer0 Marke
Timer0 = 230n
Enable Timer0
Enable Interrupts
Const Preset = 5 'zählt von 1 bis 255
Dim Sekbyte As Byte
Dim Minbyte As Byte
Sekbyte = 0
Minbyte = 9
Do
If Sekbyte < 5 Then
Portb.4 = 1
Else
Portb.4 = 0
End If
If Sekbyte > 19 Then
Decr Minbyte
Sekbyte = Sekbyte - 20
End If
If Minbyte = 0 Then
Minbyte = 9
End If
If Minbyte = 9 Then
Portb.3 = 1
Else
Portb.3 = 0
End If
Loop
Marke:
Timer0 = 230
If Pinb.0 = 0 Then
Incr Sekbyte
End If
Return
End
Lesezeichen