Vous êtes sur la page 1sur 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 práctica, el estudiante:

  • 1. Describe los mecanismos de gestión de interrupciones en el PIC 16F84A.

  • 2. Escribe programas en lenguaje Ensamblador para la gestión de interrupciones en el PIC 16F84A.

III.

TRABAJO PREPARATORIO.

  • 1. Conceptos básicos de organización y arquitectura del PIC 16F84A.

  • 2. Conocimiento de programación modular en el PIC 16F84A.

  • 3. Conocimientos de organización de entrada/salida en el PIC 16F84A.

IV.

MATERIALES.

  • 1. IDE MPLAB X para la programación.

  • 2. PROTEUS VSM para la simulación de del Sistema

  • 3. Modulo de entrenamiento PIC

  • 4. Periféricos, sensores y actuadores

  • 5. Grabador PICKIT

V.

MARCO TEORICO

INTERRUPCIONES

Las interrupciones son un mecanismo que le permite al micro controlador interactuar de manera eficiente con los dispositivos periféricos. A diferencia de la entrada/salida programada, en la que el micro controlador debe verificar explícitamente 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 periféricos solo cuando el periférico notifica explícitamente al micro controlador sobre la disponibilidad de datos de entrada o la disponibilidad del periférico para recibir una palabra del micro controlador. Esta forma de gestión de la entrada/salida, le permite al micro controlador atender su responsabilidad principal de ejecutar programas, dejando de realizar tal función solo en casos estrictamente necesarios.

INTERRUPCIONES EN EL PIC 16F84A

En esta práctica vamos a ver el uso de la interrupción externa a través de la
En esta práctica
vamos a ver el uso de la interrupción externa a través 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:

INTERRUPCIONES EN EL PIC 16F84A En esta práctica vamos a ver el uso de la interrupción

En cuanto a los pines del PIC la señal externa para producir la interrupción en el PIC será a través de de la patilla 6 y se podrá determinar por software que flanco de la señal producirá la interrupción, el de subida (cuando la señal pasa de un nivel 0 a 1) ó el de bajada (cuando pasa de 1 a 0).

Vamos a ver ahora los registros específicos (SFR) que nos proporciona el PIC para el control de esta interrupción.

 INTEDG: flanco activo interrupción externa.  1- la interrupción se producirá en el flanco ascendente.

INTEDG: flanco activo interrupción externa.

1- la interrupción se producirá en el flanco ascendente. 0- la interrupción se producirá en el flanco descendente. GIE: (Habilita las interrupciones globalmente). Este bit permite que cualquier interrupción sea posible.

Para poder usar cualquier interrupción hay que habilitarla globalmente e individualmente. INTE: Permiso de interrupción por activación de la patilla RB0/INT

1- permite la interrupción 0- prohíbe la interrupción INTF: bit de señalización (solo lectura) de interrupción 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 presión de un interruptor conectado a través de la entrada RB0 del puerto B. Cada vez que ocurra una interrupción, el programa deberá prender y apagar un diodo LED conectado a terminal RB1.

Solución

Para ilustrar este ejercicio utilizaremos el programa Proteus. En el mismo, diseñamos el diagrama correspondiente, que debe quedar como muestra el siguiente gráfico:

 INTEDG: flanco activo interrupción externa.  1- la interrupción se producirá en el flanco ascendente.

En el IDE MPLAB, escribimos el programa correspondiente:

;---------------Encabezado-------------

LIST

P=16F84

#include

<P16F84.INC>

;-------Configuración de puertos-------

ORG

0x00

GOTO inicio

 

ORG

0x04

GOTO ISR

 

ORG

0X05

inicio

BSF

STATUS,RP0

; configurando puertos

MOVLW

0x01

; carga w con 0000 0001

MOVWF

TRISB

; RB0/INT es entrada

BCF

OPTION_REG,6

; seleccionamos flanco descendente

BCF

STATUS,RP0

;-------Habilitación de interrupciones-------

BSF

INTCON,GIE

; habilitamos todas las interrupciones

BSF

INTCON,INTE

; que sean interrupciones externas

CLRF

PORTB

; limpio el puerto B

sueño

SLEEP

GOTO sueño

; Dulces sueños

...

!!!

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

ISR

BTFSC PORTB,0

; verificamos que suelten el pulsador

GOTO ISR

BTFSC PORTB,1

; y ahora sí, si el led está a 1

GOTO off_led

BSF

PORTB,1

