Вы находитесь на странице: 1из 4

INTERRUPCIONES

Una interrupción es un pedido de alta prioridad que un dispositivo exterior o un


evento interno, realiza a la CPU, para que ésta deje de realizar el programa
normal y atienda a la interrupción.
Las interrupciones pueden ser internas o externas.

INTERRUPCIONES EXTERNAS

El uC 16F6XX posee 2 fuentes de interrupciones externas que son detectadas


por el cambio de estado del:
• Puerto B.0.
• Puertos B.4, B.5, B.6, B.7. En este caso cualquier cambio produce la
misma interrupción.

INSTRUCCIONES

ON INTERRUPT GOTO handler; Activa la interrupción y salta a ejecutar el


programa de la interrupción handler. Se puede dar cualquier nombre de
etiqueta a este programa.
Seguido de esta instrucción se debe definir la fuente de interrupción mediante
el registro INTCON.
• INTCON = %10010000; habilita la interrupción por el puerto B.0 en
flanco positivo.
• INTCON = %10001000; habilita la interrupción por el puerto B.4---B.7 en
flanco positivo.

Por defecto, la bandera INTDEG es 1 del registro OPTION por lo que el


cambio será detectado en flanco de subida. Para cambiar a flanco de
bajada se debe cambiar la bandera INTDEG a 0, la siguiente forma:
• OPTION_REG.6 = 0; censa en flanco de bajada.
• OPTION_REG.6 = 1; censa en flanco de subida.
La bandera INTDEG, controla el flanco de subida o bajada, solo para la
interrupción producida por RB0. No hay control para RB4:RB7. Por defecto
aquí utiliza el flanco de bajada.

DISABLE; deshabilita la interrupción, o sea, indica hasta que punto el


programa atiende la interrupción.

RESUME; Retorna a la línea del programa en donde ocurrió la interrupción.


RESUME etiqueta; El programa continua en la subrutina o handler indicado
por el nombre de la etiqueta.
ENABLE; Habilita nuevamente la interrupción.
Ejemplo:
PROGRAMA 1:

CMCON = 7
LED1 VAR PORTB.1
LED2 VAR PORTB.2

ON INTERRUPT GOTO HandlerLuz ‘ Activa el sistemas de interrupciones


INTCON = %10010000 'Habilita la interrupción por RB0

INICIO:
HIGH LED1
PAUSE 200
LOW LED1
PAUSE 200
GOTO INICIO
DISABLE ' Desabilita la interrupción

HandlerLuz:
HIGH LED2
PAUSE 2000
LOW LED2
INTCON = %10010000 'Habilita la interrupción por RB0
RESUME 'Retorna a la siguiente instrucción del programa
desde donde fue llamada la interrupción
ENABLE 'Habilita nuevamente a la interrupción
END

Interrupciones sucesivas
PROGRAMA 12:

LED1 VAR PORTB.1


LED2 VAR PORTB.2

ON INTERRUPT GOTO LUZ


INTCON= %10010000
INICIO:
HIGH LED1
PAUSE 500
LOW LED1
PAUSE 500
GOTO INICIO
DISABLE

LUZ:
HIGH LED2
PAUSE 5000
LOW LED2
INTCON = %10010000
ON INTERRUPT GOTO FIN
RESUME LUZ2
ENABLE
LUZ2:
HIGH LED2
PAUSE 500
LOW LED2
PAUSE 500
GOTO LUZ2
DISABLE

FIN:
HIGH LED1: HIGH LED2
PAUSE 5000
LOW LED1: LOW LED2
INTCON = %10010000
RESUME INICIO
ENABLE
END

GRAFICO PARA COMPROBAR PROGRAMAS

ACTIVIDAD INDIVIDUAL.
1. Compruebe en el simulador el funcionamiento de los dos programas. Analice y
comente el código usado.
2. Cambie el programa 1 para detectar la interupción en el flanco de bajada.
3. Realice el circuito y cambie el programa 1 para que la interrupción sea detectada
por RB4:RB7.
4. Realice un contador ascendente de 0 a 9. Debe haber un pulsador de inicio-
continuar, uno para detener y otro para encerar, que será realizado mediante una
interrupción.

Вам также может понравиться