UNIDAD 3 Transistres
UNIDAD 3 Transistres
Corrimiento de LED´s 2.
PRÁCTICA 3
Índice
Objetivo 2
Temas relacionados 2
1 Marco teórico 2
1.1 Interrupciones 2
1.2 Timer0 del PIC 16F887 3
1.3 Registro OPTION_REG 5
1.4 Registro INTCON 6
Desarrollo 8
Material y/o equipo utilizado 15
Conclusiones 15
Fuentes de información 15
2
Objetivo
Utilizar adecuadamente puertos, módulos de timer e interrupciones en lenguaje
ensamblador, en el desarrollo de la aplicación “Corrimiento de LED´s”.
Mediante la configuración del TMR0, lograr un retardo de 0.5segundos, y además mantener
otra variable de control para encender/apagar leds en secuencia.
Temas relacionados
Funcionamiento del registro OPTION_REG
Funcionamiento del registro INTCON
Funcionamiento de las interrupciones, así como del timer0
1 Marco teórico
1.1 Interrupciones
Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea
que está realizando para atender dicho acontecimiento y luego regrese y continúe la tarea
que estaba realizando antes de que se presentara la interrupción.
Cada modelo de microcontrolador PIC tendrá una serie de interrupciones que podrá
detectar, para que se detecten las interrupciones con el PIC, es necesario programar algunos
registros dependiendo de cuál se quiere que sea la causa de las interrupciones, se tienen
registros para habilitar las interrupciones con el PIC y registros para detectar cuando se han
producido interrupciones.
El PIC16F882 / 883/884/886/887 tiene múltiples fuentes de interrupción:
Interrupción externa RB0 / INT
Interrupción de desbordamiento del temporizador0
Interrupciones de cambio de PORTB
Interrupciones del comparador
Interrupción A / D
Interrupción de desbordamiento del temporizador1
Interrupción de coincidencia del temporizador2
Escritura de datos EEPROM Interrupción
Monitor de reloj a prueba de fallas Interrupción
Interrupción de CCP mejorada
Interrupciones de recepción y transmisión EUSART
Interrupción de activación de energía ultra baja
Interrupción MSSP
El registro de control de interrupción (INTCON) y el Registro de solicitud de interrupción
periférica (PIR1) registra solicitudes de interrupción individuales en bits de bandera.
3
PS2, PS1, PS0 Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia)
PS2 PS1 PS0 TMR0 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
Desarrollo
Para llevar a cabo dicha práctica, se realizaron los cálculos correspondientes para obtener
los valores que se necesitarían para que el contador estuviese proporcionando un retardo de
0.5 segundos, los cuales son los siguientes:
Fosc 4 MHz
Frec . ciclo= = =1 MHz
4 4
1
Tiempo=Tcy= =1 μseg
1 MHz
Tiempo deseado 0.5 seg
¿ Tcys= = =500,000
Tcy 1 μseg
Con esto deducimos:
500,000=(¿ sobrepasamientos)(¿ pulsos /sobrepasamiento)( prescalador)
El prescalador tiene valores constantes, así que se estuvieron haciendo combinaciones hasta
lograr que nos diera un valore entero. Entre los valores que resultaron correctos para la
práctica son los siguientes:
( sobrepasamientos
( 250¿ sobrepasamientos ) 250 ¿
pulsos
) ( 8 prescalador ) =500,000
( 125¿ sobrepasamientos ) (250 ¿
sobrepasamientos )
pulsos
( 16 prescalador )=500,000
Por lo que se tomó la combinación de 16 de prescalador. Por lo que los valores del registro
OPTION_REG fueron los siguientes:
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
1 1 0 1 0 0 1 1 =D3
Los valores que se asignaron al registro INTCON para activar las interrupciones son:
GIE PEIE T0IE INTE RBIE T0IE INTF RBIF
1 0 1 0 0 0 0 0
Ya que se obtuvieron los valores, se procedió con el diseño del diagrama de flujo, el cual
nos estaría facilitando el proceso al momento de realizar el programa en el programa
9
MPLAB X IDE. Teniendo en mente el objetivo, se realizaron dos diagramas de flujo, los
cuales estaban conectados, esto debido a que no se contaría con la función de retardo.
Una vez con el programa finalizado se procede a realizar las pruebas desde ese mismo
programa, para ello es necesario hacer comentario la todos los goto salir y al goto aqui,
debido a que no nos permitiría verificar el código, todo esto con el uso de “;”
Una vez que se cuenta con el circuito en Proteus, se procede a realizar la importación del
archivo .hex generado al compilar nuestro programa en el programa MPLAB X IDE, cuya
ubicación en mi caso es la siguiente dirección:
C:\Users\Efren\Documents\Microcontroladores\Proyectos PICs\Ensamblador\Practica3.X\
dist\default\production
Para ello se debe dar doble clic al microprocesador y posteriormente seleccionar el archivo
como se muestra a continuación:
Una vez importado nuestro archivo, se procede a correr la simulación, donde se pudo
observar el siguiente resultado:
Para hacerlo en físico, se conecta de la misma forma que en el Proteus, sin embargo, es
necesario cargar al PIC el programa mediante el uso del programador de pic’s y el
programa PICKit 2 Programmer. En este programa es muy simple el realizarlo, solo es
cuestión de que la computadora reconozca el PIC, se importe el archivo .hex y se complete
la programación.
Recordar que la resistencia que se utilizó fue de 330Ω esto debido a que el led solo puede
soportar como máximo 20mA, sin embargo, en la vida real se utiliza un valor distinto el
cual es un margen razonable de seguridad, por lo que se estaría tomando un valor de 15mA,
aplicando la siguiente formula es que obtenemos dicho valor:
V 5V
R= = =333.333 Ω ≈ 330Ω
I 15 mA
15
Conclusiones
Mediante esta práctica se pudo conocer el funcionamiento de dos registros muy útiles, los
cuales son el OPTION_REG y el INTCON, los cuales se emplearon para generar un retardo
producto de una interrupción por parte del Timer0.
Con la realización de dicha práctica se pudo observar el funcionamiento de las
interrupciones en un microcontrolador y como es que se debe configurar los dos registros
para que se pueda atender en el momento que se requiere.
Fuentes de información