Instrucciones. Empleando el PIC16F84, realizar un programa que realice un conteo ascendente en hexadecimal de 0 a F el cual será controlado mediante la técnica de interrupción externa empleando el pin RB0/INT del PIC, además realizar la simulación e implementación física de este en un circuito donde el conteo se irá mostrando en un display de 7 segmentos. Descripción del programa. El programa consta de emplear la técnica de interrupción externa del pin RB0/INT para interrumpir la constante ejecución de una parte cíclica del programa y así al realizarse la interrupción controlar un conteo hexadecimal de 0 a F de manera ascendente e infinita, es decir, una vez que se llegue a F en el conteo regrese a comenzar nuevamente en 0. Para poder obtener dicho conteo en un display de 7 segmentos, se emplea el uso de las tablas de datos en la programación y así obtener en el puerto B las cadenas de bits que iluminan cada segmento del display de acuerdo al conteo. Debido a que en el puerto B el bit 0 o RB0 ya se esta empleando para la interrupción, las cadenas de bits para el display tienen un bit mas, siendo así solo los bits después el primero los que corresponden a los segmentos del display estando acomodados de la manera “g-f-e-d-c-b-a-RB0”, siendo la identificación de cada segmento las mostradas en la figura 1. Observe el diagrama de flujo de la figura 2 para entender con mayor claridad el programa. Página 1 de 6
6
Embed
Código y Simulación de Conteo Hexadecimal PIC16F84A
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Instrucciones.
Empleando el PIC16F84, realizar un programa que realice un conteo ascendente en hexadecimal de 0 a F el cual será controlado mediante la técnica de interrupción externa empleando el pin RB0/INT del PIC, además realizar la simulación e implementación física de este en un circuito donde el conteo se irá mostrando en un display de 7 segmentos.
Descripción del programa.
El programa consta de emplear la técnica de interrupción externa del pin RB0/INT para interrumpir la constante ejecución de una parte cíclica del programa y así al realizarse la interrupción controlar un conteo hexadecimal de 0 a F de manera ascendente e infinita, es decir, una vez que se llegue a F en el conteo regrese a comenzar nuevamente en 0. Para poder obtener dicho conteo en un display de 7 segmentos, se emplea el uso de las tablas de datos en la programación y así obtener en el puerto B las cadenas de bits que iluminan cada segmento del display de acuerdo al conteo. Debido a que en el puerto B el bit 0 o RB0 ya se esta empleando para la interrupción, las cadenas de bits para el display tienen un bit mas, siendo así solo los bits después el primero los que corresponden a los segmentos del display estando acomodados de la manera “g-f-e-d-c-b-a-RB0”, siendo la identificación de cada segmento las mostradas en la figura 1. Observe el diagrama de flujo de la figura 2 para entender con mayor claridad el programa.
Figura 1. Identificación de los segmentos en el display.
Página 1 de 5
Código.
#INCLUDE <P16F84A.INC>__CONFIG _CP_OFF& _XT_OSC& _WDT_OFF& _PWRTE_ON ; DIRECTIVASCOUNT EQU 0CH ; ASIGNA A “COUNT” LA DIRECCION DE MEMORIA 0CHORG 0000H ; DIRECCION DEL INICIO DEL PORGRAMAGOTO BEGIN ; SALTO A LA SECCION “BEGIN”ORG 0004H ; DIRECCIÓN ORIGEN PARA LA INTERRUPCIONGOTO INTER ; SALTO A LA SECCION “INTER”
BEGIN: BSF STATUS,RP0 ; CAMBIO DEL BANCO 0 AL BANCO 1MOVLW 01H ; CARGA AL REGISTRO DE TRABAJO UN 1MOVWF TRISB ; ESTABLECE AL PRIMER BIT DEL PUERTO B COMO
ENTRADABSF INTCON,INTE ; ACTIVACION DE LA INTERRUPCION EXTERNA
Configuración de los bit’s para interrupciónContador = 0B -> Contador
Configuración PIC
INICIO
BSF OPTION_REG,INTEDG ; ASIGNACION DEL FLANCO POSITIVO PARA LA INTERRUPCION
BSF INTCON,GIE ; ACTIVACION DE INTERRUPCIONES GLOBALESBCF STATUS,RP0 ; CAMBIO DEL BANCO 1 AL BANCO 0CLRF PORTB ; LIMPIEZA DEL PUERTO BCLRF COUNT ; LIMPIEZA DE “COUNT”MOVF COUNT,0 ; COLOCA EL VALOR DE “COUNT” EN EL
REGISTRO DE TRABAJO
CALL TAB ; LLAMA A LA SUBRUTINA “TAB”MOVWF PORTB ; MUEVE EL VALOR DEL REGISTRO DE TRABAJO AL
PUERTO BCICLO: GOTO CICLO ; CICLO EMPLEADO PARA ESPERAR LA INTERRUPCIONINTER: BTFSS INTCON,INTF ; PRUEBA EL ESTADO DEL BIT “INTF” DEL REGISTRO
“INTCON”RETFIE ; REGRESA AL PROGRAMA DESPUES DE LA
INTERRUPCIONBCF INTCON,INTF ; LIMPIA EL BIT “INTF” DEL REGISTRO “INTCON”INCF COUNT,1 ; INCREMENTA AL CONTADOR “COUNT” EN 1MOVF COUNT,0 ; CARGA EL VALOR DE “COUNT” AL REGISTRO
DE TRABAJO
SUBLW 010H ; SE RESTA EL REGISTRO DE TRABAJO DE 16 (010H)BTFSS STATUS,C ; PRUEBA EL ESTADO DE LA BANDERA DE CEROSCLRF COUNT ; SI EL ESTADO INDICA HABER UN CERO EN EL
RESULTADO DE LA RESTA, SE LIMPIA “COUNT”MOVF COUNT,0 ; CARGA EL VALOR DE “COUNT” AL REGISTRO
DE TRABAJO
CALL TAB ; LLAMA A LA SUBRUTINA “TAB”MOVWF PORTB ; CARGA EL VALOR DEL REGISTRO DE TRABAJO AL
PUERTO BRETFIE ; REGRESA AL PROGRAMA DESPUES DE LA
INTERRUPCIONTAB: ADDWF PCL,1 ; SE SUMA EL REGISTRO DE TRABAJO CON PCL Y EL
RESULTADO SE GUARDA EN PCL PARA SELECCIONAR LA CADENA DE BITS QUE CORRESPONDA AL VALOR DEL CONTEO
DT 7EH,0CH,0B6H,9EH, ; CADENAS BINARIAS REPRESENTADAS EN HEXADECIMAL
Como en las dos anteriores prácticas, se empleó el mismo esquemático base del PIC16F84A. La totalidad del puerto A se dejó sin conectar y solamente fue colocado un estado lógico en RB0 para el incremento o decremento mediante interrupción. Al resto de los pines del puerto B le fueron colocados un display de 7 segmentos de cátodo común de color verde. Ya armado el diseño correcto (ver Figura 3), se cargó el programa “practica9.hex” al PIC virtual.
Página 3 de 5
Figura 3. Diseño del circuito requerido en la práctica en Proteus utilizando el PIC16F84A.
La simulación del diseño y del programa realizado si fue el esperado, a la par que diversas pruebas fueron realizadas. Todos los números de la serie se muestran en la figura 4. Al momento en que se colocaba en alto el estado lógico correspondiente al bit de interrupción RB0, el conteo de 0 a F se iba recorriendo número por número de forma ascendente, como se observa en las figuras 5, 6 y 7. Como se sabe, en esta simulación y en toda la práctica, esta vez no existió un conteo de forma descendente.
Figura 4. Números mostrados en el display de 7 segmentos virtual de todo el conteo de forma ascendente.
Figura 5. Simulación del código, mostrando en el display el número 0 en modo de corrimiento ascendente.
Página 4 de 5
Figura 6. Simulación del código, mostrando en el display el número 1 en modo de corrimiento ascendente.
Figura 7. Simulación del código, mostrando en el display el número 2 en modo de corrimiento ascendente.