Hola tengo un pequeño problema con la interrupcion externa, me detecta los dos bordes o nose bien cual podria ser mi problema.
el codigo de la interrupcion es:
#int_RB
RB_isr(){
lcd_gotoxy(1,1);
printf(lcd_putc,"Contador %LU ",ContB++);
tecla=PUERTOB;
set_tris_b(0b00000000); // Inicializacion del Teclado
switch (tecla) {
case 0xEE : tecla=15; break;
case 0xED : tecla=9; break;
case 0xEB : tecla=8; break;
case 0xE7 : tecla=7; break;
case 0xDE : tecla=14; break;
case 0xDD : tecla=6; break;
case 0xDB : tecla=5; break;
case 0xD7 : tecla=4; break;
case 0xBE : tecla=13; break;
case 0xBD : tecla=3; break;
case 0xBB : tecla=2; break;
case 0xB7 : tecla=1; break;
case 0x7E : tecla=12; break;
case 0x7D : tecla=11; break;
case 0x7B : tecla=10; break;
case 0x77 : tecla=0; break;
default: tecla=16 ; break; }
if (tecla!=16){
lcd_gotoxy(1,2);
printf(lcd_putc,"Tecla: %u B: %u ",TECLA,PUERTOB);
BEEP=0;
}
set_tris_b(0b11110000); // Inicializacion del Teclado
}
El problema es que cada vez que presiono un boton se surge dos veces la interrpcion. Pero creo que eso no deberia de ser.
y la creacion de la interrpcion es:
void inicializar(){
lcd_init();
set_tris_b(0b11110000); // Inicializacion del Teclado
port_b_pullups(TRUE);
LSB=0b11111110;
PUERTOB=LSB;
setup_adc_ports(AN0|VSS_VDD); // Inicializacion del ADC
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel( 0 );
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_3(T3_INTERNAL|T3_DIV_BY_8);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_TIMER3);
enable_interrupts(INT_RB);
EXT_INT_EDGE(1,H_TO_L);
port_b_pullups(TRUE);
enable_interrupts(GLOBAL);
}