Una de las características más importantes de los microcontroladores, es la posibilidad de generar interrupciones. Una interrupción es un evento que hace que el microcontrolador detenga el proceso que se encuentra ejecutando, para atender dicho evento, una vez realizado el respectivo procedimiento, el microcontolador regresa a seguir haciendo la tarea interrumpida.
El microcontrolador trabaja dos tipos de interrupciones, las interrupciones por periféricos y las externas.
INTERRUPCIONES EXTERNAS:
Son aquellas en las cuales una señal externa actúa sobre una entrada del microcontrolador ocasionando la respectiva interrupción.
Las fuentes de interrupción externas del 18F4550 son:
- Interrupción externa 0: RB0
- Interrupción externa 1: RB1
- Interrupción externa 2: RB2
- Interrupción por cambio en el PORTB (RB4, RB5, RB6, RB7)
- Interrupción del Temporizador 0: TMRO
INTERRUPCIONES POR PERIFÉRICOS:
Para este tipo de interrupción no se requiere de una señal externa para generarlas, estas interrupciones se generan por acciones de los módulos internos del microcontrolador, las fuentes de interrupción internas del 18F4550 son:
- Interrupción del SPP
- Interrupción del A/D
- Interrupción de Rx EUSART
- Interrupción de Tx EUSART
- Interrupción del MSSP
- Interrupción del CCP1
- Interrupción del CCP2
- Interrupción del Temporizador 1
- Interrupción del Temporizador 2
- Interrupción del Temporizador 3
- Interrupción de fallo del oscilador
- Interrupción del comparador
- Interrupción del USB
- Interrupción de escritura EEPROM
- Interrupción colisión del Bus MSSP
- Interrupción de detección de anomalías en VDD
El manejo de las interrupciones en c es bastante sencillo, simplemente se debe establecer una función para cada interrupción, estas funciones van precedidas de una directiva que le indica al compilador, que la función que se encuentra inmediatamente después de la directiva, es la que se ejecuta al momento de generarse la interrupción. Las directivas utilizadas para las interrupciones del 18F4550 se muestran en la tabla 4.
Tabla 4: Directivas para el manejo de interrupciones.
DIRECTIVA
|
DESCRIPCIÓN
|
INT_EXT
|
Interrupción externa por RB0
|
INT_EXT1
|
Interrupción externa por RB1
|
INT_EXT2
|
Interrupción externa por RB2
|
INT_RB
|
Interrupción externa por el cambio de estado de los bit RB4 - RB7 del puerto B
|
INT_RTCC
|
Interrupción por desbordamiento del TIMER0
|
INT_PSP
|
Interrupción del canal de transmisión de datos paralelo
|
INT_AD
|
Interrupción por fin de conversión del modulo A/D
|
INT_RDA
|
Interrupción por recepción EUSART
|
INT_TBE
|
Interrupción por trasmisión EUSART
|
INT_SSP
|
Interrupción por actividad en el modulo SPI o I2C
|
INT_CCP1
|
Interrupción por modulo 1 de captura, comparación y PWM
|
INT_CCP2
|
Interrupción por modulo 2 de captura, comparación y PWM
|
INT_TIMER1
|
Interrupción por el temporizador 1
|
INT_TIMER2
|
Interrupción por el temporizador 2
|
INT_TIMER3
|
Interrupción por el temporizador 3
|
INT_OSCF
|
Interrupción por fallo en el oscilador
|
INT_COMP
|
Interrupción por el comparador
|
INT_USB
|
Interrupción por actividad en el puerto USB
|
INT_EEPROM
|
Interrupción por fin de escritura en la EEPROM
|
INT_BUSCOL
|
Interrupción por colisión en el bus SPI
|
INT_LVD
|
Interrupción por bajo voltaje
|
Estas directivas también son utilizadas para utilizar las funciones de habilitación o deshabilitación.
ENABLE_INTERRUPTS( Directiva );
DISABLE_INTERRUPTS( Directiva );
PRIORIDAD EN LAS INTERRUPCIONES:
El sistema de interrupciones de los micros de gama alta posee dos niveles de prioridad, alta y baja. La diferencia entre una prioridad y otra, es que las interrupciones de alta prioridad pueden interrumpir una de baja prioridad.
Todas las interrupciones pueden ser programadas en cualquiera de las dos prioridades, excepto la interrupción externa por RB0, esta siempre tendrá alta prioridad.
En el compilador CCS se modifican las directivas, de tal forma que se pueda incluir la palabra HIGH, para indicar cuáles son las interrupciones que tendrán alta prioridad, aquellas directivas las cuales no tengan definida la prioridad se comportan como baja prioridad, también se deben activar el sistema de prioridad.
#DEVICE HIGH_INTS=TRUE
#INT_XXXXX HIGH
No hay comentarios:
Publicar un comentario