si RB1 = 1, mas abajo llegas a donde dice:
while(RB1); // mientras el RB1=1 bucle infinito
Entonces mientras se mantenga en 1 entra a un lazo infinito y nunca sales de la interrupcion
Recuedar que cuando entras a una rutina de interrupcion el bit GIE se hace cero deshabilitando todas las interrupciones posteriores que podrian suceder
He alli tu problema
Saludos
ohhh super, soy muy nuevo en esto, muchas gracias, pero entonces como soluciono el problema? quiero que cuanto RB0 halla un 1 se dispare el timer y comience un conteo para activar una alarma
#include <16F887.h>
#FUSES NOWDT, XT, NOPUT
#use delay(clock=4000000)//Frecuencia de reloj
#use fast_io(A)
#bit RB0=0x06.0 //Identificadores de bits
#bit RB7=0x06.7
#bit RB1=0x06.1
int cont=0, seg=0;
short ban_1seg=0;
void temporizar();
//-------------- Interrupción por desbordamiento ------------------------------
#int_TIMER1
void temp1s(void){ //
delay_cycles(2); //
set_timer1(3041); // 62.500 * 8 (prescaler) = 0,5 seg
cont++; //
if(cont == 2){ // 0,5 seg x 10 son 5 segundos
ban_1seg = 1; cont = 0; //
} //
} //
#int_EXT
void EXT_isr(void){
if (RB1){ // Si el interruptor de desactivación está abierto
RB7=1; // activa la alarma conectada en RB7
while(RB1); // mientras el RB1=1 bucle infinito
RB7=0; // cuando RB1=0, se desacactiva la alarma
}
}
void main(){
set_tris_b(0b00000011); // configura la puerta B
RB7=0; // inicializo RB7
setup_timer_1 (t1_internal | t1_div_by_8);
set_timer1 (3041); // Recarga del tmr1
disable_interrupts(int_timer1); // Deshabilita interrupcion timer1
enable_interrupts(GLOBAL); // habilito interrupción global
enable_interrupts(INT_EXT); // habilito interrupción externa
while(true); // Bucle infinito hasta interrupción
if(ban_1seg){ //
ban_1seg = 0; temporizar(); //
} //
}
//--------------- Temporizar --------------------------------------------------
void temporizar(){ //
seg++; // Contando segundos
if(seg == 10){ // Si ya van 10 seg
seg=0; //
output_high(pin_b6); //
disable_interrupts(int_timer1); // Deshabilita interrupcion timer1
delay_ms(500);
output_low(pin_b6);
}
}