Oh ja, das Problem kenne ich nur zu gut. Sobald man versucht, mehrere Funktionen in einem PIC unterzubringen, wird er extrem zickig. Vor allem muß man auf sehr kurze IRQ-Handler achten, die IRQ-Flags müssen genau richtig abgefragt werden, und selbst dann ist es noch nicht sicher das es läuft.
Genau aus diesem Grund habe ich damals mein DevelOS geschrieben. Das implementiert eine Software-Pipeline, sozusagen einen FIFO für Funktionsaufrufe. Dadurch muß der IRQ-Handler selbst so gut wie nichts machen, sondern nur jeweils ein Event in die Pipeline setzen. Die Events werden dann im Main-Programm asynchron von den Interrupts verarbeitet. Auf die Art habe ich schon ein LCD, Keyboard, UART und AD-Wandler gleichzeitig zum laufen bekommen.