You are on page 1of 10

INSTITUTO TECNOLGICO DE CUAUTLA

MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Interrupciones en el PIC16F84A utilizando lenguaje ensamblador y MPLABX.

Una interrupcin consiste en un mecanismo por el cual un evento interno o externo


puede interrumpir la ejecucin de un programa en cualquier momento. A partir de
entonces se produce automticamente un salto a una subrutina de atencin a la
interrupcin, sta atiende inmediatamente el evento y luego la ejecucin del programa
retorna exactamente donde estaba en el momento de ser interrumpido, continuando su
tarea justo donde la dej. La interrupcin tiene la caracterstica de la inmediatez, nace de
la necesidad de ejecutar una subrutina en el instante preciso y, por tanto, se considera
una intervencin urgente.
ste mtodo es ms eficaz que la tcnica de lectura de entradas del microcontrolador
(tambin llamada Polling), ya que el microcontrolador no perder tiempo preguntando a
la lnea de entrada para leer el estado, sino que nicamente atender al perifrico cuando
ste se lo pida mediante la solicitud de interrupcin.
El PIC16F84A dispone de 4 posibles fuentes de interrupcin:
- Interrupcin externa INT. Por activacin del pin RB0/INT.
- Interrupcin RBI. Por el cambio de estado de en una o varias de las 4 lneas de ms
peso RB4:RB7 del puerto B.
- Interrupcin T0I. Por el desbordamiento del Timer 0.
- Interrupcin EEI. Por la finalizacin de la escritura en la EEPROM de datos.
El funcionamiento de la interrupcin se muestra en el siguiente diagrama:
Inicio

Programa
Principal

Interrupcin

Fin

Figura 1. Funcionamiento de la interrupcin.

Proceso X
(Subrutina de atencin
a la interrupcin).

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Por ejemplo, los registros y bits involucrados para configurar la interrupcin externa
INT, se muestran a continuacin:

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Qu sucede cuando ocurre una interrupcin?


Al ocurrir una interrupcin, el microcontrolador ejecuta los siguientes pasos de forma
automtica:

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

1. Se salva el valor actual del contador de programa (PC), guardando el valor del mismo,
en un espacio de memoria del microcontrolador destinado para ello.
2. El bit GIE (Global Interrupt Enable, bit 7 registro INTCON) es puesto a 0, lo que
prohbe que ocurra cualquier otra interrupcin.
3. El PC se carga con el valor 0x04, que es la posicin del vector de interrupcin.
4. Comienza a ejecutarse el programa de atencin a la interrupcin que se encuentra a
partir de la direccin 0x04.
Ejemplo 1: Utilizando el PIC16F84A (con un oscilador de cristal de cuarzo de 4MHz),
tratar de encender/apagar un LED conectado en el pin RB1 del microcontrolador; para
ello, habilite la interrupcin externa del pin RB0/INT y mediante un Push-Button N. A.
conectado a RB0, realice la transicin de encendido/apagado y viceversa del LED (la
interrupcin puede ocurrir de 0(H) a 1(L) o viceversa).
A continuacin, se muestra el diagrama electrnico propuesto para el ejemplo 1:

C1

GND

C2

22p

22p

X1
VCC
CRYSTAL
FREQ=4MHz

U1
16
15
4

OSC1/CLKIN
OSC2/CLKOUT

RA0
RA1
RA2
RA3
RA4/T0CKI

MCLR

VCC

RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

R1
10k

17
18
1
2
3

R2
10k

6
7
8
9
10
11
12
13

R3
220R

PIC16F84A

D1
LED-GREEN
GND

GND

Figura 2. Diagrama electrnico propuesto para el ejemplo 1.

GND

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Por otra parte, se muestra el diagrama de flujo propuesto para el ejemplo anterior:
Inicio

Accesar al banco 1.

*Configurar todo el puerto


A como salida.
*Configurar a RB0 como
entrada y los dems pines
(RB1-RB7) como salidas.

Subrutina que se
ejecuta cuando ocurre
la interrupcin
externa.

El LED est
encendido?

Colocar a 1 el bit 6 del


