Está en la página 1de 12

UNIVERSIDAD ESTATAL DE SONORA

Unidad Académica Hermosillo

_______________________________________
Práctica No. 3
Contador ascendente
Display de 7 segmentos a 2 dígitos
_______________________________________
Ingeniero en Mecatrónica
Microcontroladores
Profesor: Dr. Jesús Raúl Martínez Sandoval

Estudiante:
Incluir su nombre

Hermosillo, Sonora, México, octubre de 2023.


1. Introducción

Investigar y desarrollar los conceptos.

1) EQU.

2) incf y decf.

3) call y return.

4) subwf y addwf.

5) retlw.

6) nop

7) incfsz y decfsz

8) Display de 7 segmentos.

9) Ciclos anidados.
2. Desarrollo

Conectar el diagrama esquemático de la Figura 1 en Proteus 8.0, para verificar el pro-


cedimiento completo de a) Programación, 2) Compilación, 3) Depuración y 4 Simula-
ción en lenguaje ensamblador del programa correspondiente a la práctica.

El funcionamiento de la práctica es el siguiente:

1. Al ejecutar la simulación deberán activarse el display de 7 segmentos, ambos dígitos,


en el valor de “0”, tanto unidades como decenas.

2.1. Material y equipo:

- Aplicación para elaborar diagramas de flujo (Lucidchart-online).


- MPLAB 2.10 y Compilador MPASM.
- Simulador PROTEUS 8.0.
- Microcontrolador: PIC16F4A (1).
- Resistencias
- R=10 kohms (5).
- R= 10 kohms (2).
- Capacitores
- C= 1 uF (2).
- Display de 7 segmentos de color rojo (7SEG-MPX2-CA) Cátodo común.
- Cristal de 4 MHz (1).
- Push Bottom (2).
- Fuente de alimentación a +5 VCD.

NOTA: Si se realiza la práctica con el microcontrolador PIC16F877A, se debe conside-


rar la actualización de la dirección de memoria de las variables. Ya que inicia, la
memoria de usuario, a partir de las dirección 0x20.

2.2. Diagrama de flujo (Lucidchart-online)

Con base al punto 2.4, interpretar y elaborar el diagrama de flujo correspondiente.


2. 3. Diagrama esquemático en Simulador Proteus.

El diagrama esquemático se presenta en la Figura 1. Donde se puede apreciar la en-


trada hacia el puerto RA0, donde se conecta el botón de incremento y en el puerto B se
conecta hacia el display de 7 segmentos de dos dígitos de color rojo. Así mismo, en el
puerto RA1 y RA2, de conectan los bits de control, para el encendido y apagado de
cada dígito en el display. Por lo tanto, al presionar el botón de incremento, se ingresaría
un 1 digital, el cual se debe contar e incrementar la cuenta en 1, lo que debe aparecer
en el display, de acuerdo a la cantidad de veces que se presione el botón, hasta llegar
a 99, posteriormente, debe reiniciar el contar a 0. El Puerto B va hacia los LED’s co-
rrespondientes a la configuración del display de 7 segmentos (A, B, C, D, E, F, G Y
DP).

Del lado izquierdo se encuentra, el botón de reset con sus resistencia de pull-up, así
como el cristal, oscilador que genera la señal de reloj de 4 MHz, para el funcionamiento
del sistema mínimo, para el microcontrolador PIC16F84A.

A B C D E F G H J K

0 PRÁCTICA No. 23: CONTADOR ASCENDENTE 0

(1)

1 BOTÓN 1
DISPLAY
DE
7 SEGMENTOS
C1 C2 INCREMENTO
1uF 1uF
DOS DÍGITOS
2 2
X1
R3
7SEG-MPX2 - CA
1 2
10k
CRYSTAL- 4 MHz
3 3
U1
RESET 16 OSC1/CLKIN RA0 17
15 OSC2/CLKOUT RA1 18
R2 RA2 1
4 MCLR RA3 2
4 10k RA4/T0CKI 3 4

RB0/INT 6
RB1 7
RB2 8 R5
D1 RB3 9 10k
DIODE RB4 10
5 RB5 11 5
12
RB6
RB7 13 UNIDADES
R1
10k PIC16F84A

6 R4 6
10k

V1 FUENTE DECENAS
5V DE
7 ALIMENTACIÓN 7

8 8

FILE NAME: PRACTICA_2_CONTADOR_ASC.pdsprj


