INTERRUPCIONES
Las interrupciones permiten a cualquier suceso interior o exterior interrumpir la ejecución del programa principal en cualquier momento. En el momento de producirse la interrupción, el pic ejecuta un salto, a la rutina de atención a la interrupción, previamente definida por el programador, donde se atenderá a la demanda de la interrupción.
El microcontrolador pic 16f87x posee las siguientes fuentes de interrupción:
- Interrupción externa por RB0/INT.
- Interrupción por cambio de nivel lógico en RB4 - RB7.
- Interrupción por desborde del timer 0.
- Interrupción del transmisor del modulo USART.
- Interrupción del receptor del modulo USART.
- Interrupción del modulo CPP.
- Interrupción del EEPROM.
INTERRUPCIONES EN C
En el compilador C, la directiva habitual en el manejo de las interrupciones es: #INT_xxxx
ejm: #INT_USB
Las posibles directivas para la familia 16F87x son las siguientes:
#INT_AD -------------- Conversión AD completa
#INT_BUSCOL --------------- Colisión de bus
#INT_CPP1 --------------- Unidad de captura 1,comparación y PWM
#INT_CPP2 --------------- Unidad de captura 1,comparación y PWM
#INT_EEPROM -------------- Escritura EEPROM finalizada
#INT_EXT --------------- Interrupción externa RB0
#INT_RB --------------- Cambio de estado en B4-B7
#INT_RDA ---------------- RS232 dato recibido
...
Existen directivas mas que pueden ser usadas, tanto para esta familia como para otras. Para mayor información les sugiero revisar el datasheet del microcontrolador
INTERRUPCION EXTERNA POR RB0
La directiva usada es #INT_EXT y se debe acompañar de las siguientes funciones.
EXT_INT_EDGE(H_TO_L); ----- Cambio de estado de alto a bajo
EXT_INT_EDGE(L_TO_H); ----- Cambio de estado de bajo a alto
ENABLE_INTERRUPTS (INT_EXT); ------ Habilita la interrupción RB0
ENABLE_INTERRUPTS (GLOBAL); ------ Habilita la interrupción de forma global.
INTERRUPCION EXTERNA POR CAMBIO DE ESTADO DE RB4-RB7
La directiva usada es #INT_RB y se debe acompañar de las siguientes funciones.
EXT_INT_EDGE(H_TO_L); ----- Cambio de estado de alto a bajo
EXT_INT_EDGE(L_TO_H); ----- Cambio de estado de bajo a alto
ENABLE_INTERRUPTS (INT_RB); ------ Habilita la interrupción
ENABLE_INTERRUPTS (GLOBAL); ------ Habilita la interrupción de forma global.
Les dejo un tutorial, en donde podrán observar paso a paso como programar el PIC haciendo uso de estas directivas.
DESCARGA EL PROGRAMA Y LA SIMULACION EN
La directiva usada es #INT_EXT y se debe acompañar de las siguientes funciones.
EXT_INT_EDGE(H_TO_L); ----- Cambio de estado de alto a bajo
EXT_INT_EDGE(L_TO_H); ----- Cambio de estado de bajo a alto
ENABLE_INTERRUPTS (INT_EXT); ------ Habilita la interrupción RB0
ENABLE_INTERRUPTS (GLOBAL); ------ Habilita la interrupción de forma global.
INTERRUPCION EXTERNA POR CAMBIO DE ESTADO DE RB4-RB7
La directiva usada es #INT_RB y se debe acompañar de las siguientes funciones.
EXT_INT_EDGE(H_TO_L); ----- Cambio de estado de alto a bajo
EXT_INT_EDGE(L_TO_H); ----- Cambio de estado de bajo a alto
ENABLE_INTERRUPTS (INT_RB); ------ Habilita la interrupción
ENABLE_INTERRUPTS (GLOBAL); ------ Habilita la interrupción de forma global.
Les dejo un tutorial, en donde podrán observar paso a paso como programar el PIC haciendo uso de estas directivas.
DESCARGA EL PROGRAMA Y LA SIMULACION EN
Excelente! Me ha servido de mucha ayuda.
ResponderEliminarHola, porque no me funciona con el pic 18f4550?
ResponderEliminarHola, como puedo hacer interrupciones con el teclado matricial de 4x4
ResponderEliminarEsta muy bueno el video! gracias. Ya intente modificar el codigo para que con la interrupción del pin rb4 me realice una tarea, y con la del rb5 otra , pero, me marca error, o me ignora la segunda interrupcion que declaro , Me podrían ayudar por favor con el código ?
ResponderEliminarExcelente, lo hice con el 16f876A, funciona igual
ResponderEliminarCómo puedo pausar un contador por medio de la interrupción #int_rda, es decir, el va contando y con una letra yo lo pauso y si oprimo otra, sigue contando en la variable en que quedó.
ResponderEliminarMuchas gracias por todo aporte sigue adelante exitos
ResponderEliminarMuchas gracias por todo aporte sigue adelante exitos
ResponderEliminar