Algún alma caritativa...

Resulta que estoy montando un 18F452 con dos PCF8574, uno con LEDS y el otro con pulsadores. Pués bien, no sé que puede estar ocurriendo que me enciende leds aleatoriamente y no como le digo que haga. Para esto estoy utilizando la interrupción 0 como aviso de que se ha pulsado alguna tecla pero no termina de ir bien... ¿alguien que puede ayudarme? Gracias.
DEVICE=18F452
XTAL=20
@CONFIG_REQ
@__CONFIG CONFIG1H, OSCS_OFF_1 & HS_OSC_1
@__CONFIG CONFIG2L, PWRT_ON_2
@__CONFIG CONFIG2H, WDT_OFF_2 & WDTPS_128_2
@__CONFIG CONFIG4L, STVR_ON_4 & LVP_OFF_4 & DEBUG_OFF_4
DECLARE SCL PORTC.3
DECLARE SDA PORTC.4
DECLARE SLOW_BUS ON
TRISB = %00000001
SYMBOL GIE = INTCON.7 'Habilitar las interrupciones
SYMBOL INT0IE = INTCON.4
SYMBOL INT0IF = INTCON.1
SYMBOL INTEDG0=INTCON2.6
SYMBOL RBPU=INTCON2.7
INTEDG0=0
RBPU=0 'Habilita la resistencia interna para la interrupción.
DIM PCFBTN AS BYTE
DIM LEDFIN AS BYTE
ON_INTERRUPT GoTo Interrupcion
GoTo Inicio
Interrupcion:
GIE=0
INT0IE=0
HBUSIN %01000011,[PCFBTN]
DELAYMS 20
INT0IF=0
INT0IE=1
GIE=1
RETFIE
Inicio:
HBUSOUT %01000000,[%11111111] 'Borra los puertos del expansor
LEDFIN=%11111111
PORTB=0
INT0IE=1
GIE = 1
Bucle:
IF PCFBTN=%11111110 THEN LEDFIN=%00000001 ^ LEDFIN:GOsub Boton
IF PCFBTN=%11111101 THEN LEDFIN=%00000010 ^ LEDFIN:GOsub Boton
IF PCFBTN=%11111011 THEN LEDFIN=%00000100 ^ LEDFIN:GOsub Boton
IF PCFBTN=%11110111 THEN LEDFIN=%00001000 ^ LEDFIN:GOsub Boton
GOTO Bucle
Boton:
HBUSOUT %01000000,[LEDFIN]
DELAYMS 20
PCFBTN=0
RETURN
END