/* Esta es mas o menos la funcion de atender la IT externa, nota como esta se
encarga solamente de poner una bandera en '1' y deshabilita esta misma IT para
luego retornar. Cuando sales de la ISR GLOBAL, todas las IT quedan nuevamente
habilitadas, es tarea del programa principal atender a la tecla. Es decir: eliminar
el rebote, leer puertos y demas cosas que hay que hacer cuando te aprietan una tecla
no debe ser tarea de la funcion de atencion de la IT porque la idea de un buen
diegno utilizando IT es que las rutinas de IT sean cortas y que solamente cambien
algunos parametros o banderas para que otra parte del programa se haga cargo de
procesar esas informaciones.
Otra razon que obliga a que las subrutinas de atencion a IT sean cortas es porque
en casos como este de la tecla debes eliminar rebotes y lo mejor para hacerlo, desde
mi punto de vista, es emplear un Timer y ese segnor tambien trabaja con IT. Entonces
volvemos al asunto de dejar en manos del programa principal la atencion de las
tareas que hay que hacer cuando se apriete una tecla
*/
#INT_EXT
void int_ext_isr(void)
{
disable_interrupts(INT_EXT); //deshabilitar la IT externa
FlagTecla = 1; //marcar la tecla como oprimida
}
/*
Luego en el programa principal es donde habilitas nuevamente la IT, una vez que
hayas atendido la tecla, para que cuando vuelvan a apretar la tecla se pueda
procesar nuevamente
*/
void main(void)
{
... //Codigo que no atiende la tecla
if(FlagTecla and Paso_el_Rebote) //Preguntar por la tecla y si ya paso el tiempo del rebote
{
... //Codigo para procesar la tecla
FlagTecla = 0; //Poner las banderas en el estado de tecla no apretada y rebote no procesado
Paso_el_Robote = 0;
enable_interrupts(INT_EXT); //Ya se puede procesar otra tecla
}
... //Codigo que no atiende la tecla
}