9600 might be a bit fast for 4MHz. So an adjustment there could be in order.

Let work on the interrupt problem first.
The below code has a push button on PORTB.0. PORTB.0 is pulled LOW with an external 10K.
I have an LED on PORTD.2 for testing with a 470 to the zero rail.
Using SEROUT2 so a level converter (MAX232) is not needed at this time.

See if you can make this work and then we can play with the hardware serial and level converters.

Code:
'#####################
'16F877A
DEFINE OSC 20
'####################
@ __config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF &_BODEN_OFF
I	VAR	BYTE
ON INTERRUPT GOTO MACINT
INTCON = %10010000

LOOP:
HIGH PORTD.2
SEROUT2 PORTC.6,16468,["PUSH ME !!!",10,13]
PAUSE 100
GOTO LOOP

'############################################
DISABLE
MACINT:
IF PORTB.0 = 1 THEN
FOR I = 1 TO 10
HIGH PORTD.2
PAUSE 150
LOW PORTD.2
PAUSE 150
SEROUT2 PORTC.6,16468,["MACKRACKIT",10,13]
NEXT I
ENDIF
INTCON.1 = 0
RESUME
ENABLE
 'THE ABOVE WILL ALSO DEBOUNCE THE SWITCH
'#############################################