Keep cool, so schnell geht das nicht.
Ich mach das so (sprachunabhängig erstma)

Eine Table von n Entries
Jeder Table-Entry beinhaltet:
Byte Flag 0 = inaktiv 1=aktiv 3=call
Word Counter wieviel Ticks kann auch eine byte sein, wenn das reicht
Word Vector Icall-Label
(addit. parameter) die müssen aber nicht sein

Einen Entry zu erstellen/aktivieren:
durch die Entries durchsteppen
wenn flag = 0, dann:

Counter anzahl Ticks setzen
Vector Sprungadresse setzen
Flag auf 1

Tick-ISR:
durch die Entries durchsteppen
wenn flag = 1, dann:
Counter - 1
Wenn Counter == 0 , Flag = 3 (callable)
next entry

Hauptschleife, jedesmal (kann man optimieren) durch die Entries durchsteppen
Wenn Flag = 3 :
Flag = 0 (deaktivieren)
ICALL Vector
next Entry

Die Trennung ISR / Hauptschleife, damit die aufgerufene Funktion nicht in der ISR läuft.

Im Detail noch u.a. davon abhängig, ob "erledigte" Entries automatsch reaktiviert werden sollen