registro OPTION (para
que la interrupcin
externa ocurra de 0 a 1).

SI
Apagar LED

NO

Encender el LED
Accesar al banco 0.
Cargar el registro INTCON
con el valor binario 10010000
(Habilita la interrupcin
externa y la declara como
global).

Salir de la subrutina
(instruccin RETFIE)

Colocar a 0 el pin RB1,


para que el LED
inicialmente se apague.
Hacer que el PIC
permanezca en modo
Stand-By (Sleep) y slo
"despierte" cuando
ocurra la interrupcin.

Fin

Figura 3. Diagrama de flujo propuesto para el Ejemplo 1.


El cdigo en lenguaje ensamblador (se compila con el MPLABX) y el diagrama del
ejemplo 1, pueden ser descargados en el siguiente link:
http://www.mediafire.com/download/zxec2l2rttg8qqr/Ejemplo_1.rar

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Ejemplo 2. Utilizando el PIC16F84A (con un oscilador de cristal de cuarzo de 4MHz)


encender/apagar de forma autnoma, un LED conectado en el pin RA0 utilizando la
interrupcin TOI (por el desbordamiento del Timer 0), cuyo tiempo de encendido o
apagado sea aproximadamente de 1ms (ciclo de trabajo del 50%).
En primer lugar, se identifican los registros y bits involucrados para configurar la
interrupcin T0I (por el desbordamiento del Timer 0):

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Posteriormente, en la Figura 4, se muestra el diagrama de flujo propuesto para el


Ejemplo 2:

Figura 4. Diagrama de flujo propuesto para el Ejemplo 2.

El diagrama y la simulacin del Ejemplo 2 se muestran a continuacin:

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Figura 5. Diagrama y simulacin para el Ejemplo 2.


Como se muestra en la simulacin, el tiempo de encendido y apagado del LED es de 1
ms aproximadamente, debido a lo siguiente:
1

F(Oscilador/Cristal)
4,000,000 Hz
Demora de cada instruccin =
=
= 1 s
4
4

El Timer 0 est configurado para incrementarse una unidad cada 1 s, cuenta del 0 al
255 y ocurre la interrupcin TMR0, cada vez que ocurre la interrupcin, la variable
CONTADOR se decrementa en una unidad (previamente ha sido cargada con el valor 2 en
decimal), cuando el contador llega a 0 se enciende o apaga el LED y la variable CONTADOR
vuelve a cargarse con un 2 en decimal.

Duracin del encendido o apagado del LED = 2(255 s)(CONTADOR) = 2(255s)(2) = 1.02ms
El cdigo en lenguaje ensamblador (se compila con el MPLABX) y el diagrama del
ejemplo 1, pueden ser descargados en el siguiente link:
http://www.mediafire.com/download/o3o0rsc4bhho23r/Ejemplo_2.rar

INSTITUTO TECNOLGICO DE CUAUTLA


MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN

Referencias bibliogrficas:
PALACIOS,
Enrique.,
REMIRO,
Fernando
y
LPEZ,
J.
Lucas.
MICROCONTROLADOR PIC16F84: Desarrollo de proyectos. 3ra. Edicin, Mxico:
Editorial Alfaomega, Junio 2009.

Referencias digitales:
- Data-Sheet PIC16F84A, Microchip Technology Inc. (Ingls, E.U.) [En lnea]
<http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf>
ltimo acceso: 21/Febrero/2015.
- EL REGISTRO TMR0, un registro especial. GARCA, V. (Espaol) [En lnea]
<http://www.hispavila.com/3ds/chipspic/tmr0.html>
ltimo acceso: 21/Febrero/2015.

Software utilizado para la elaboracin de ste documento:


- Paint.NET v3.5.11
Descarga http://www.getpaint.net/download.html#download
- Paquetera Proteus 8 SP0.
Descarga http://www.labcenter.com/download/prodemo_download.cfm#professional
- MPLABX para Microsoft Windows
Descarga http://www.microchip.com/mplabx-ide-windows-installer
- Smart Draw.
Descarga http://www.smartdraw.com/
- Windows 7 Home Basic SP1 de 64 bits.

10

You might also like