Está en la página 1de 13

TECNOLÓGICO​​NACIONAL​​DE​​MÉXICO

INSTITUTO TECNOLÓGICO DE TIJUANA


DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA Y BIOMÉDICA

Ingeniería Biomédica

Microcontroladores

Práctica 5. Contador decimal ascendente usando el PIC 16F877A y dos displays de 7


segmentos

Unidad 2

ELABORADO POR:

Bejarano Lozada Elias 20213057

Jacobo Mendoza Miroslava 21212669

Vazquez Aldeco Kennia Michelle 21212183

FACILITADOR:

Angel Corral Dominguez

Tijuana BC., a 18 de Abril del 2024.


Índice

Introducción………………………………………………………………………………2

Objetivo

Marco teórico

PIC 16F877A

Lenguaje ensamblador………………………………………………………….…3

Mnemotécnicos……………………………………………………………………..4

Display 7 segmentos………………………………………………………………6

Procedimiento y resultados

Código en lenguaje ensamblador………………………………………………..…..7

Implementación virtual……………………………………………………….……10

Construcción física

Conclusiones…………………………………………………………………………….11

Referencias……………………………………………………………………………….12

1
1. Introducción

En este informe se detalla el desarrollo de una práctica enfocada en la programación en


lenguaje ensamblador para crear un programa que genere un conteo ascendente en formato
decimal, abarcando desde 00 hasta 99, y luego mostrar este conteo en dos displays de 7
segmentos. El enfoque principal de este proyecto se centra en la manipulación directa del
lenguaje ensamblador para controlar los displays y visualizar tanto las decenas como las
unidades del conteo.

Para lograrlo, se emplea un bucle continuo que permite la visualización dinámica


del conteo, ofreciendo una representación clara del funcionamiento del programa en los
displays correspondientes. Además, se subrayó la importancia de definir la arquitectura del
display que guiará el diseño del programa.

2. Objetivo

Escribir un programa en lenguaje ensamblador para el microcontrolador 16F877A que


realice una secuencia de encendido/apagado de LEDs, y se repita indefinidamente.

3. Marco teórico

3.1 PIC 16F877A.


El PIC16F877A es uno de los microcontroladores PIC más populares de la empresa
Microchip. Tiene un poco más de memoria y pines de entrada/salida que los
microcontroladores de gama básica (como el PIC16F84A). Posee un CPU del tipo RISC
(Conjunto Reducido de Instrucciones) que cuenta únicamente con 35 instrucciones
distintas, lo que lo hace muy fácil de programar tanto en lenguaje ensamblador como en C
y es por lo tanto ideal para la enseñanza.

Es un microcontrolador programable, por lo que puede usarse en una amplia gama


de aplicaciones en automatización, proyectos escolares, desarrollo de prototipos e incluso
en productos comerciales. Este PIC en particular es muy popular en la comunidad de

2
estudiantes y aficionados por que es sumamente sencillo de programar y se encuentra una
gran cantidad de información sobre él en internet. [1]

Ilustración 3.1.1- Datasheet del microcontrolador PIC16F877A.

Ilustración 3.1.2.- PIC 16F877A físico.

3.2 Lenguaje ensamblador.

El lenguaje ensamblador es un lenguaje de programación de bajo nivel que está muy cerca
del lenguaje de máquina, es decir, el código binario que vimos en la anterior entrada.

3
A diferencia de los lenguajes de alto nivel como C++ o Java, que son más fáciles de
entender para los humanos, el lenguaje ensamblador está diseñado para ser más fácil de
entender para el procesador. El lenguaje ensamblador es un lenguaje de programación que
utiliza mnemónicos para representar las instrucciones que se ejecutarán en el procesador.
Estos mnemónicos son traducidos por el ensamblador a su equivalente en código binario.
[2]

Ilustración 3.2.1.- Ejemplo de un código en lenguaje ensamblador.


3.3 Mnemotécnicos

En informática, un mnemónico es una palabra que sustituye a un código de operación