DATE:
17/09/2021
DESIGN TITLE: PRACTICA_2_CONTADOR_ASC.pdsprj
9 PAGE: 9
PATH: C:\Users\RAUL MARTINEZ\Desktop\MICROCONTROLADORES\PRACTICA_2_CONTADOR_AS
1 of 1
BY: @AUTHOR REV:@REV TIME: 12:42:23 p. m.
A B C D E F G H J K

Figura 1. Diagrama esquemático.


2.4. Código fuente en lenguaje ensamblador.

A continuación, se presenta el código fuente de la práctica correspondiente, a partir del


cual se debe elaborar el diagrama de flujo (apartado 2.2). Inicia con su encabezado, la
solución (apartado 2-funcionamiento) y los comentarios , debidamente asignados a
cada línea de código, para la interpretación del mismo. En las mediciones, incluir la
captura de pantalla de la compilación satisfactoria.

; ================== ENCABEZADO ======================================


; DESCRIPCION: PRÁCTICA 2, CONTADOR + BOTON DE INCREMENTO
; ELABORÓ: DR. RAÚL MARTÍNEZ.
; FECHA: 17 DE ASEPTIEMBRE DE 2021.
; LUGAR: HERMOSILLO, SON.
; VERSIÓN: 1.0
; ==============CARGAR LIBRERIAS DEL MICRONCONTROLADOR ===================
LIST P=16F84A ; DE LA LISTA, SELECCIONA EL MICROCONTROLADOR A UTILIZAR.
#INCLUDE <P16F84A.INC> ; SE AGREGA LA LIBRERIA DEL MICROCONTROLADOR .
; ========================== DECLARACION DE VARIABLES ======================
UNIDAD EQU 0x12 ; DIRECCION DE MEMORIA DE LA VARIABLE UNIDAD
DECENA EQU 0x13 ; DIRECCION DE MEMORIA DE LA VARIABLE DECENA
O EQU 0x14 ;DIRECCION DE MEMORIA DE LA VARIABLE O
M EQU 0x15 ;DIRECCION DE MEMORIA DE LA VARIABLE M
N EQU 0x16 ;DIRECCION DE MEMORIA DE LA VARIABLE N
TempUnidad EQU 0x17
R_ContA EQU 0x18
R_ContB EQU 0x19
; ============== DIRECCIÓN DE ORIGEN O RESET ===============================
ORG 0X00
INICIO
; =====CONFIGURACION DE PUERTOS DE ENTRADA =======
bsf STATUS, RP0; ACCESA AL BANCO 1
movlw b'00000001'; CONFIGURA PINES DE ENTRADA RA0
movwf TRISA ; MUEVE LA CONFIGURACIÓN AL REGISTRO TRISA Y CONFIGURA EL PUERTO A
clrf TRISB; CONFIGURA PUERTOB COMO SALIDA.
; =====CONFIGURACION DE PUERTOS DE SALIDA =======
bcf STATUS, RP0; ACCESA AL BANCO 0
; =====LIMPIEZA DE PUERTOS DE ENTRADA Y SALIDA =======
clrf PORTA ; LIMPIA EL PUERTO DE ENTRADA.
clrf PORTB ; LIMPIA EL PUERTO DE SALIDA.
clrf UNIDAD ; LIMPIA EL REGISTRO
clrf DECENA ; LIMPIA EL REGISTRO
clrf TempUnidad ; LIMPIA EL REGISTRO
movlw d'0' ; ASIGNO LA LLITERAL "0" EN W
movwf UNIDAD ; ASIGNO EL REGISTRO W A UNIDAD = 0
; ====================INICIALIZA EL DISPLAY EN CEROS ==========
bsf PORTA,RA2 ; ENCIENDE EL SEGUNDO DIGIGITO - UNIDADES
movlw d'0'
call TablaCodigo
movwf PORTB
bsf PORTA,RA1 ; ENCIENDE EL PRIMER DIGIGITO - UNIDADES
movlw d'0'
call TablaCodigo
movwf PORTB
; ======================== CICLO INFINITO =========================
CICLO
; ================ VERIFICA SI HAY UN UNO EN EL PUERTO A ======
movf PORTA,W ; LEER EL BIT RA0 DEL PUERTOA- PUSHBUTTON
call RETARDO_20ms ; EVITA EL PROBLEMA DE REBOTE DEL BOTON- RETARDO ANTIREBOTE.
call RETARDO_10ms ; EVITA EL PROBLEMA DE REBOTE DEL BOTON- RETARDO ANTIREBOTE.
call DISPLAY ; MANDA LAMAR A LA SUBRUTINA- DISPLAY
btfss PORTA,RA0 ;SALTA SI ES RA0= 1
goto CICLO ; SE VA AL CICLO INFINITO.
goto CONTAR ; SE VA A LA SUBRUTINA CONTAR
;================= INCREMENTA Y CUENTA LOS PULTOS EN RA0 ================
CONTAR
incf UNIDAD,0 ; INCREMENTA EL VALOR DE UNIDAD EN 1 Y SE GUARDA EN UNIDAD
movwf UNIDAD ; PARA VER EL DATO DE UNIDAD EN W
; =================== VERIFICA LA CONDICION-SI CONTADOR LLEGO A 9 ===
movlw d'10' ; MUEVE LA LITERAL '10' A W
subwf UNIDAD,0 ;RESTA UNIDAD - W
btfss STATUS,C ; SALTA SI EL BIT "C" ES 1.
goto CICLO ; SI ES "C=0"
goto DECENAS ; SI ES "C=1"
DECENAS
movlw d'0' ; MUEVE LITERAL A W, RESETEA LAS UNIDADES
movwf UNIDAD ; MUEVE W A UNIDADES. UNIDADES=0;
incf DECENA,0 ; INCREMENTA EL VALOR DE UNIDAD EN 1 Y SE GUARDA EN UNIDAD
movwf DECENA
;call DISPLAY
movlw d'10' ; MUEVE LA LITERAL '10' A W
subwf DECENA,0 ;RESTA UNIDAD - W
btfss STATUS,C ; SALTA SI EL BIT "C" ES 1.
goto CICLO ; SI ES "C=0"
goto REINICIO ; SI ES "C=1"
; ========================================
REINICIO
movlw d'0' ;MUEVEL LITERAL A W=0.
movwf UNIDAD ; MUEVE W=0 A UNIDAD.
movwf DECENA ; MUEVE W=0 A DECENA.
goto CICLO ; SE MUEVE A CICLO.
TablaCodigo
addwf PCL,F ;
retlw b'11000000'; Codigo para el número "0"
retlw b'11111001'; Codigo para el número "1"
retlw b'10100100'; Codigo para el número "2"
retlw b'10110000'; Codigo para el número "3"
retlw b'10011001'; Codigo para el número "4"
retlw b'10010010'; Codigo para el número "5"
retlw b'10000010'; Codigo para el número "6"
retlw b'11111000'; Codigo para el número "7"
retlw b'10000000'; Codigo para el número "8"
retlw b'10011000'; Codigo para el número "9"
return
; =============================== RETARDOS ===================
RETARDO_200ms
movlw d'200'; ASIGNA EL VALOR DEL RETARDO EN ms
goto RETARDO_ms ; SE DIRIJE A LA DIRECCIÓN DE RETARDON EN ms.
RETARDO_ms
movwf R_ContB; ASIGNA EL VALOR DEL RETARDO EN ms A R_ContB- ciclo externo.
RETARDO_CICLO_EXTERNO
movlw d'249'; ASIGNA EL NUMERO DE VECES A EJECUTAR EL CICLO A W.
movwf R_ContA; ; ASIGNA EL VALOR AL REGISTRO R_ContA
RETARDO_CICLO_INTERNO
nop ; NO OPERATION, NO REALIZA NINGUNA OPERACIÓN, SOLO
; CONSUME CICLOS DE RELOJ.
decfsz R_ContA,F ; DECREMENTRA Y GUARDA EL VALOR EN R_ContA- ciclo interno
goto RETARDO_CICLO_INTERNO ; VUELVE AL CICLO INTERNO.
decfsz R_ContB,F ; DECREMENTA Y GUARDA EL VALOR EN R_ContB- ciclo externo
goto RETARDO_CICLO_EXTERNO; VUELVE AL CICLO EXTERNO.
return; REGRESA A DONDE FUE INVOCADA LA FUNCIÓN.

