>Have you tried making the interrupt service routine immediately turn on an >LED, not even save any registers, to see if the interrupt is really getting >called? Solved it! Your suggestion put me on the right track. What was happening was - the interrupt happened only once and then never again. I'd correctly implemented the context saving bits of code - but I'd forgotten to explicitly clear PCLATH,3 after saving PCLATH to a temp_lath register. So, if PCLATH,3 was set and an interrupt occured (as it would when I was looping around in page 1), then the first GOTO in the interrupt routine would jump to page 1 (shortly before the loop as it happened!) and since the RETFIE never happened, the interrupt never happens again, and it just loops indefinitely. Easy in hindsight isn't it!!! -- Jim