interrupciones en el pic16f84a arquitectura de computadoras
TRANSCRIPT
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
1/19
Nombre del Alumno:Angel Arturo Rendon Castro
Nombre del Profesor:
Francisco Javier Ramrez Sandoval
Nombre de la Materia:
Arquitectura de Computadoras
Interrupciones en PIC16F84A
Semestre: Quinto
Grupo: B
Nmero de control: 13670019
Carrera: Ingeniera en Sistemas Computacionales
Horario: LunesViernes; 2:00p.m3:00pm
Ciclo escolar: AgostoDiciembre 2015
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
2/19
NDICE
Marco terico......................................................................................... 3
Definicin .............................................................................................3
Funcionamiento ...................................................................................3
Fuentes ................................................................................................4
Interrupciones en el PIC16F84A .........................................................4
Tipos de Interrupciones en el PIC16F84A ..........................................5
1.-Interrupciones Externas..............................................................5
2.-Interrupcin por finalizacin de la temporizacin .......................6
3.-Interrupcin por cambio en el puerto RB. ..................................6
4.-Interrupcin por finalizacin de la escritura. ..............................6
Aplicaciones ..........................................................................................7
Ejemplos ................................................................................................8
Ejemplo 1(Programacin en MPLAB) ..................................................8
Ejemplo 2(Programacin en MPLAB) ................................................11
Ejemplo 3(Programacin en C) .........................................................13
Conclusin........................................................................................... 19
Bibliografa ..........................................................................................19
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
3/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
3
Marco terico
Definicin:El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o
externo, asncrono respecto del programa, tambin visto como un aviso provocado por un
mdulo del PIC, por un cambio en el estado de un pin o un recordatorio de que ha pasadoun cierto tiempo. Como su nombre indica este aviso interrumpir la tarea que se est
haciendo en ese momento y pasaremos a ejecutar una rutina de servicio o gestin de la
interrupcin.
Funcionamiento:Las interrupciones se comportan casi exactamente igual que las subrutinas. En uno de los
registros de control del sistema de interrupciones existe un bit de habilitacin general de
interrupciones GIE, que debe ser programado en 1 para que las interrupciones puedan
actuar.Al generarse la seal de interrupcin, el microcontrolador termina primero la
ejecucin de la instruccin que se est procesando en ese momento, guarda en el STACK
PILA la direccin de memoria de cdigo de la siguiente instruccin y posteriormente hace
un llamado a la "subrutina de atencin de interrupciones", cuyo inicio siempre se encuentra
en la direccin 04H de la memoria de cdigo.
Imagen 1.- funcionamiento de una interrupcin bsica
Al producirse una interrupcin, este bit se borra automticamente para evitar nuevasinterrupciones. La instruccin RETFIE que se utiliza al final de la rutina de interrupcin, es
idntica a un retorno de subrutina, salvo que adems coloca en uno automticamente el bit
GIE volviendo a habilitar las interrupciones. Dentro de la rutina de interrupcin, el programa
deber probar el estado de los flags de interrupcin de cada una de las fuentes habilitadas,
para detectar cual fue la que caus la interrupcin y as decidir qu accin tomar.
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
4/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
4
Para la ejecucin que ste produciendo automticamente un salto a una subrutina de
atencin, de manera que pueda atender inmediatamente el evento, y retomar luego la
ejecucin del programa exactamente en donde estaba en el momento de ser interrumpido.
Este mecanismo es muy til por ejemplo para el manejo de timers o rutinas que deben
repetirse peridicamente (refresh de display, antirebote de teclado, etc.), deteccin depulsos externos, recepcin de datos, etc.
FuentesLa seal que produce la interrupcin es en realidad una sola, que resulta de la combinacin
de todas las fuentes posibles y de los bits de habilitacin. Existen dos grupos de fuentes,
unas que se habilitan con solo colocar en uno el bit GIE, y otras que adems necesitan que
este puesto a uno el bit PEIE. Adems, cada fuente de interrupciones tiene su respectivo
bit de habilitacin individual (Las fuentes de interrupcin varan con cada versin de PIC).
Interrupciones en el PIC16F84A
El PIC16F84A tiene cuatro recursos de interrupciones:
Pin de Interrupcin externa RB0/INT
Interrupcin de desbordamiento TMR0
Interrupciones de cambio PORTB(pines RB7:RB4)
Finalizacin de escritura en la EEPROM de datos
El registro 0Bh o INTCON contiene las banderas de las interrupciones INT, cambio en el
puerto B y finalizacin del conteo del TMRO, al igual que el control para habilitar o
deshabilitar cada una de las fuentes de interrupcin, incluida la de escritura en memoria
EEPROM. Slo la bandera de finalizacin de la escritura reside en el registro 88h
(EECON1).
Si el bit GIE (Global Interrupt Enable) se coloca en 0, deshabilita todas las interrupciones.
Cuando una interrupcin es atendida, el bit GIE se coloca en 0 automticamente para evitar
interferencias con otras interrupciones que se pudieran presentar, la direccin de retorno
se coloca en la pila y el PC se carga con la direccin 04h. Una vez en la rutina de servicio,
la fuente de la interrupcin se puede determinar examinando las banderas de interrupcin.
La bandera respectiva se debe colocar, por software, en cero antes de regresar de la
interrupcin, para evitar que se vuelva a detectar nuevamente la misma interrupcin.
La instruccin RETFIE permite al usuario retornar de la interrupcin, a la vez que habilita
de nuevo las interrupciones, al colocar el bit GIE en uno. Debe tenerse presente quesolamente el contador de programa es puesto en la pila al atenderse la interrupcin; por lo
tanto, es conveniente que el programador tenga cuidado con el registro de estados y el de
trabajo, ya que se pueden producir resultados inesperados si dentro de ella se modifican.
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
5/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
5
Imagen 2.- Lgica de interrupciones en el PIC16F84A
Tipos de Interrupciones en el PIC16F84A
1.-Interrupcin externa
Acta sobre el pin RB0/INT y se puede configurar para activarse con el flanco de subida o
el de bajada, de acuerdo al bit INTEDG (OPTION). Cuando se presenta un flanco vlido
en el pin INT, la bandera INTF (INTCON) se coloca en uno. La interrupcin se puede
deshabilitar colocando el bit de control INTE (INTCON) en cero. Cuando se atiende la
interrupcin, a travs de la rutina de servicio, INTF se debe colocar en cero antes de
regresar al programa principal. La interrupcin puede reactivar al microcontrolador despus
de la instruccin SLEEP, si previamente el bit INTE fue habilitado.
WAKE-UP usando interrupciones:
Cuando las interrupciones globales son desactivadas (GIE limpiado o en cero) y alguna
fuente de interrupcin tiene tanto su bit de interrupcin habilitado y bit de indicacin de
interrupcin, una de las siguientes puede ocurrir:
Si la interrupcin ocurre antes de la ejecucin de una instruccin sleep, la instruccin
sleep va completarse con un NOP, por lo tanto, el WDT y WDT postscaler no sernvaciados, el bit TO negada no se ajustara y los bits negados PD no sern vaciados.
Si la interrupcin ocurre durante o despus de una ejecucin de una instruccin
sleep, el dispositivo va inmediatamente a ser despertado del sleep. La instruccin
sleep va a ser ejecutada completamente antes de despertar, por lo tanto, el WDT y
WDT postscaler sern vaciados, el bit TO negada se ajustara y los bits negados PD
sern vaciados
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
6/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
6
Incluso si los bits de marca fueron marcados antes de la ejecucin de una instruccin sleep,
puede ser posible para los bits de marcas el hacerse fijados antes de la ejecucin de la
instruccin sleep se complete para determinar una instruccin sleep ejecutada, prueba el
bit PD negado, si el bit PD negado est fijado, la instruccin sleep fue ejecutada como un
NOP.
Para asegurar que el WDT se vaca una instruccin CLRWDT debera ser ejecutada antes
de una instruccin sleep.
2.-Interrupcin por finalizacin de la temporizacin.
La superacin del conteo mximo (0FFh) en el TMR0 colocar el bit TOIF en uno
(INTCON). El bit de control respectivo es TOIE (INTCON).
Interrupcin Timer0
La interrupcin TMR0 es generada cuando el registro TMR0 se desborda desde el FFh al
00h. Este desbordamiento ajusta el bit T0IF (INTCON).La interrupcin puede serenmascarada por el borrado del bit T0IE (INTCON).El bit T0IF debe ser borrado en el
software por el mdulo de servicio de interrupcin de rutina Timer0 antes de volver a
habilitar esta interrupcin. La interrupcin TMR0 no puede despertar el procesador del sleep
desde que el timer es apagado durante el sleep.
Imagen 4.-diagrama de bloque del timer0
3.-Interrupcin por cambio en el puerto RB.
Un cambio en los pines del puerto B colocar en uno el bit RBIF (INTCON). El bit
de control respectivo es RBIE (INTCON).
4.-Interrupcin por finalizacin de la escritura.
Cuando la escritura de un dato en la EEPROM finaliza, se coloca en 1 el bit EEIF
(EECON1). El bit de control respectivo es EEIE (INTCON)
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
7/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
7
Imagen 3.-Registro INTCON
AplicacionesUna interrupcin es un aviso provocado por un mdulo del PIC, por un cambio
en el estado de un pin o un recordatorio de que ha pasado un cierto tiempo.El
uso de las interrupciones en la programacin de PICs trae consigo muchos beneficios ya
que est al pendiente de los eventos que procesa el PIC. Estas interrupciones tienen una
subrutina que permite darle solucin y seguir con el proceso normal del programa principal.
Algunas de sus aplicaciones son tales como:
Implementacin de bases de tiempo para relojes de tiempo real.
Temporizadores industriales.
Control de riego automtico
Control de puertas automticas del metro
Control de robots de mltiples propsitos
Y en teora nos ayuda a poder manejar muchos tipos de eventos sin estar
pendientes de ello por lo cual cuentan con un gran rango de aplicacin.
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
8/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
8
Ejemplos
Ejemplo 1(Programacin en MPLAB)Este ejemplo consiste en un programa que prepara todo para el encendido de un LED que
conectaremos en RB1, slo prepararemos todo, porque luego haremos dormir al micro
hasta que interrumpamos su sueo para atender un pulsador conectado a RB0/INT,momento en el cual deber encender el LED, y regresar a dormir nuevamente, y cuando se
vuelva a presionar el pulsador har que lo apague y otra vez lo despacharemos a dormir.
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
9/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
9
ORG 0x04
GOTO ISR
La primera lnea es el vector de interrupcin, y cuando sta se produzca, el cdigo de
programa apuntar a esta direccin y continuar con la siguiente instruccin, es decir
GOTO ISR, la cual es un salto a ISR (Rutina de Servicio de Interrupciones) para atender
dicha interrupcin. Configuramos el puerto B, como habrs notado, hemos configurado
RB0/INT como entrada y el resto de los bits como salida, luego...
BCF OPTION_REG,6 seleccionamos flanco descendente
En la pgina anterior dijimos que podamos seleccionar el flanco con el cual se producir la
interrupcin, pues eso es lo que estamos haciendo con esta instruccin, entonces vamos
al registro OPTION y ponemos el BIT6 a "0" de este modo la interrupcin se producir
cuando suelten el pulsador.
Ahora pasamos a lo ms interesante, la habilitacin de las interrupciones...
BSF INTCON,GIE ; habilitamos todas las interrupciones
BSF INTCON,INTE ; que sean interrupciones externas
Observa que la habilitacin de interrupciones se hace en el banco0 ya que el Registro
INTCON se encuentra en este banco. Bien, En la primera lnea hacemos una habilitacin
general de todas las interrupciones, hacemos GIE=1, en la segunda lnea, habilitamos
interrupciones externas, hacemos INTE=1, recuerda que la bandera para la interrupcin por
el pin RB0/INT es INTF, no lo olvides, pues esta cambiar cuando la interrupcin se
produzca y luego de atenderla deberemos volverla a cero.
Lo que viene ahora es simplemente limpiar el puerto B, y luego...
sueo SLEEP
GOTO sueo
SLEEP es la instruccin que pone al micro en estado de bajo consumo, es como que todo
se detiene y ste pasa a modo de reposo, (consulta el set de instrucciones para mayor
detalle...) deb haber puesto simplemente SLEEP pero veamos, si se ejecutara la
instruccin SLEEP el micro entrara en reposo hasta que se produce la interrupcin, lo cual
dijimos anteriormente que es como una llamada (un call), cuando regrese se encontrar
con GOTO sueo y lo volveremos a dormir.
Te imaginas...??? si no pusiramos el GOTO sueo, cuando regrese de la interrupcin
pasara a la ISR (Rutina de servicio de interrupcin), y lo peor de todo, es que lo hara sin
que se produzca la interrupcin, gran dolor de cabeza...!!!Pero bueno, ahora nos quedamos
a dormir con el micro hasta que un chico traviezo active el pulsador de RB0/INT ...Felices
sueosssss...!!!!Chico malo...!!!, que siempre me pones a prueba, Ya veo que no pudiste
esperar y presionaste el pulsador...De acuerdo... sabes a donde me llevaste...??? justo a...
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
10/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
10
ORG 0x04
GOTO ISR
Entonces vamos hacia all, ahora te dar para que tengas, guardes y repartas...Lo que
viene, es la rutina de servicio de interrupcin ISR y comenzamos con un...
ISR BTFSC PORTB,0 ; verificamos que suelten el pulsador
GOTO ISR
ISRno es una instruccin, sino la etiqueta que atiende la interrupcin (pude haber puesto
rut_serv u otra cosa, en fin...). ConBTFSC PORTB,0, prevenimos los rebotes, no s si era
necesario ya que seleccionamos flanco descendente para este pin, pero por si las moscas
lo puse, en realidad suele pasar que cuando se libera el pulsador se genera una pequea
chispa, la cual ya conocemos como rebote elctrico, slo lo puse por prevencin. Ahora si
atenderemos la interrupcin, comenzando por...
BTFSC PORTB,1
BTFSC PORTB,1 Es probar si el segundo bit (Bit1 de PORTB) est en 0 , es decir si el LED
est apagado y saltar un lnea si es as.
En elecciones anteriores utilizamos un registro llamado cont con el cual sabamos si el LED
estaba prendido o apagado, y aqu tienes una forma de optimizar ese cdigo, espero que
no te pierdas con esto...!!!
Bien... como recin iniciamos, el LED est apagado, por lo tanto saltamos una lnea y
pasamos a...
BSF PORTB,1
Es decir hacemos RB1=1 (prendemos el LED). Perfecto, la interrupcin ya fue atendida,
pero ahora debemos habilitarla de nuevo as permitimos que se vuelva a ejecutar, y como
tenemos un nico pulsador el cual me cambi la bandera INTF, deberemos borrarla
nuevamente, as es que...
BCF INTCON,INTF ; borro bandera de interrupcin
Obviamente al producirse la interrupcin se hizo GIE=0 para darnos lugar a atenderla,
entonces...
RETFIE
y ahora GIE=1, las interrupciones estn nuevamente habilitadas la bandera deRB0/INT est
lista para una nueva interrupcin y retornamos a ...
sueo SLEEP
GOTO sueo
y esperar a que pulses RB0, pues si ya lo hiciste habrs ido por segunda vez a ...
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
11/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
11
ORG 0x04
GOTO ISR
Prevenimos los rebotes y luego vamos a...
BTFSC PORTB,1
Es decir, prueba y salta si el Bit1 de PORTB es cero, y como esta vez el LED est prendido...
simplemente hars un...
GOTO off_led ; ire a off_led para apagarlo
Un salto a la etiqueta off_led...
off_led BCF PORTB,1 ; sino, apago el LED
No se si requiere explicacin pero bueno, pones a cero el Bit1 de PORTB. Finalmente...
BCF INTCON,INTF ; borro bandera de interrupcin
RETFIE
Ejemplo 2(Programacin en MPLAB)
El siguiente programa sirve para generar una base de tiempo de un segundo por
interrupciones enciende y apaga en bit RB7, se usa el temporizador TRM0 y su
preescalador para generar 65.536 milisegundos por ciclo de interrupcin
; ARCHIVO EJEMPLO1INTERRUPCIONES.ASM
; CODIGO FUENTE PARA EL MICROCONTROLADOR PIC16F84
; PROGRAMA PARA GENERAR UNA BASE DE TIEMPO DE UN SEGUNDO; POR INTERRUPCIONES. ENCIENDE Y APAGA EL BIT RB7; SE USA EL TEMPORIZADOR TMR0 Y SU PREESCALADOR PARA GENERAR; 65.536 MILISEGUNDOS POR CADA CICLO DE INTERRUPCION.; 15 CICLOS ES APROXIMADAMENTE 1 SEGUNDO.
; VERSION PARA OSCILADOR CRISTAL 4 MHZ
; CPU configuration; (It's a 16F84, XT OSCILADOR; watchdog timer off, power-up timer on)
processor 16f84include
__config _XT_OSC & _WDT_OFF & _PWRTE_ON
#DEFINE BANCO0 BCF STATUS,RP0#DEFINE BANCO1 BSF STATUS,RP0
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
12/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
12
CONT1 EQU H'20' ;CONTADOR DE CICLOS DE 65.5 MILISEGUNDOS.;15 CICLOS ES APROX. UN SEGUNDO
;aqu inicia el programa
org H'0'inicio goto begin ;salta a inicio del programa
org H'4' ;subrutina de interrupcin en la direccin4int BANCO0
clrf TMR0 ;inicializa TMR0bcf INTCON,T0IF ;apaga bandera de overflow del TMR0incf CONT1,f ;incrementa contador de 65.5 ms.movlw D'15'subwf CONT1,w ;prueba si la cuenta es igual a 15btfss STATUS,Z ;bandera Z encendida?retfie ;cuenta diferente a 15, regresaBTFSS PORTB,7 ;LED ENCENDIDO?GOTO ENCBCF PORTB,7 ;APAGA LEDCLRF CONT1retfie
ENC BSF PORTB,7 ;ENCIENDE LEDCLRF CONT1retfie
begin clrf CONT1 ;programa principalBANCO1movlw B'00011110'
movwf TRISA ;INICIALIZA ENTRADAS Y SALIDAS PUERTO Aclrf TRISB ;PUERTO B SON SALIDASmovlw B'00000111' ;ACTIVA TEMPORIZADOR Y CLOCK INTERNOmovwf OPTION_REG ;PREESCALADOR DIVIDE ENTRE 256BANCO0clrf PORTBBCF PORTA,0movlw D'00'movwf TMR0 ;INICIALIZA TEMPORIZADOR=00bsf INTCON,GIE ;habilita interrupciones globalbsf INTCON,T0IE ;activa interrupcin decontador
sigue goto sigueend
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
13/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
13
Ejemplo 3 (programacin en C)
En este ejemplo vamos a ver el uso de la interrupcin externa a travs de la patilla RB0/INT,
para ello vamos a utilizar el PIC 16f84A, aunque si utilizas otro PIC de mayores prestaciones
el proceso ser el mismo.
Vamos a ver las patillas y los registros del PIC implicados en el tema:
En cuanto a los pines del PIC la seal externa para producir la interrupcin en el PIC ser atravs de de la patilla 6 y se podr determinar por software que flanco de la seal producir
la interrupcin, el de subida (cuando la seal pasa de un nivel 0 a 1) el de bajada (cuando
pasa de 1 a 0).
Vamos a ver ahora los registros especficos (SFR) que nos proporciona el PIC para el control
de esta interrupcin.
INTEDG: flanco activo interrupcin externa.
1- la interrupcin se producir en el flanco ascendente.
0- la interrupcin se producir en el flanco descendente.
GIE: (Habilita las interrupciones globalmente). Este bit permite que cualquier
interrupcin sea posible. Para poder usar cualquier interrupcin hay que habilitarla
globalmente e individualmente.
INTE: Permiso de interrupcin por activacin de la patilla RB0/INT
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
14/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
14
1- permite la interrupcin
0- prohbe la interrupcin
INTF: bit de sealizacin (solo lectura) de interrupcin externa RB0/INT
Para ver como CCS gestiona estos recursos, vamos a crear el siguiente circuito en Proteus:
El circuito es una alarma sencilla, lo que tiene que hacer es lo siguiente:
Cuando se pulse el sensor de alarma y no est cerrado el interruptor de desactivacin de
alarma, se pondr a uno la patilla RB7 del PIC el cual polarizar directamente el transistor
Q1, que a su vez activar el Micro-rel RL1 (Rel auxiliar), este a su vez activar un rel de
potencia que activar una alarma conectada a 220V.
Cuando queremos activar una carga con una potencia importante, es necesario adaptar el
circuito de salida para poder controlar con los pocos miliamperios que nos da el PIC la carga
que queramos. Hay muchas formas de hacer esto, se puede utilizar un par de transistores
en configuracin Darlington y atacar directamente el rel de potencia no utilizar rels y
controlar la carga por medio de un triac, lo podis hacer como queris.
Una vez activada la alarma, permanecer activa hasta que no la desactivemos por medio del
interruptor de desactivacin de alarma (interruptor cerrado).
Ahora vamos a crear el programa en C, para ello vamos a crear un nuevo proyecto a travs
del asistente, de esta forma vamos viendo las posibilidades que nos da esta herramienta,
configuraremos las opciones segn se muestra en las siguientes figuras:
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
15/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
15
Los dems valores dejamos los de por defecto.
Una vez creada la plantilla con el asistente, aadiremos las siguientes lneas de cdigo para
hacer nuestro programa funcional:
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
16/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
16
Nota:el asistente como ya he comentado en mas de alguna ocasin, genera dos archivos
de cdigo fuente, el .h y el .c esta es la forma correcta de trabajar en C, la famosa frase de
divide y vencers es perfectamente aplicable a la programacin en C, si sigo utilizando un
solo archivo para todo el cdigo es porque de momento los archivos son muy pequeos y me
resulta ms cmodo incluir una imagen en el sitio en vez de dos. Realmente cuando tengamos
un proyecto grande, estar formado por varios archivos .h y .c
Comentario del programa
Al igual que hacamos con la directiva #bytepara mapear un registro en la memoria RAM y
utilizarlo como una variable ms, con la directiva #bit identificador registro.bitpodemos
mapear un bit en concreto de un registro. Aunque ya vimos que CCS incluye funciones parael manejo de bits, est opcin es muy cmoda de utilizar y har que nuestro cdigo sea ms
portable para utilizar en otros compiladores.
#int_EXT
void EXT_isr(void)
{
//pon aqu el cdigo de la interruptor
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
17/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
17
}
Esta parte como ya sabis nos la crea el asistente e incluye la funcin de interrupcin, donde
tendremos que incluir el cdigo que queremos que se ejecute, cuando se active la
interrupcin externa por la patilla RB0. En nuestro caso lo que hace es comprobar si el
interruptor de desactivacin est abierto, si es as, activar la alarma conectada a RB7. Y
permanecer en un bucle infinito hasta que la desactivemos por medio del interruptor.
Si el interruptor est cerrado y pulsamos el sensor de alarma la interrupcin se producir
igualmente, pero al no cumplirse la condicin del if no ejecutar ninguna sentencia.
Dentro del bloque principal main, tenemos las sentencias que habilitan las interrupciones
globales y la particular a RB0.
enable_interrupts(GLOBAL);
globalenable_interrupts(INT_EXT);
Nota: Por defecto la activacin de la interrupcin se produce en el flanco de subida, si
queremos que sea en el flanco descendente podemos hacerlo por medio de la funcin:
ext_int_edge(flanco)
Ejemplo:
ext_int_edge(L_TO_H);--> flanco de subida.
ext_int_edge(H_TO_L);--> flanco de bajada.
Si no queremos utilizar las funciones de CCS. Podemos modificar directamente el bit INTEDG
Ejemplo:
#bit INTEDG=0x81.6
INTEDG=1;//flanco ascendente
INTEDG=0;//flanco descendente
Para ver como realmente CCS maneja estos registros lo podemos ver si ejecutamos el
programa paso a paso en Proteus, si paramos la simulacin en el bucle while de la funcin
principal obtendremos lo que se muestra en la figura de abajo. Donde se puede ver el estado
de los bits de configuracin:
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
18/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
18
INTEDG=1(Flanco de activacin ascendente, el que tiene por defecto)
GIE= 1(Permitidas las interrupciones globales)
INTE=1 (Permiso de activacin interrupcin RB0/INT)
INTF=0 (Sealizacin de interrupcin)
Si ponemos un Breakpoint en el if que hay dentro de la rutina de interrupcin y pulsamos el
sensor de alarma para activar la interrupcin los valores de los bits sern estos:
INTEDG=1(Flanco de activacin ascendente, el que tiene por defecto)
GIE= 0(No permite otra interrupcin mientras no se salga de esta)
INTE=1(Permiso de activacin interrupcin RB0/INT, da igual que este a 1 por que
la global est a 0)
INTF= 1(Sealizacin de interrupcin)
Al salir de la interrupcin los bits de configuracin vuelven a quedar como al principio, a la
espera de que se vuelva a producir otra interrupcin.
El bit de sealizacin INTF no lo hemos usado en este ejemplo, pero en cualquier otro ejemplo
podremos leer su valor y utilizarlo para lo que queramos.
-
7/25/2019 Interrupciones en el pic16f84a Arquitectura de computadoras
19/19
Instituto Tecnolgico de Iguala
Arquitectura de Computadoras
19
ConclusinA travs de esta investigacin puedo determinar la importancia de las interrupciones en el
manejo de un PIC que en este caso es el F1684A, para mi esta importancia reside en el
programar el PIC para atender varios eventos, eventos de los cuales no conocemos cuando
o como ocurrirn pero se tienen en cuenta en la programacin ya que se sabe que van a
ocurrir y tener una subrutina de cdigo necesaria para atender la interrupcin de forma
ptima, si bien con lo expuesto en este documento se pueden determinar los diferentes
tipos de interrupciones que existen para nuestro PIC adems de cmo se modifican las
diferentes configuraciones para cada tipo de interrupcin ya que una interrupcin no solo
comprende a un evento en especfico esperado pero gracias a las especificaciones
incluidas en este documento sobre el pic se alcanza a comprender un poco el panorama
aunado a ejemplos que fortalecen en entendimiento de las interrupciones, todo esto en
conjunto compone una gran herramienta para el programador, en este caso encuentro esta
herramienta de gran utilidad para diversas aplicaciones que con ms estudio y
conocimientos que completen mi aprendizaje me permitan elaborar sistemas de control
como por ejemplo de riego automtico, en este ejemplo encuentro un uso para lasinterrupciones de forma que si en su proceso de riego a la hora de activar un sistema
hidrulico para el riego, cuenta con un contenedor con un sensor de deteccin de nivel de
agua que puede activar una bomba para su llenado automtico, se mide el nivel de agua,
si es bajo se interrumpa la accin de riego si es que se est llevando acabo y se activen
unas marcas que permitan la activacin de la bomba de agua que abastezca el contenedor
y al llegar al indicador de nivel mximo acabe la subrutina contine con la funcin de riego.
Siendo as encuentro las interrupciones de gran ayuda y con un amplio rango de
aplicaciones en distintas ramas y de las cuales puedo sacar un gran provecho en un futuro
cercano que me permitan integrar todos mis conocimientos en proyectos innovadores.
BibliografaRecursos impresos:
PIC16F84A Data-Sheet,Microchip Technology Inc,2001.
Recursos web:
AquiHayapuntes-biblioman 25 Noviembre 2013
www.aquihayapuntes.com
tutoriales PIC- ANTONIO S. 22 DE JUNIO DE 2012
picfernalia.blogspot.mx
Ero-PIC- de rueda luis 2007
perso.wanadoo.es
PIC 16F84 una gua para el aprendizaje-Luis Galeano Ivan De Giacomi Jabet Sanchez 2008
entrrnadorpic16f84.wordpress.com/
Punto Flotante S.A.- Punto Flotante S.A. 2004
www.puntoflotante.net
El PIC16F84A Curso avanzado de Microcontroladores PIC- Cekit
http://www.utp.edu.co/
Are you reading the datasheet? Siddhart 2013
http://embedjournal.com/