(lenguaje de máquina), lo que facilita la programación, lo que guarda mucha relación con el
lenguaje ensamblador.
En muchas ocasiones se puede tomar a nivel de usuario como las teclas de acceso
rápido que vemos en las ventanas, por ejemplo en un navegador encontramos el menú
típico que dice Archivo, editar, ver, entre otras opciones, el mnemónico sería el valor de la
letra que está subrayada, así si presionamos la tecla alt y luego por ejemplo la A, se nos
abrirá el menú de archivo, es por esta razón que se puede decir que la A en el menú resulta
la tecla mnemónica de Archivo, o la tecla de acceso rápido a la opción Archivo.
El lenguaje Mnemónico también es utilizado en la programación de procesadores
lógicos programables (PLC), haciendo más rápida y eficiente la construcción de programas
de alta complejidad. Dentro de los principales mnemónico existen:

4
★ MOV (transferencia): Transfiere datos de longitud byte o palabra del operando
origen al operando destino.
★ LEA (carga dirección efectiva): Transfiere el desplazamiento del operando fuente al
operando destino. Otras instrucciones pueden a continuación utilizar el registro
como desplazamiento para acceder a los datos que constituyen el objetivo.
★ POP (extraer de la pila): Transfiere el elemento palabra que se encuentra en lo alto
de la pila (apuntado por SP) al operando destino que ha de ser tipo palabra, e
incrementa en dos el registro SP.
★ PUSH (introduce en la pila): Decrementa el puntero de pila (SP) en 2 y luego
transfiere la palabra especificada en el operando origen a la cima de la pila.
★ CALL (llamada a subrutina): Transfiere el control del programa a un
procedimiento, salvando previamente en la pila la dirección de la instrucción
siguiente, para poder volver a ella una vez ejecutado el procedimiento.
★ JMP (salto): Transfiere el control incondicionalmente a la dirección indicada en el
operando.
★ RET/RETF (retorno de subrutina): Retorna de un procedimiento extrayendo de la
pila la dirección de la siguiente dirección. Se extraerá el registro de segmento y el
desplazamiento en un procedimiento de tipo FAR (dos palabras) y solo el
desplazamiento en un procedimiento NEAR (una palabra).
★ INT (interrupción): Inicializa un procedimiento de interrupción de un tipo indicado
en la instrucción.
★ ADD (suma): Suma los operadores origen y destino almacenando el resultado en el
operando destino.
★ SUB (resta): Resta el operando destino al operando origen, colocando el resultado
en el operando destino.
★ MUL (multiplicación sin signo): Multiplica el contenido sin signo del acumulador
por el operando origen.
★ DIV (división sin digno): Divide, sin considerar el signo, un número contenido en el
acumulador y su extensión (AH, AL si el operando es de tipo byte o DX, AX si el
operando es palabra) entre el operando fuente. [3]

5
Ilustración 3.3.1.- Diferentes tipos de mnemónicos.

3.4 Display 7 segmentos


El display de siete segmentos es un aparato utilizado para presentar información de forma
visual. Esta pesquisa es específicamente un dígito decimal del 0 (cero) al 9 (nueve), por lo
que se deriva que el código BCD está involucrado. Cada segmento tiene la forma de una
pequeña línea incandescente. Estos dispositivos también son conocidos con el nombre de
lámpara siete segmentos o visualizador
Las partes fundamentales de estos instrumentos son la carcasa, los terminales, los
leds, y el punto. Por lo general, este componente se utiliza para la representación de
números en muchos dispositivos electrónicos. Internamente están constituidos por una serie
de diodos LED con unas determinadas conexiones internas, estratégicamente ubicados para
que forme un número 8 al unir los segmentos en el gráfico. [4]

6
Ilustración 3.4.1.- Segmentos de ánodo común. Ilustración 3.4.2.- Segmentos de cátodo común.

4. Procedimiento y resultados

4.1 Código en lenguaje ensamblador

El código que se utilizó fue el siguiente:

7
8
Listado 1. Estructura de un programa en lenguaje ensamblador para el PIC16F877A, código en lenguaje
ensamblador para la práctica 5.

En esta sección del código se definen algunas variables constantes que serán utilizadas en el
programa, estas variables determinarán ciertas acciones a lo largo del código. Además, se
especifica el modelo de microcontrolador en el que se ejecutará el programa y se
configuran algunas opciones necesarias para su funcionamiento.

