Zu Deinen Fragen mit den Timer-Interrupts:

Falls während eines Interrupts ein weiterer auftritt, wird dieser nach Beendigung des gerade laufenden ausgeführt. Daher sollten die Interrupt-Routinen auch so kurz wie möglich gehalten werden. Mit dem Aufruf einer Interrupt-Routine werden die Interrupt-Aufrufe gesperrt und mit Beendigung (ASM-Befehl RETI) wieder freigegeben. Dann kann ein anstehender weiterer Interrupt ausgeführt werden.
Es wäre zwar möglich, in einer Interrupt-Routine die Interrupts explicit wieder freizugeben, diese würde aber zu verschachtelten Interrupt-Aufrufen führen mit einem entsprechenden (nicht) abschätzbaren Stack-Bedarf und ist daher nicht ratsam.