Hola amigos tengo este codigo que requiero que interrumpa por rb0, pero no logro hacerla que suceda cuando cambie de estado, si no que efectua toda la rutina luego la hace. En caso de que ponga las condiciones en la ext_isr, no logro salir de ella. Alguien me ayuda, o le ha sucedido. Gracias
Dejo el codigo
#include <18F4550.h>
#use delay(internal=8M)
#fuses PLL1,INTEC_IO,NOIESO,NOPUT,NOBROWNOUT,NOWDT,NOMCLR
#define verde1 31768
#define ambar1 31769
#define rojo1 31770
#define verde2 31755
#define ambar2 31756
#define rojo2 31757
#define peaton1 31771
#define peaton2 31772
#define led 31773
#use fast_io(B)
int cont,countimer,flag,cambio,cambio1;
#int_ext
void ext_isr(){
flag=1;
}
#int_timer0
void interrup_timer0(void){
SET_TIMER0(131);
countimer++;
if(countimer==125){ // 16 equivale a un segundo**
output_toggle(led);
countimer=0;
}
}
void tiempo(){ //Conteo de 10 segundos
for(cont=0;cont<150;cont++){
delay_ms(100);
if(cont == 150){
cont=0;}
}
}
void tiempo1(){ //Conteo de 5 segundos
for(cont=0;cont<50;cont++){
delay_ms(100);
if(cont == 50){
cont=0;}
}
}
void norte_sur(){
cambio=1;
output_high(verde1);
output_high(rojo2);
output_low(ambar2);
tiempo();
output_low(verde1);
output_high(ambar1);
tiempo1();
output_low(ambar1);
delay_ms(500);
output_high(ambar1);
delay_ms(500);
output_low(ambar1);
delay_ms(500);
output_high(ambar1);
delay_ms(500);
output_low(ambar1);
output_low(rojo2);
}
void este_oeste(){
cambio1=1;
output_high(verde2);
output_high(rojo1);
tiempo();
output_low(verde2);
output_high(ambar2);
tiempo1();
output_low(ambar2);
delay_ms(500);
output_high(ambar2);
delay_ms(500);
output_low(ambar2);
delay_ms(500);
output_high(ambar2);
delay_ms(500);
output_low(ambar2);
output_low(rojo1);
}
void main(){
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_OFF);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_128|RTCC_8_BIT );
ENABLE_INTERRUPTS(INT_EXT);
ENABLE_INTERRUPTS(INT_TIMER0);
EXT_INT_EDGE(L_TO_H);
ENABLE_INTERRUPTS(GLOBAL);
SET_TIMER0(131);
set_tris_B(0x01);
while(true){
norte_sur();
este_oeste();
if(flag==1 && cambio== 1){
output_high(peaton1);
output_high(peaton2);
tiempo1();
output_low(peaton1);
output_low(peaton2);
flag,cambio,cambio1=0;
}
}
}