-
INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN
1
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:
Figura 1. Funcionamiento de la interrupcin.
Programa Principal
Inicio
Fin
Proceso X (Subrutina de atencin
a la interrupcin). Interrupcin
-
INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN
2
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
3
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
4
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:
OSC1/CLKIN16
RB0/INT 6RB1 7RB2 8RB3 9RB4 10RB5 11RB6 12RB7 13
RA0 17RA1 18RA2 1RA3 2
RA4/T0CKI 3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
X1
CRYSTALFREQ=4MHz
C122p
C222p
GND
R110k
GND
VCC
R210k
GND
VCC
D1LED-GREEN
R3220R
GND
Figura 2. Diagrama electrnico propuesto para el ejemplo 1.
-
INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN
5
Por otra parte, se muestra el diagrama de flujo propuesto para
el ejemplo anterior:
Inicio
*Configurar todo el puerto
A como salida.
*Configurar a RB0 como
entrada y los dems pines
(RB1-RB7) como salidas.
Colocar a 1 el bit 6 del
registro OPTION (para
que la interrupcin
externa ocurra de 0 a 1).
Accesar al banco 1.
Accesar al banco 0.
Cargar el registro INTCON
con el valor binario 10010000
(Habilita la interrupcin
externa y la declara como
global).
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
Subrutina que se
ejecuta cuando ocurre
la interrupcin
externa.
El LED est
encendido?
Encender el LED
Apagar LED
Salir de la subrutina
(instruccin RETFIE)
SI
NO
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
6
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
7
-
INSTITUTO TECNOLGICO DE CUAUTLA MICROCONTROLADORES
ING. GENARO ALFREDO ALCZAR MARN
8
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
9
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
1F(Oscilador/Cristal) 4,000,000 HzDemora 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(255 s)(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
10
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] ltimo acceso: 21/Febrero/2015.
- EL REGISTRO TMR0, un registro especial. GARCA, V. (Espaol) [En
lnea] 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.