You are on page 1of 11

PRACTICAS DE LABORATORIO N 01 MANEJO DE MPLAB X Y PROTEUS

PRACTICAS DE LABORATORIO N 02 MANEJO DE PERIFERICOS BASICOS E INSTRUCCIONES BASICAS

PRACTICAS DE LABORATORIO N 03 MANEJO Y CONTROL DE PERIFERICOS E INSTRUCCIONES AVANZADAS

PRACTICAS DE LABORATORIO N 04 MANEJO DE RETARDOS

PRACTICAS DE LABORATORIO N 05
MANEJO DE INTERRUPCIONES

I.

TEMA :

INTERRUPCIONES EN EL MICROCONTROLADOR PIC-16F84A

II.

OBJETIVO DE LA PRACTICA Al finalizar la presente prctica, el estudiante: 1. Describe los mecanismos de gestin de interrupciones en el PIC 16F84A. 2. Escribe programas en lenguaje Ensamblador para la gestin de interrupciones en el PIC 16F84A.

III.

TRABAJO PREPARATORIO. 1. Conceptos bsicos de organizacin y arquitectura del PIC 16F84A. 2. Conocimiento de programacin modular en el PIC 16F84A. 3. Conocimientos de organizacin de entrada/salida en el PIC 16F84A.

IV.

MATERIALES. 1. 2. 3. 4. 5. IDE MPLAB X para la programacin. PROTEUS VSM para la simulacin de del Sistema Modulo de entrenamiento PIC Perifricos, sensores y actuadores Grabador PICKIT

V.

MARCO TEORICO INTERRUPCIONES Las interrupciones son un mecanismo que le permite al micro controlador interactuar de manera eficiente con los dispositivos perifricos. A diferencia de la entrada/salida programada, en la que el micro controlador debe verificar explcitamente cada dispositivo para verificar su estado y comprobar si este tiene datos para el sistema (en el caso de entrada) o si est listo para recibir un dato del sistema (en el caso de salida); en la entrada/salida basada en interrupciones, el micro controlador atiende a los dispositivos perifricos solo cuando el perifrico notifica explcitamente al micro controlador sobre la disponibilidad de datos de entrada o la disponibilidad del perifrico para recibir una palabra del micro controlador. Esta forma de gestin de la entrada/salida, le permite al micro controlador atender su responsabilidad principal de ejecutar programas, dejando de realizar tal funcin solo en casos estrictamente necesarios.

INTERRUPCIONES EN EL PIC 16F84A

En esta prctica 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 a travs 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 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:

VI.

TRABAJO DE LABORATORIO. 1. Escriba un programa que detecte las interrupciones externas generadas por la presin de un interruptor conectado a travs de la entrada RB0 del puerto B. Cada vez que ocurra una interrupcin, el programa deber prender y apagar un diodo LED conectado a terminal RB1. Solucin Para ilustrar este ejercicio utilizaremos el programa Proteus. En el mismo, diseamos el diagrama correspondiente, que debe quedar como muestra el siguiente grfico:

En el IDE MPLAB, escribimos el programa correspondiente:

;---------------Encabezado------------LIST P=16F84 #include <P16F84.INC> ;-------Configuracin de puertos------ORG GOTO ORG GOTO ORG 0x00 inicio 0x04 ISR 0X05 STATUS,RP0 ; configurando puertos 0x01 ; carga w con 0000 0001 TRISB ; RB0/INT es entrada

inicio BSF MOVLW MOVWF BCF BCF

OPTION_REG,6 ; seleccionamos flanco descendente STATUS,RP0

;-------Habilitacin de interrupciones------BSF INTCON,GIE ; habilitamos todas las interrupciones BSF INTCON,INTE ; que sean interrupciones externas CLRF PORTB ; limpio el puerto B sueo SLEEP GOTO sueo

; Dulces sueos...!!!

;-------------Rutina de servicio de interrupciones------------ISR BTFSC PORTB,0 GOTO ISR ; verificamos que suelten el pulsador

BTFSC PORTB,1 ; y ahora s, si el led est a 1 GOTO off_led ; ire a off_led para apagarlo BSF PORTB,1 ; sino, enciendo el LED BCF INTCON,INTF ; borro bandera de interrupcin RETFIE off_led BCF PORTB,1 ; apago el LED BCF INTCON,INTF ; borro bandera de interrupcin RETFIE ;-----------------------------------------END ;------------------------------------------

ANLISIS DEL PROGRAMA


ORG GOTO 0x04 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. BCF OPTION_REG,6; seleccionamos flanco descendente

Es la instruccin para configurar la interrupcin con el flanco de bajada, 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 BSF INTCON,GIE INTCON,INTE ; habilitamos todas las interrupciones ; 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, 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. si no se pusiera 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. Pero bueno, ahora nos quedamos a dormir con el micro hasta que se active el pulsador de RB0/. luego al presionar el pulsador otra vez regresar a: ORG GOTO 0x04 ISR

Lo que viene, es la rutina de servicio de interrupcin ISR y comenzamos con un... ISR BTFSC GOTO PORTB,0 ISR etiqueta que atiende la interrupcin (pude haber puesto rut_serv u PORTB,0, prevenimos los rebotes, no se si era necesario ya que para este pin, pero por si las moscas lo puse, en realidad suele pasar se genera una pequea chispa, la cual ya conocemos como rebote lo puse por prevencin. ; verificamos que suelten el pulsador

ISR no es una instruccin, sino la otra cosa, en fin...). Con BTFSC seleccionamos flanco descendente que cuando se libera el pulsador elctrico, slo

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.

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 de RB0/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 ... ORG GOTO 0x04 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 Terminamos el programa con END

VII.

PRACTICAS DE LABORATORIO 1. Disee un programa que cuente de 0 a 9 mediante interrupcin externa RB0 y que el valor se muestre por un display conectado directamente al puerto A.

VIII. BIBLIOGRAFA LIBROS 1. Angulo Jos et. al. Microcontroladores PIC. Diseo Practico De Aplicaciones. Primera Parte. El PIC 16f84 Lenguaje Pbasic y Ensamblador. Tercera edicin. Editorial Mc Graw Hill. 2. Di Jasio et.al. PIC Microcontrollers. Know It All. Editorial Newnes 2008. 3. Matic. The PIC Microcontroller. Book 1 2000 4. Palacios Enrique et. al. Microcontrolador PIC 16f84. Desarrollo De Proyectos. Segunda edicin. Editorial Alfaomega 2006.

You might also like