Hi,
Several things.
1) There is no "main loop" in the program so the execution falls thru into the interrtupt handler and then it hits the @INT RETURN macro which makes it return to what?

2) You have the display subroutine located in the middle of your code. When you're using subroutines you need to make sure that the program can't "reach" them without actually being called by a GOSUB. In your program the display subroutine gets exectued one time when called by the GOSUB (which is all OK) but then it gets executed again after you've loaded the CCP1 registers and since there's a RETURN at the end of the subroutine it jumps to somewhere it shouldn't.

3) You have the interrupt handler declared as ASM even though you're using PBP statements in the handler. I've said this to you in one of your other threads covering the same topic: Do NOT do that if you don't know what you're doing. If you don't understand WHY you can either read up on it here on the forum but if you don't care about the details simply follow the rules given: If the handler is in PBP then declare it as type PBP - not ASM.

/Henrik.