Zwischenfrage: was hast du nun f. die Stacks etc. definiert ?
ein Interrput braucht schon mal ca 64 Byte für sich allein, um Mensch zu sein.
Hat er die nicht, schreibt er den Softstack nieder ( result unpredictable)

Ich hab (z.B. allerdings in einem 20K Programm)
HW 128
SW 256
Frame 64
definiert.

Im Vertrauen: "Do..Loop" und "waitms" in einer Interrupt routine werden normalerweise mit öffentlichem Auspeitschen honoriert. Ich rate dringend zu einem re-design.
Is aber nicht bös' gemeint.