Das mit dem Reload hatte ich schon die ganze Zeit angemerkt... das gehört mit in die ISR. Direkt hinter das Decrement. Wenn der Zähler auf null dekrementiert wird, wird dabei automatisch das Z-Flag gesetzt. Abhängig von diesem kannst Du dann den Reloadwert in das Zählerregister laden, klar?
(Wenn man sowas ähnliches beim Überlauf benötigt, kann man dec nicht zum dekrementieren verwenden, da dieses das C-Flag nicht beeinflußt. Aber man kann stattdessen eins subtrahieren (SUBI Register, 1))
Zur "Zeitkonstante": In Deinem Programm lädst Du desöfteren vielfache von 23 in Rechenregister (LDI), bzw vergleichst mit diesen Konstanten (CPI). Dabei wird der Wert der verwendeten Konstante direkt mit in den Opcode verschlüsselt, soweit klar?
Wenn dieses Timing zu verändern sein sollte, mußt Du also überall im Quellcode die 23 durch den neuen Wert ersetzen, und die vielfachen davon dementsprechend auch. Du kannst aber für den Compiler eine Konstante mit dem Wert 23 festlegen (mit .equ), und im weiteren Code dann diese Konstante statt der direkten Werte verwenden. Und für vielfache davon verwendest Du eben (Faktor*Konstantenname). Der Compiler erzeugt daraus genau denselben Maschinencode - die Konstante existiert ja nur für den Compiler als Name, beim Kompilieren wird die Zahl draus.
Der Vorteil ist jetzt aber (neben der bessere Übersicht des Quellcodes, wenn man einen sinnigen Namen nimmt), daß man das ganze Timing an einer einzigen Stelle (im Quellcode) anpassen kann: direkt in der Zeile mit dem .equ .
(Wenn man sowas ähnliches beim Überlauf benötigt, kann man dec nicht zum dekrementieren verwenden, da dieses das C-Flag nicht beeinflußt. Aber man kann stattdessen eins subtrahieren (SUBI Register, 1))
Zur "Zeitkonstante": In Deinem Programm lädst Du desöfteren vielfache von 23 in Rechenregister (LDI), bzw vergleichst mit diesen Konstanten (CPI). Dabei wird der Wert der verwendeten Konstante direkt mit in den Opcode verschlüsselt, soweit klar?
Wenn dieses Timing zu verändern sein sollte, mußt Du also überall im Quellcode die 23 durch den neuen Wert ersetzen, und die vielfachen davon dementsprechend auch. Du kannst aber für den Compiler eine Konstante mit dem Wert 23 festlegen (mit .equ), und im weiteren Code dann diese Konstante statt der direkten Werte verwenden. Und für vielfache davon verwendest Du eben (Faktor*Konstantenname). Der Compiler erzeugt daraus genau denselben Maschinencode - die Konstante existiert ja nur für den Compiler als Name, beim Kompilieren wird die Zahl draus.
Der Vorteil ist jetzt aber (neben der bessere Übersicht des Quellcodes, wenn man einen sinnigen Namen nimmt), daß man das ganze Timing an einer einzigen Stelle (im Quellcode) anpassen kann: direkt in der Zeile mit dem .equ .