; ESTOR COMENTARIOS APLICAN, PARA LOS DEMÁS RETARDOS.


; ES DECIR, ES EL MISMO PRINCIPIO, SOLO SE CALCULA LA
; CANTIDAD DE CICLOS MÁQUINA Y SE ASIGNA ESE VALOR
; A LOS CICLOS ANIDADOS, PARA CONSUMIR EL TIEMPO,
; NECESARIO PARA EL RETARDO CALCULADO.

; ----------------------- 20 ms -----------------------
RETARDO_20ms
movlw d'20'
goto RETARDO_20ms_1
RETARDO_20ms_1
movwf R_ContB
RETARDO_CICLO_EXTERNO_20ms
movlw d'249'
movwf R_ContA
RETARDO_CICLO_INTERNO_20ms
nop
decfsz R_ContA,F
goto RETARDO_CICLO_INTERNO_20ms
decfsz R_ContB,F
goto RETARDO_CICLO_EXTERNO_20ms
return
;----------------------- 10 ms -----------------------
RETARDO_10ms
movlw d'10'
goto RETARDO_10ms_1
RETARDO_10ms_1
movwf R_ContB
RETARDO_CICLO_EXTERNO_10ms
movlw d'249'
movwf R_ContA
RETARDO_CICLO_INTERNO_10ms
nop
decfsz R_ContA,F
goto RETARDO_CICLO_INTERNO_10ms
decfsz R_ContB,F
goto RETARDO_CICLO_EXTERNO_10ms
return
;----------------------- 1 ms -----------------------
RETARDO_1ms
movlw d'249'
movwf R_ContA
R1ms_ciclo_interno
nop
decfsz R_ContA,F
goto R1ms_ciclo_interno
return
; ========================= GESTIÓN DEL DISPLAY =================
DISPLAY
; ----------------------- ENCIENDE DIGITO UNIDADES-----------------
movf UNIDAD,0 ;MUEVE DECENA A REGISTRO W.
call TablaCodigo ; BUSCA EL DIGITO EN LA TABLA.
bcf PORTA,RA2 ; APAGA DECENAS.
bsf PORTA,RA1 ; ENCIENDE EL DIGITO DE UNIDADES.
movwf PORTB ; ENVIA EL CODIGO DEL DIGITO AL PUERTO B-DISPLAY 7 SEGMENTOS
call RETARDO_20ms ; RETARDO PARA VER EL DIGITO.
call RETARDO_10ms ; RETARDO PARA VER EL DIGITO.
; ----------------------- ENCIENDE DIGITO DECENAS -----------------------
movf DECENA,0 ;MUEVE DECENA A REGISTRO W.
call TablaCodigo ; BUSCA EL DIGITO EN LA TABLA.
bcf PORTA,RA1 ; APAGA UNIDADES.
bsf PORTA,RA2 ; ENCIENDE DECENAS.
movwf PORTB ; ENVIA EL CODIGO DEL DIGITO AL PUERTO B-DISPLAY 7 SEGMENTOS.
call RETARDO_20ms ; RETARDO PARA VER EL DIGITO.
call RETARDO_10ms ; RETARDO PARA VER EL DIGITO.
; ----------------------- ENCIENDE DIGITO UNIDADES -----------------------
movf UNIDAD,0 ;MUEVE DECENA A REGISTRO W.
call TablaCodigo ; BUSCA EL DIGITO EN LA TABLA.
bcf PORTA,RA2 ; APAGA DECENAS.
bsf PORTA,RA1 ; ENCIENDE EL DIGITO DE UNIDADES.
movwf PORTB ; ENVIA EL CODIGO DEL DIGITO AL PUERTO B-DISPLAY 7 SEGMENTOS.
call RETARDO_20ms ; RETARDO PARA VER EL DIGITO.
call RETARDO_10ms ; RETARDO PARA VER EL DIGITO.
; ----------------------- ENCIENDE DIGITO DECNAS -----------------------
movf DECENA,0 ; MUEVE DECENA A REGISTRO W.
call TablaCodigo ; BUSCA EL DIGITO EN LA TABLA.
bcf PORTA,RA1 ; APAGA UNIDADES.
bsf PORTA,RA2 ; ENCIENDE UNIDADES.
movwf PORTB ; ENVIA EL CODIGO DEL DIGITO AL PUERTO B-DISPLAY 7 SEGMENTOS.
call RETARDO_20ms ; RETARDO PARA VER EL DIGITO.
call RETARDO_10ms ; RETARDO PARA VER EL DIGITO.
return; REGRESA A LA DIRECCIÓN DONDE FUE INVOCADA LA FUNCIÓN.
END; FINALIZA EL PROGRAMA.
3. Mediciones y resultados

