An interrupt is overkill for this, and not the typical way to handle the problem at all.
I'd use a counter to have your button checked every 10ms, and LED routine run every 500ms like this.
and you get to save the interrupt for when it's actually needed.
Code:
x var byte
direction var bit
timerbyte var byte
TRISA = 1
TRISC = 0
x = 1
loop:
PORTC = x
pause 10
timerbyte = timerbyte + 1
IF PORTA.3 = 0 then
IF direction = 0 THEN
direction = 1
ELSE
direction = 0
ENDIF ' direction
ENDIF ' button
IF timerbyte = 50 THEN timerbyte = 0 ' 500ms has passed if timerbyte = 0
IF timerbyte = 0 THEN
IF direction = 0 THEN
IF x = 8 THEN x = 1 <- You forgot that if x = 8 and then x = 1 you must go to loop or else x will never be 1 but MORE than one
x = x << 1
ELSE
IF x = 1 THEN x = 8 <- Same here
x = x >> 1
ENDIF ' direction
ENDIF ' timerbyte
goto loop