Al inicio del programa, se configuran los puertos B y C como salidas para controlar
los displays de 7 segmentos de unidades y decenas, respectivamente. Estos puertos se
utilizan para enviar la información necesaria a los displays y mostrar los números.

La subrutina principal, llamada "MostrarNúmeros", se encarga de iniciar mostrando


el número 00 en los displays. Luego, entra en un ciclo donde incrementa el número de las
unidades hasta llegar a 9. Una vez que las unidades llegan a 9, se incrementa el número de
las decenas y se restablecen las unidades a 00. Este ciclo se repite hasta llegar al número
99, mostrando así todos los números del rango deseado en los displays.

Para generar un retardo entre cada cambio de número y hacer visible la secuencia en
los displays, se utiliza la subrutina "Retardo". Esta subrutina mantiene los displays con el
mismo número durante un tiempo aproximado de 3 segundos antes de avanzar al siguiente
número.

9
4.2 Implementación virtual

Para verificar el correcto funcionamiento del código, se procede a construir el circuito


correspondiente, considerando los pines críticos utilizando el software Proteus. El circuito
de prueba se muestra en la Ilustración 4.2.1

Ilustración 4.2.1.- Circuito para el programa en lenguaje ensamblador de Listado 1.

4.3 Construcción física

Posterior a verificar el funcionamiento de manera virtual, el siguiente paso es llevar este


diseño de manera física. Para llevar a cabo esta tarea, se requiere disponer de ciertos
componentes, tales como 2 displays, condensadores cerámicos, push button y una fuente de
alimentación que proporcione 5V para retroalimentar al PIC16F877A.

Ilustración 4.3.1.- Construcción física para la Ilustración 4.3.2.- Construcción física para la
aplicación de contador decimal ascendente aplicación de contador decimal ascendente cuando
desenergizado. la salida marca “45” en los displays.

10
Ilustración 4.3.3.- Construcción física para la Ilustración 4.3.4.- Construcción física para la
aplicación de contador decimal ascendente cuando aplicación de contador decimal ascendente
la salida marca “50” en los displays. desenergizado.

5. Conclusiones

Bejarano Lozada Elias 20213057


El código ensamblador adaptado para el microcontrolador PIC16F877A demuestra una
forma efectiva de controlar y mostrar números en dos displays de 7 segmentos. A través de
la manipulación de los pines de los displays y la implementación de subrutinas de retardo,
se logra una visualización secuencial de números del 00 al 99. Esta implementación
proporciona una base sólida para aplicaciones que requieran la visualización de datos
numéricos en displays de 7 segmentos.
Jacobo Mendoza Miroslava 21212669
La adaptabilidad del código permite su uso en una amplia variedad de aplicaciones donde
se requiera mostrar secuencias numéricas. Al cambiar los valores iniciales o ajustar los
retardos, es posible personalizar la secuencia de números mostrada o la velocidad a la que
cambian, ofreciendo flexibilidad para adaptarse a diferentes requisitos o escenarios de
aplicación.
Vazquez Aldeco Kenia Michelle 21212183
La estructura del código refleja un enfoque organizado y modular, utilizando subrutinas
específicas para tareas como la actualización de los números mostrados y la generación de

11
retardos. Esto facilita la comprensión y modificación del código, permitiendo adaptarlo a
diferentes necesidades o expandir su funcionalidad en futuros proyectos.
6. Referencias

[1] Geek Factory, «PIC16F877A Microcontrolador PIC 8 bits Microchip - Geek Factory», Geek Factory, 12
de febrero de 2024.
https://www.geekfactory.mx/tienda/componentes/integrados/pic16f877a-microcontrolador-pic-8-bits-microchi
p/

[2] L. Llamas, «Qué es el lenguaje ensamblador», Luis Llamas, 1 de junio de 2023.


https://www.luisllamas.es/programacion-ensamblador/

[3] Unknown, «Ejemplos de mnemónicos en lenguaje ensamblador.», PC’s blog, 27 de marzo de 2017.
https://paolacazares.blogspot.com/2017/03/ejemplos-de-mnemonicos-en-lenguaje.html

[4] admin. “Display de 7 segmentos”. Industrias GSL. Accedido el 12 de abril de 2024. [En línea].
Disponible: https://industriasgsl.com/blogs/automatizacion/display-de-7-segmentos

12

También podría gustarte