El problema no esque la variable no cambie de valor, esque el codigo al llegar al final vuelve a empezar y pone la variable a cero. Lo tienes que mantener con un bucle. algo asi.
#include <16HV616.h>
#FUSES IOSC4, NOWDT, INTRC, NOMCLR, NOBROWNOUT, PUT
#use delay(internal=4000000)
//IOSC4
#use fast_io(A)
int direccion=0;
#byte PORTA = 0x05
#bit A0 = 0x05.0//output para abrir
#bit A1 = 0x05.1//output para cerrar
#bit A2 = 0x05.2
#bit A3 = 0x05.3//input para lectura del selector pin0
#bit A4 = 0x05.4//input para lectura del selector pin1
#bit A5 = 0x05.5
#INT_EXT
void extinterrupt()
{
int x;
x = input(PIN_A2);
if (x==0){
output_bit(PIN_A0,0);
delay_ms(1000);
direccion=1;
}
}
void main ()
{
set_tris_A( 0b111100 );
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
while(1) //Bucle para ejecutar todo el rato el case, sale en la interrupcion.
{
switch (direccion){
case 0:
output_high(PIN_A0);
output_low(PIN_A1);
break;
case 1:
output_low(PIN_A0);
output_high(PIN_A1);
break;
}
}
}