3. 1. Simulación

Para la verificación apropiada del funcionamiento correcto del código fuente, se utiliza
la herramienta de simulación PROTEUS. Donde, con base al esquemático de la Figura
1, se carga el archivo .hex, que contiene el programa compilado de algoritmo solución.

En donde, al ejecutar el programa, el display de 7 segmentos de color rojo debe de en-


cender con los valores de cero, en ambos dígitos (decenas y unidades). Posteriormen-
te, al presionar el botón de incremento en una sola ocasión, debe incrementar en una
unidad el dígito de unidades en el display, así mismo, al llegar a las decenas incremen-
tar su valor en uno y, a su vez, reiniciar el valor de unidades a cero. Éste proceso se
mantiene hasta llegar al valor máximo de 99, para volver a cero 00, una vez que se
haya llegado al valor máximo.

Así mismo, cuando se presiona el botón de reset. Adjuntar las imágenes de captura de
pantalla de cada estado del programa.

Figuras a incluir como capturas de pantalla, favor de recortar la imagen y dejar solo el
contenido relevante asociado a la práctica.

1) PROGRAMACIÓN
a) Generar un proyecto nuevo para la familia PIC16F877A.
b) Transcribir el programa a MPLAB X IDE. (Les recuerdo que para nada tiene sen-
tido si lo copian y lo pegan, en este punto es de suma importancia la práctica de la
codificación en lenguaje ensamblador, para que se vayan familiarizando con los
comandos, la sintaxis y la lógica de programación. Además, vayan interactuando
con los movimientos de los registros y bancos con base a la arquitectura interna del
microcontrolador.

2) COMPILACIÓN.
a) Una vez concluida la codificación del programa, dar click en el icono de martillo y
escoba (limpiar y construir), para compilar el código.
b) Verificar que la compilación se complete satisfactoriamente. (BUILD SUCCESS-
FULL).

