hola, no habia pasado por acá hace rato jeje ya entendí esto de las interrupciones, Al final el programa quedó así, para los que les interese:
El programa enciende tres leds un led por vez en una direccion y al recibir un cambio de 0 a 1 con un pulsador, invierte el sentido de recorrido.
#include <16F88.h>
#FUSES INTRC, NOWDT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO, MCLR, NOBROWNOUT, CCPB3 //para usar reloj externo
#use delay(clock=4000000)
#use fast_io(B)
#use fast_io(a)
static int i,inc,c,d;
#int_ext //esta es la interrupcion por el puerto RBO
invertir() //la interrupcion ejecuta la funcion invertir()
{
d=d+1;
if (d==1)
{
inc=-1;
c=2;
}
if (d==2)
{
inc=1;
c=0;
d=0;
}
}
byte const arreglo[3]={0b0010,0b0100,0b1000 };
void main()
{
set_tris_a(0x00); // a como salida
set_tris_b(0b0001); // b como salida y entrada en el pin 0
enable_interrupts(int_ext); // Habilito interrupción
ext_int_edge(l_to_h);
enable_interrupts(global);
inc=1; i=0;d=0;
while (TRUE) //Aqui comienza el alumbrado
{
i=c;
while (i<3)
{
output_b(arreglo);
i=i+inc;
delay_ms(1000);
}
}
}