código y simulación de conteo hexadecimal pic16f84a

6
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

Upload: serolfitnas

Post on 24-Jul-2015

1.796 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Código y Simulación de Conteo Hexadecimal PIC16F84A

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

Page 2: Código y Simulación de Conteo Hexadecimal PIC16F84A

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

Página 2 de 5

Figura 2. Diagrama de flujo del programa.

0 01111110 7EH1 00001100 0CH2 10110110 B6H3 10011110 9EH4 11001100 CCH5 11011010 DAH6 11111010 FAH7 00001110 0EH8 11111110 FEH9 11001110 CEHA 11101110 EEHB 11111000 F8HC 01110010 72HD 10111100 BCHE 11110010 F2HF 11100010 E2H

Contador = 0B -> Contador

Contador=0FH

Contador = Contador + 1B -> Contador

INT=1

Configuración de los bit’s para interrupciónContador = 0B -> Contador

Configuración PIC

INICIO

Page 3: Código y Simulación de Conteo Hexadecimal PIC16F84A

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

0CCH,0DAH,0FAH,0EH,0FEH,0CEH,0EEH,0F8H,72H,0BCH,0F2H,0E2H

END ; FIN DEL PROGRAMA

Simulación.

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

Page 4: Código y Simulación de Conteo Hexadecimal PIC16F84A

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

Page 5: Código y Simulación de Conteo Hexadecimal PIC16F84A

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.

Página 5 de 5