3) DEPURACIÓN.
a) Ir a la barra de herramientos, en la pestaña de “DEBUG”, dar click en “Debug main
project”.
b) Una vez que se habiliten los botones para depurar el código, iniciar la depuración y
activar los “Watches” necesarios para verificar el funcionamiento y los movimientos
dentro de los registros del microcontrolador.
c) Emular un cambio en el RA0 del Puerto A, con un 1, para verificar el funcionamiento
descrito en el apartado 2 (desarrollo) en el depurador. Una vez logrado lo anterior,
volver a compilar (paso 2) e ir al apartado de simulación en PROTEUS.

4) SIMULACIÓN.
a) Una vez armado el diagrama esquemático del apartado 2.3, dar doble click en Pro-
teus, sobre el microcontrolador PIC16F84A para cargar el archivo .hex. (MplabPro-
jects) asignar la ruta correspondiente a su proyecto.
b) Verificar en el apartado de oscilador, debajo del archivo cargado, que el cristal se
encuentre con el valor de 4 MHz.
c) También, verificar que el cristal en el diagrama esquemático también tenga ese va-
lor.
d) Ejecutar la simulación y probar los siguientes estados y generar captura de pantalla
e incluir en el reporte.

Estados:
d. 1) Display de 7 segmentos al iniciar el programa con el valor de “00” en panta-
lla.
d. 2) Al presionar el botón de incremento, debe incrementarse el valor del conta-
dor en 1.
d. 3) Al dejar presionado el botón, el contador continua incrementando el conta-
dor. Aquí, se debe incluir las capturas de pantalla en 9 y luego en el valor de 10.
d. 4) Incluir las capturas cuando el contador llegue a 49 y 50.
d. 5) Incluir las capturas cuando el contador llegue a 98 y 00.
d. 6) Incluir la captura cuando se presiona el botón de reset.
4. Conclusiones

Incluir ambos párrafos:

Conclusión técnica (párrafo 1): conclusión objetiva, breve y concisa. Además, se


debe utilizar lenguaje técnico, ortografía, signos de puntuación correctos y oraciones
completas (sujeto+verbo+predicado). Es referente al tema de la práctica, funciona-
miento, desempeño, detalles en los retardos, comportamiento del display, proceso
de rutina para encender y apagar las unidades y decenas, de tal manera, que de la
impresión que se encuentran estáticos los dígitos en la pantalla, sin embargo, es una
proceso cíclico a una velocidad constante,

Conclusión de experiencia (párrafo 2): espacio para expresar sus experiencias du-
rante la práctica, como se sintieron al respecto, los problemas que enfrentaron, las
complicaciones y cómo las superaron, algo nuevo que aprendieron, entre otras. De
igual manera, poner atención en la ortografía, signos de puntuación y presentar oracio-
nes completas (sujeto+verbo+predicado).

NOTA:
Es importante, que justifiquen el documento, utilicen un mismo
tamaño de letra, describan las figuras antes de presentarlas, así
como agregar el pie de figura correspondiente en cada imagen
que incorporen al documento. Así mismo, al agregar una cita bi-
bliográfica, se debe referenciar en el texto, al final de la oración o
el párrafo, así como considerar las Normas APA 7ma Edición,
para tal propósito.
5. Referencias
Incluir las referencias debidamente citadas en formato APA7. Consultar el documento
en plataforma “NORMAS APA7”. Libros, hojas de especificaciones, manuales técni-
cos, etc.

También podría gustarte