; ire a off_led para apagarlo ; sino, enciendo el LED

INTCON,INTF

BCF

; borro bandera de interrupción

RETFIE

off_led

BCF

PORTB,1

; apago el LED

BCF

INTCON,INTF

; borro bandera de interrupción

RETFIE

;------------------------------------------

END

;------------------------------------------

ANÁLISIS DEL PROGRAMA

ORG

0x04

GOTO

ISR

La primera línea es el vector de interrupción, y cuando ésta se produzca, el código de programa apuntará a esta dirección y continuará con la siguiente instrucción, es decir GOTO ISR, la cual es un salto a ISR (Rutina de Servicio de Interrupciones) para atender dicha interrupción.

Configuramos el puerto B, como habrás notado, hemos configurado RB0/INT como entrada y el resto de los bits como salida.

BCF OPTION_REG,6; seleccionamos flanco descendente

Es la instrucción para configurar la interrupción con el flanco de bajada, entonces vamos al registro OPTION y ponemos el BIT6 a "0" de este modo la interrupción se producirá cuando suelten el pulsador.

Ahora pasamos a lo más interesante, la habilitación de las interrupciones ...

BSF

INTCON,GIE

; habilitamos todas las interrupciones

BSF

INTCON,INTE

; que sean interrupciones externas

Observa que la habilitación de interrupciones se hace en el banco0 ya que el Registro INTCON se encuentra en este banco. Bien, En la primera línea hacemos una habilitación general de todas las interrupciones, hacemos GIE=1, en la segunda línea, habilitamos interrupciones externas, hacemos INTE=1, recuerda que la bandera para la interrupción por el pin RB0/INT es INTF, no lo olvides, pues esta cambiará cuando la interrupción se produzca y luego de atenderla deberemos volverla a cero.

Lo que viene ahora es simplemente limpiar el puerto B, y luego ...

sueño

SLEEP

GOTO

sueño

SLEEP es la instrucción 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 ejecutaría la instrucción SLEEP el micro entraría en reposo hasta que se produce la interrupción, lo cual dijimos anteriormente que es como una llamada (un call), cuando regrese se encontrará con GOTO sueño y lo volveremos a dormir.

si no se pusiera el GOTO sueño, cuando regrese de la interrupción pasaría a la ISR (Rutina de servicio de interrupción), y lo peor de todo, es que lo haría sin que se produzca la interrupción. 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

0x04

GOTO

ISR

Lo que viene, es la rutina de servicio de interrupción ISR y comenzamos con un ...

ISR

BTFSC

PORTB,0

; verificamos que suelten el pulsador

GOTO

ISR

ISR no es una instrucción, sino la etiqueta que atiende la interrupción (pude haber puesto rut_serv u

otra cosa,

en

fin

).

Con BTFSC

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 pequeña chispa, la cual ya conocemos

como rebote

eléctrico,

sólo

lo

puse

por

prevención.

Ahora si atenderemos la interrupción, 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 línea si es así.

Bien

...

como recién iniciamos, el LED está apagado, por lo tanto saltamos una línea y pasamos a

...

BSF PORTB,1

es decir hacemos RB1=1 (prendemos el LED). Perfecto, la interrupción 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 interrupción

Obviamente al producirse la interrupción se hizo GIE=0 para darnos lugar a atenderla, entonces ...

RETFIE

y ahora GIE=1, las interrupciones están nuevamente habilitadas la bandera de RB0/INT está lista para una nueva interrupción y retornamos a ...

sueño

SLEEP

GOTO

sueño

y esperaré a que pulses RB0, pues si ya lo hiciste habrás ido por segunda vez a ...

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 harás un ...

...

GOTO off_led

; ire a off_led para apagarlo

simplemente

un salto a la etiqueta off_led ...

off_led BCF PORTB,1 ; sino, apago el LED

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

BCF INTCON,INTF ; borro bandera de interrupción

RETFIE

Terminamos el programa con

END

VII. PRACTICAS DE LABORATORIO

  • 1. Diseñe un programa que cuente de 0 a 9 mediante interrupción externa RB0 y que el valor se muestre por un display conectado directamente al puerto A.

VIII. BIBLIOGRAFÍA LIBROS

  • 1. Angulo José et. al. Microcontroladores

PIC. Diseño Practico

De Aplicaciones. Primera

Parte. El PIC 16f84 Lenguaje Pbasic y Ensamblador.

Tercera edición. 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

edición. Editorial Alfaomega 2006.