practicas de laboratorio microcontroladores

Upload: johan-silva

Post on 16-Oct-2015

44 views

Category:

Documents


0 download

TRANSCRIPT

PRACTICAS DE LABORATORIO N 01MANEJO DE MPLAB X Y PROTEUS

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

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

PRACTICAS DE LABORATORIO N 04MANEJO DE RETARDOS

PRACTICAS DE LABORATORIO N 05MANEJO 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 elPIC 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. IDE MPLAB X para la programacin.2. PROTEUS VSM para la simulacin de del Sistema3. Modulo de entrenamiento PIC4. Perifricos, sensores y actuadores5. 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/INT1- permite la interrupcin0- prohbe la interrupcin INTF: bit de sealizacin (solo lectura) de interrupcin externa RB0/INTPara 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-------------

LISTP=16F84#include

;-------Configuracin de puertos-------

ORG0x00GOTOinicioORG0x04GOTO ISRORG0X05

inicioBSFSTATUS,RP0 ; configurando puertosMOVLW0x01 ; carga w con 0000 0001MOVWFTRISB ; RB0/INT es entrada

BCFOPTION_REG,6 ; seleccionamos flanco descendenteBCFSTATUS,RP0

;-------Habilitacin de interrupciones-------

BSFINTCON,GIE ; habilitamos todas las interrupcionesBSFINTCON,INTE ; que sean interrupciones externasCLRFPORTB ; limpio el puerto B

sueoSLEEPGOTOsueo ; Dulces sueos...!!!

;-------------Rutina de servicio de interrupciones-------------

ISRBTFSCPORTB,0 ; verificamos que suelten el pulsadorGOTO ISR

BTFSCPORTB,1 ; y ahora s, si el led est a 1GOTOoff_led ; ire a off_led para apagarloBSFPORTB,1 ; sino, enciendo el LEDBCFINTCON,INTF ; borro bandera de interrupcinRETFIE

off_ledBCFPORTB,1 ; apago el LEDBCFINTCON,INTF ; borro bandera de interrupcinRETFIE

;------------------------------------------END;------------------------------------------

ANLISIS DEL PROGRAMA

ORG0x04GOTOISR

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 decirGOTO 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.

BCFOPTION_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...

BSFINTCON,GIE; habilitamos todas las interrupciones

BSFINTCON,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...

sueoSLEEPGOTOsueo

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 conGOTO sueoy lo volveremos a dormir.

si no se pusiera elGOTO sueo,cuando regrese de la interrupcin pasara a laISR(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:

ORG0x04GOTOISR

Lo que viene, es la rutina de servicio de interrupcinISRy comenzamos con un...

ISRBTFSCPORTB,0; verificamos que suelten el pulsador

GOTOISR

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 se 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...

BTFSCPORTB,1

BTFSC PORTB,1es probar si el segundo bit (Bit1 de PORTB) est en0, 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...

BSFPORTB,1

es decir hacemosRB1=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...

BCFINTCON,INTF; borro bandera de interrupcin

Obviamente al producirse la interrupcin se hizoGIE=0para darnos lugar a atenderla, entonces...

RETFIE

y ahoraGIE=1, las interrupciones estn nuevamente habilitadas la bandera de RB0/INT est lista para una nueva interrupcin y retornamos a ...

sueoSLEEPGOTOsueo

y esperar a que pulses RB0, pues si ya lo hiciste habrs ido por segunda vez a ...

ORG0x04GOTOISR

prevenimos los rebotes y luego vamos a...

BTFSCPORTB,1

es decir, prueba y salta si el Bit1 de PORTB es cero, y como esta vez el LED est prendido... simplemente hars un...GOTOoff_led; ire a off_led para apagarlo

un salto a la etiqueta off_led...

off_ledBCFPORTB,1; sino, apago el LED

no se si requiere explicacin pero bueno, pones a cero el Bit1 de PORTB. Finalmente...

BCFINTCON,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 LIBROS1. 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 20004. Palacios Enrique et. al. Microcontrolador PIC 16f84. Desarrollo De Proyectos. Segunda edicin. Editorial Alfaomega 2006.