Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MICROCONTROLADORES PIC
INTERRUPCION
Una interrupcin es un evento que hace que el
microcontrolador deje de ejecutar la tarea que est
realizando para atender dicho acontecimiento y luego
regrese y continue la tarea que estaba realizando antes
de que se presentara la interrupcin.
si las interrupciones estn habilitadas cada vez que una
de estos acontecimientos se presente el pic dejar de
ejecutar el programa para ir a atender la interrupcin y al
termino de la misma continuar ejecutando el programa
donde lo haba dejado.
Algunas Interrupciones
Interrupcin externa RB0/INT
Interrupcin por cambio lgico en el puerto B (pines RB7
a RB4)
Interrupcin por desborde del timer 0 (TMR0)
Interrupcin por desborde del timer 1 (TMR1)
Interrupcin por comparacin exitosa exitosa en TMR2
Interrupcin del comparador
Interrupcin del transmisor del USART
Interrupcin del receptor del USART
Interrupcin del mdulo CCP
Interrupcin del EEPROM
VECTOR DE INTERRUPCIN
En el programa tambien es necesario indicar hacia que
rutina debe saltar el programa al presentarse la
interrupcin.
El vector de interrupcin est en la direccin 0x04 por lo
que es necesario agregar las lineas org 0x04 y goto
ISR al programa, donde ISR es la rutina de servicio de
interrupcin y puede, desde luego, tener cualquier otro
nombre.
VENTAJAS AL UTILIZAR
INTERRUPCIONES
La ventaja de utilizar interrupciones es que mientras se
espera a que se presente el evento que produce la
interrupcin el microcontrolador puede estar ejecutando
cualquier otra tarea.
De ese modo el microcontrolador no esta ocupado en
una sola tarea sino que puede seguir trabajando en
otras hasta que una interrupcin haga que el programa
salte y ejecute la tarea que se quiera y al terminarla el
programa continuara su ejecucin en el punto en el que
se encontraba en el momento de presentarse la
interrupcin.
#include <16F877A.h>
#FUSES NOWDT,HS,PUT,NOPROTECT
//Identificadores de bits
#bit RB7=0x06.7
#use delay(clock=20M)//Frecuencia de reloj
//****************************************************************************
#int_EXT
void EXT_isr(void)
{
if (PIN_B1==1&& PIN_B7==0)//Si el interruptor RB1 es "1" (alarma activada)
//y la sirena est apagada
{
output_bit( PIN_B7,1); // activar sirena
}
}
//****************************************************************************