n
n
kVA
kVA
Task-Verwaltung und Interrupts
5
f
f
Interrupts bei MOVIDRIVE
i
i
P
Hz
Hz
P
5.6.4
Timer0-Interrupt
Beispiel
48
Die Interrupt-Routine wird ein Mal vollständig durchlaufen, wenn der Timer abgelaufen
(=0) ist. Nach einem Durchlauf wird ein Assembler-Befehl von Task1 bearbeitet, bevor
geprüft wird, ob der Timer = 0 ist. Ist die Bedingung erfüllt, wird wieder in die Interrupt-
Routine verzweigt.
Um in äquidistanten Abständen einen Timer0-Interrupt auszulösen, kann in Variable
H485 T0_Reload die Zykluszeit eingestellt werden, mit der der Timer0 beim Eintritt in
die Interrupt-Routine automatisch neu geladen wird.
HINWEIS
Da der Timer0 abwärts zählt, wäre die Interrupt-Bedingung ständig erfüllt, wenn
T0_Relaod = 0 ist und der Wert des Timers in der Interrupt-Routine nicht verändert
wird.
Damit ergeben sich folgende Einsatzmöglichkeiten:
•
Soll mit dem Timer0-Interrupt ein Programmteil in äquidistanten Abständen
bearbeitet werden, muss der Timer0 z. B. mit T0_Reload neu geladen werden.
•
Soll mit dem Timer0-Interrupt ein Programmteil eine definierte Zeit nach dem Start
von IPOS einmalig durchlaufen werden, muss der Timer0 im Interrupt auf -1 gesetzt
werden.
fnTimerInterrupt()
{
H0 = H0 +1;
T0_Reload = 10000; //Timer 0 automatisch neu laden mit 10s
_SetInterrupt( SI_TIMER0,fnTimerInterrupt);
}
main()
{
while (1) {H1 = H1 +1;}
}
H0 wird alle 10 s um 1 erhöht.
®
A und B
// Interrupt aktivieren
Handbuch – IPOSplus®