Interrupciones en los microcontroladores
Una interrupcion es un evento que hace que el micro deje lo que esta haciendo (ejecutando el programa
principal) y atienda el evento o interrupcion.
Vamos a suponer que ud esta en su trabajo(programa principal) y su jefe le hace una llamada(fuente de
interrupcion) y le pide que por favor se dirija a la sucursal de la zona sur a resolver un problema, ud
imediatamente detiene lo que esta haciendo y se dirige a la sucursal a solucionar el problema(rutina de
interrupcion), cuando termina vuelve a su oficina(programa principal).
mirando el ejemplo anterior la fuente de interrupcion es su jefe y la rutina de atencion es ir a la
sucursal y solucionar el problema.
Dependiendo del microcontrolador hay diferentes fuentes de interrupcion, veamos algunas de ellas:
- por cambio en los pines RB4, RB5, RB6 y RB7
- por desborde del TMR0
- por el modulo USART
- por la memoria EEPROM
- por cambio en el pin RB0 interrupcion externa
- por el comparador
entre otras fuentes de interrupcion.
Cuando ocurre una interrupcion el microcontrolador se dirige a la posicion de memoria 0X04H tambien
llamada "VECTOR DE INTERRUPCION" y es este lugar que debemos colocar la rutina de atencion a la
interrupcion.
org 00 ;Vector de reset
goto configura
org 0x04 ;Vector de interrupcion
; es en este lugar que escribimos la rutina de atencion a la interrupcion
goto RUTINAdeINTERRUPCION ;Nos envia a la rutina donde atenderemos la interrupcion
RUTINAdeINTERRUPCION
; Esto es lo que debe hacer segun la interrupcion que ocurra
.
.
.
.
RETFIE ;Retorna de Interrupcion
Notemos como en el ejemplo anterior cuando se termina la rutina escribimos RETFIE para salir de la
interrupcion y volver al lugar donde estaba antes de que la interrupcion se diera.
Como los microcontroladores tienen varias fuentes de interrupcion, pero un solo vector de interrupcion,
cuando estas se presenten, nosotros por programa debemos identificar el tipo de interrupcion, para esto
cada fuente de interrupcion tiene su propia bandera (Bit asociado a la fuente de interrupcion).
Copyright 2012 edwtron
Este
DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o
modificarlo bajo los terminos de la GNU FDL tal y como es publicada por
la fundacion de software libre; bajo la version 1.3 de la licencia, o
una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
No hay comentarios:
Publicar un comentario