Hi James, Sorry I can't help with your first question straight away, but the second one you're on the right track. There is only one interrupt vector so you need to check each flag to see what needs servicing (might be more than one). Typically I use a bunch of if() statements in the ISR to check the various flags:- //-------------------------------- void interrupt IntRoutine(void){ // Timer1 overflow ------------ if(TMR1IF){ TMR1IF=0; TMR1H = TMR1H | 0xFC; TMR1L = TMR1L | 0x68; tick=1; } // TMR2IF --------------------- if(TMR2IF){ TMR2IF = 0; } // RB0/INT -------------------- if(INTF){ INTF = 0; } } Brent Brown Electronic Design Solutions 16 English Street Hamilton, New Zealand Ph/fax: +64 7 849 0069 Mobile/text: 025 334 069 eMail: brent.brown@clear.net.nz -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu