Die Interrupt Service Routine isr_**** schlägt alle 250µs zu.
teiler zählt immer von 0 bis 3 und bewirkt dadurch im Endeffekt eine softwaremässige Verviefachung dieser Zeit auf 4*250µs = 1ms.
Das gleiche für tsek mit einem Faktor 1000.
Dadurch wird P1 = ~P1 ; nur 1x pro Sekunde aufgerufen.
~ steht für 'not', d.h. alle Bits an dem Port werden umgedreht, wodurch die LED blinkt im 1s - Takt, also mit 1/2 Hz.
tsek und teiler sind übrigens keine lokalen Variablen, sondern mindestens im ganzen Modul bekannt.
Initialisieren kann man die auch so:
char teiler = 0;
int tsek = 0;
dadurch spart man etwas Programmcode. Dann müssen auf der rechten Seite der Initialisierung allerdings Konstanten stehen.
Lesezeichen