Tienes un problema accesorio y es el de eliminar los rebotes. Como los interruptores son elementos mecanicos cuando los pulsamos no hacen un contacto inmediato y perfecto, sino que rebotan, fisicamente, hasta que definitivamente se estabilizan. Esto hace que en vez de haber un contacto limpio de uno a cero, o al reves depende de como tengas puesto el pulsador, haya muchos contactos breves hasta que mecanicamente se estabiliza.
Si usas un PIC es tan rapido que esos rebotes pueden generarte montones de interrupciones y el PIC terminara de procesarlas y todavia estará el boton rebotando, con lo que tendras una nueva interrupción.
Lo que tienes que hacer por tanto es eliminar los rebotes, conocido en ingles como debounce, si usas la funcion BUTTON ya tienes incorporado el debounce. tambien puedes hacerlo por soft, leyendo multiples feces el estado del pin hasta que este estable un tiempo minimo que se suele considerar de 50ms ya que cualquier pulsador de calidad media tiene un tiempo de estabilizacion inferior a eso.
Tambien puedes hacer el debounce por hard con un par de resistencias y un condensador ( pin de entrada del PIC a dos resistencias y un condensador, el condensador a masa, una resistencia a positivo y la segunda resistencia al pulsador que debera hacer corto a masa ( la entrada a la que lo conectes debe ser de tipo schmit trigger ). O bien puedes usar un par de puertas configuradas como flip flop pero entonces en vez de un pulsador necesitaras un conmutador.
Mi opcion suele ser la de usar las resistencias y el condensador, es barato y funciona perfectamente. Las opciones por soft si bien son mas baratas consumen muchos recursos del PIC.