O programa funciona da seguinte forma: Fica piscando um led (RA0), e ao apertar o botao (RB5) é executado a função de interrupção, que acende um led (RA1) por 300ms e limpa a flag de interrupção externa, fazendo com que o programa saia da interrupção, mas nao é isso que esta aconcende. Ao apertar o Botao, o led (RA0) deixa de piscar e o led (RA1) acende, mas nao apaga mais, ou seja, o programa nao esta saindo da interrupção.
void interrupt (){
PORTA.RA1 = 1;
delay_ms(300);
PORTA.RA1 = 0;
INT0IF_bit = 0; // Limpa flag de interrupção externa;
}
void main() {
TRISA = 0x00;
PORTA = 0x00;
TRISB = 0xFF;
PORTB = 0x00;
GIE_bit = 1; //habilita interrupção global
RBIE_bit = 1; //habilita interrupção na porta RB
INTEDG0_bit = 1; //interrupção externa INT0 na borda de subida
PEIE_bit = 0; //desabilita interrupção por periferico
INT0IF_bit = 0;
TRISB = 0xFF;
PORTB = 0x00;
while(1){
PORTA.RA0 = 1;
Delay_ms(200);
PORTA.RA0 = 0;
Delay_ms(200);
}
}