Ich würde auch das Konzept von Rabenauge anwenden.
Ich lass da immer im Timer Interrupt einen oder mehrere Variablen herunterzählen.
Wenn dann eine auf 0 ist wird ein Flag gesetzt das dann in der Hauptschleife abgefragt wird.
Im Hauptprogramm wird dann die Aktion ausgelöst und bei Bedarf das Flag wieder gelöscht und, für erneutes Ausführen, die Variable wieder neu gesetzt.
Dadurch wird das Hauptprogamm nur für die Timer Interupts unterbrochen und man kann in die Interrupt Routine mehrere Zeitintervalle einbauen.
Bei 100ms Timer Intervall ein Counter mit 10 ergibt eine Sekunde bei 100 wären es 10 Sekunden.