Vous êtes sur la page 1sur 4

INTERRUPCIONES

Interrupciones
Introduccin
En los 16F877 hay 14 fuentes posibles de interrupcin. Cuando se da un evento en un determinado mdulo, el flag asociado se pone a 1 y, si las mscaras global (GIE) y particular (y en algunos casos la de perifricos (PEIE)) estn habilitadas, se acepta la interrupcin. En ese caso, el hardware interno del PIC ejecuta varias acciones.

1. Se pone GEIE a cero para no aceptar otra interrupcin. 2. Se almacena la direccin de retorno en la pila. 3. El contador de programa se carga con la direccin 0x0004 (que es la direccin comn para todas las interrupci ones).

El programador debe asegurarse de que el cdigo se encarga de identificar la fuente de la interrupcin, guardar y recuperar el contexto existente antes de producirse la interrupcin y poner a cero el flag asociado a la misma para permitir posteriores identificaciones. Estas tareas quedan enormemente simplificadas usando directivas y funciones del lenguaje C del compilador de CCS.

Interrupciones
Las directivas #INT_xxxx
Indican que la funcin que aparece a continuacin corresponde al tratamiento de una interrupcin (no tiene ni necesita parmetros). En el caso de los PIC 16F877 hay 14 posibles directivas. #INT_RTCC #INT_RB #INT_EXT #INT_AD #INT_TBE #INT_RDA #INT_TIMER1 #INT_TIMER2 #INT_CCP1 #INT_CCP2 #INT_SSP #INT_PSP #INT_BUSCOL #INT_EEPROM Desbordamiento de TMR0. (T0IF) Cambio en los pines RB<4:7>. (RBIF) Flanco en pin RB0. (INTF) Fin de conversin A/D. (ADIF) Buffer de transmisin USART vaco. (TXIF) Dato recibido en USART. (RCIF) Desbordamiento de TMR1. (TMR1IF) Desbordamiento de TMR2. (TMR2IF) Captura / Comparacin en mdulo CCP1. (CCP1IF) Captura / Comparacin en mdulo CCP2. (CCP2IF) Envo / Recepcin de dato serie sncrono. (SSPIF) Dato entrante en puerto esclavo paralelo. (PSPIF) Colisin de bus I2C. (BCLIF) Escritura completa en EEPROM de datos. (EEIF)

Interrupciones
La directiva #INT_DEFAULT Indica que la funcin que viene a continuacin ser llamada si se dispara una interrupcin y ninguno de los flags est activo. La directiva #INT_GLOBAL Indica que la funcin que va a continuacin sustituye todas las acciones que inserta el compilador al aceptarse una interrupcin. Slo se ejecuta lo que vaya en dicha funcin.

Ventajas de usar las directivas de interrupciones


El compilador genera el cdigo necesario para saltar a la funcin que va tras esta directiva en el momento de la interrupcin. Tambin genera cdigo para salvar al principio y restituir al final el contexto, y borrar el flag que se activ con la interrupcin. El programador debe seguir encargndose de habilitar las interrupciones.

Interrupciones
Funciones para gestin de interrupciones
El compilador C de CCS incluye algunas funciones integradas destinadas a manejar interrupciones. enable_interrupts (nivel); nivel es una constante definida en 16F877.h y genera el cdigo necesario para activar las mscaras necesarias. Etiquetas de nivel definidas para el 16F877: GLOBAL INT_RTCC INT_RB INT_EXT INT_AD INT_TBE INT_RDA INT_TIMER1 INT_TIMER2 INT_CCP1 INT_CCP2 INT_SSP INT_PSP INT_BUSCOL INT_EEPROM La mscara global (la que hace GIE=1) debe activarse de manera independiente. Las otras slo activan la mscara particular y el PEIE si es necesario. disable_interrupts (nivel); Hace la accin contraria a la funcin anterior, poniendo a 0 las mscaras relacionadas con la interrupcin indicada.

Interrupciones
Existe tambin una funcin adicional destinada a configurar el flanco activo que genera la interrupcin externa (en RB0). ext_int_edge (H_TO_L); Selecciona flanco de bajada para activar el flag INTF. ext_int_edge (L_TO_H); Selecciona flanco de subida para activar el flag INTF.
#INT_EXT ext_isr() { ......}

enable_interrupts (INT_EXT); // Activa mscara INTE ext_int_edge (H_TO_L); // Flag INTF si flanco de bajada. enable_interrupts (GLOBAL); // Habilita mscara global de int. /* Si entra una interrupcin por flanco de bajada en RB0, se ir a la funcin que aparece tras la directiva #INT_EXT */ disable_interrupts (INT_EXT); // Desactiva interrupciones en RB0. disable_interrupts (GLOBAL); // Desactiva todas las interrupciones.

Vous aimerez peut-être aussi