Date post: | 07-Oct-2015 |
Category: |
Documents |
Upload: | alfre2alcazar |
View: | 37 times |
Download: | 0 times |
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.