Ein Codeschnipsel zur Einstellung des Timer1 auf CTC-Mode.
Der gewünschten Zeitabstand wird einfach in nsec ins Programm eingetragen. Das war es auch schon.
Der Compiler errechnet daraus den Vorteiler und den Einstellwert für den nachgeschalteten 16-bit-Teiler.
Ein nachfolgender Software-Timer verwendet als Zeitbasis den Hardware-Timer und erweitert den möglichen Zeitbereich. Die Zeitvorgabe erfolgt in msec. Danach wird der CTC-Timer und der Interrupt freigegeben.
Das Beispiel ist eher sinnfrei und soll nur die Verwendung zeigen. Auch viele Timer sind kein Problem. Man legt eine Variable an, und fügt diese in die IRQ-Routine ein:
If Timer_x => Nicht_abgelaufen Then Decr Timer_x
If Timer_y => Nicht_abgelaufen Then Decr Timer_y
If Timer_z => Nicht_abgelaufen Then Decr Timer_z
Irgendwo im Hauptprogramm ...
Timer aufziehen -> Timer_x= 123
Timer prüfen -> If Timer_x = Abgelaufen then ...
Gruß Floxi
Der gewünschten Zeitabstand wird einfach in nsec ins Programm eingetragen. Das war es auch schon.
Der Compiler errechnet daraus den Vorteiler und den Einstellwert für den nachgeschalteten 16-bit-Teiler.
Ein nachfolgender Software-Timer verwendet als Zeitbasis den Hardware-Timer und erweitert den möglichen Zeitbereich. Die Zeitvorgabe erfolgt in msec. Danach wird der CTC-Timer und der Interrupt freigegeben.
Das Beispiel ist eher sinnfrei und soll nur die Verwendung zeigen. Auch viele Timer sind kein Problem. Man legt eine Variable an, und fügt diese in die IRQ-Routine ein:
If Timer_x => Nicht_abgelaufen Then Decr Timer_x
If Timer_y => Nicht_abgelaufen Then Decr Timer_y
If Timer_z => Nicht_abgelaufen Then Decr Timer_z
Irgendwo im Hauptprogramm ...
Timer aufziehen -> Timer_x= 123
Timer prüfen -> If Timer_x = Abgelaufen then ...
Gruß Floxi