Interrupciones en Los Microcontroladores

INTERRUPCIONES EN LOS MICROCONTROLADORES PIC Recopilado por: Ing. Rafael O Mendoza A. Marzo de 2011 INTERRUPCION • Un

Views 163 Downloads 2 File size 21KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

INTERRUPCIONES EN LOS MICROCONTROLADORES PIC

Recopilado por: Ing. Rafael O Mendoza A. Marzo de 2011

INTERRUPCION • Una interrupción 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 interrupción. • si las interrupciones están habilitadas cada vez que una de estos acontecimientos se presente el pic dejará de ejecutar el programa para ir a atender la interrupción y al termino de la misma continuará ejecutando el programa donde lo había dejado.

Algunas Interrupciones • Interrupción externa RB0/INT • Interrupción por cambio lógico en el puerto B (pines RB7 a RB4) • Interrupción por desborde del timer 0 (TMR0) • Interrupción por desborde del timer 1 (TMR1) • Interrupción por comparación exitosa exitosa en TMR2 • Interrupción del comparador • Interrupción del transmisor del USART • Interrupción del receptor del USART • Interrupción del módulo CCP • Interrupción del EEPROM

• Aunque el pic cuenta con 10 fuentes distintas de interrupción solamentetiene un vector de interrupción por lo que si se habilitan varias interrupciones al momento de presentarse cualquiera de ellas el programa saltara a la misma rutina de interrupcion y es responsabilidad del programador crear una rutina que identifique la fuente de la interrupcion.

PASOS PARA HABILITAR LAS INTERRUPCIONES • Habilitar el bit correspondiente a cada interrupcion. • Limpiar la bandera correspondiente a la interrupcion habilitada para evitar falsas interrupciones. • En caso de ser necesario habilitar el bit PEIE del registro INTCON (necesario para todas las interrupciones con excepcion de INTE y RBIE). • Habilitar el bit de habilitacion global de interrupciones GIE del registro INTCON.

VECTOR DE INTERRUPCIÓN • En el programa tambien es necesario indicar hacia que rutina debe saltar el programa al presentarse la interrupción. • El vector de interrupción está en la dirección 0x04 por lo que es necesario agregar las lineas org 0x04 y goto ISR al programa, donde ISR es la rutina de servicio de interrupción 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 interrupción 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 interrupción haga que el programa salte y ejecute la tarea que se quiera y al terminarla el programa continuara su ejecución en el punto en el que se encontraba en el momento de presentarse la interrupción.

REGISTROS INVOLUCRADOS EN UNA INTERRUPCIÓN • INTEDG: flanco activo interrupción externa. 1- la interrupción se producirá en el flanco ascendente. 0- la interrupción se producirá en el flanco descendente. • GIE: (Habilita las interrupciones globalmente). Este bit permite que cualquier interrupción sea posible. Para poder usar cualquier interrupción hay que habilitarla globalmente e individualmente. • INTE: Permiso de interrupción por activación de la patilla RB0/INT • 1- permite la interrupción • 0- prohíbe la interrupción • INTF: bit de señalización (solo lectura) de interrupción externa RB0/INT

EJEMPLO DE USO DE UNA INTERRUPCION (ALARMA SIMPLE) • Cuando se pulse el sensor de alarma y esté abierto el interruptor de desactivación de alarma, se pondrá a uno el pin RB7 del PIC el cual polarizará directamente el transistor Q1 que a su vez activará el Micro-relé RL1 (Relé auxiliar), este a su vez activará un relé de potencia que activará una alarma conectada a 120V. • Una vez activada la alarma, permanecerá activa hasta tanto no la desactivemos por medio del interruptor de desactivación de alarma RB1 • RB0: Sensores de accionamiento de la alarma • RB1:interruptor de desactivacion (1 activa 0 desactivada) • RB7:pulso de activacion de la alarma

EJEMPLO DE USO DE INTERRUPCION EXTERNA POR RB0 // Ejemplo uso de interrupción externa por RB0

|

#include #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 } } //****************************************************************************

EJEMPLO DE USO DE INTERRUPCION EXTERNA POR RB0 (cont) void main() { set_tris_b(0b01111111); //configura el puerto B (RB7 salida) RB7=0;//inicializamos RB7 enable_interrupts(GLOBAL);//habilitamos interrupción global enable_interrupts(INT_EXT);//habilitamos interrupción externa while( true ) { if( PIN_B1==0 && PIN_B7==1 )/* Si alarma desactivada y sirena en funcionamiento */ { output_bit( PIN_B7,0); // se desactiva la sirena } } }