Vous êtes sur la page 1sur 7

Manejo

de interrupciones
Mecanismos de interrupción

• Los mecanismos de interrupción sirven para controlar el flujo


asíncrono de nuestro microprocesador.

• Permiten manejar eventos que se pueden ejecutar en cualquier


momento

• Existe una sección de código (subrutina) que se encarga de manejar


las excepciones (ISR – Interrupt service routine o rutina de servicio
de interrupciones)
Manejo de interrupciones

• Interrupt service routine

• El microprocesador designa una sección especial de la memoria de programa


para el manejo de interrupciones. Dependiendo del fabricante y del tipo de
microprocesador, esta dirección puede variar.

• En la hoja de datos esta sección se marca como INTERRUPT VECTOR.

• Para el microprocesador específico que estamos estudiando, este vector se


designa como 0x0008.

• La práctica usual es colocar una instrucción del tipo GOTO en esta dirección,
y manejarla en otra sección diferente del código.
Manejo de interrupciones – Partes a
considerar
• Indicar el vector de interrupción (ORG 0x0008)

• La etiqueta que indique la dirección donde se empieza a manejar la


interrupción (ISR)

• Importante recordar que la interrupción debe contener la


instrucción RETFIE.

• La INTERRUPT FLAG (Bandera de interrupción) de la interrupción


específica debe ser limpiada en la interrupción –de lo contrario, al
salir de la interrupción volverá a entrar nuevamente en la rutina de
manejo–.
Manejo de interrupciones

• Ejemplo de una rutina de manejo de interrupciones:


ORG 0x0008 ; processor reset vector
GOTO ISR

...

ISR
BCF INTCON, TMR0IF
BTG PORTD, 2
BTG PORTD, 3
RETFIE
Manejo global de interrupciones

• Se debe habilitar el manejo global de interrupciones.


• El microprocesador, cuando enciende, por defecto no maneja
interrupciones
• Estas se deben habilitar por medio de la bandera global de
interrupciones.
• Esto es, haz set del bit GIE (Global Interrupt Enable) en el registro
INTCON (Interrupt Control Register).
• Además, se debe habilitar la interrupción específica que estemos
utilizando -en este caso, la interrupción del TIMER0,
Manejo de interrupciones – Configuración
global
• El código para habilitar las interrupciones de forma global sería:

; Configuracion de interrupcion
BCF INTCON, TMR0IF
BSF INTCON, GIE
BSF INTCON, TMR0IE