Aus dir machen wir schon noch nen Softwareking!

Also nochmal:

Wir betreiben jetzt 3 LEDs.
LED1: 25ms ein...25ms aus.
LED2: 50ms ein...50ms aus.
LED3: 75ms ein...75ms aus.


Also machen wir uns drei Variablen. Für jede LED eine:
LED1: irq_25ms
LED2: irq_50ms
LED3: irq_75ms



Der kleinste gemeinsame Teiler ist 25ms . Also stellen wir den TIMER0 zB so ein, dass er alle 25ms eine Interruptrutine ausführt.

START der Interruptrutine {
WENN irq_25ms GLEICH 25ms IST, DANN: Setze irq_25ms auf 0 Zurück ANSONSTEN zähle irq_25ms um 25ms hoch.
WENN irq_50ms GLEICH 50ms IST, DANN: Setze irq_50ms auf 0 Zurück ANSONSTEN zähle irq_50ms um 25ms hoch.
WENN irq_75ms GLEICH 75ms IST, DANN: Setze irq_70ms auf 0 Zurück ANSONSTEN zähle irq_75ms um 25ms hoch.
}ENDE

Das war jetzt die Funktion, die der Timer alle 25ms ausführt!
In dieser Funktion, welche alle 25ms ausgeführt wird, wird jede Variable um 25ms hochgezählt. Wenn sie ihr maximum erreicht haben, setzt man wie wieder auf 0! Sie werden NUR von der Timer-Routine beeinflusst!!!




Im Hauptprogramm untersucht man jetzt diese Variablen:

WENN irq_25ms GLEICH 25ms IST, DANN verändere LED1
WENN irq_50ms GLEICH 50ms IST, DANN verändere LED2
WENN irq_75ms GLEICH 75ms IST, DANN verändere LED3