Motion is right. I agree with motion.
I give here a small difference (it should be noted) that as coming to an interrupts, you have to save WREG, STATUS, PCL, PCLATH, because the current ones may be overwrite. And you will lost the current values when you get back your program at where you leave to interrupts.
But with polling, you don't have to do this, because you are working with it. And you know the current values.
It's important to note that, perhaps many interrupts occur at the same time, and you have to choose which one is implemented first. Yes, it's easy but someone may forget it. And it will run interrupts again immediately after the first interrupt, after RETFIE instruction.
We should end(or begin, in somecase) the interrupt subroutine with clearing relative flag. Don't clear flags at the begin or the end of the whole interrupt service routine.
I prefer using interrupts in small applications because it makes the programs clear. But the fact that, real world applications usually work at lower speed than milliseconds. Therefore, we may use polling instead. Everything is oki, as you understand about interrupts and polling, you can use it for your own applications, patrick. Don't confuse with this stuff. Just make your program run first.