Está en la página 1de 12

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

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

Procedimiento y resultados

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

Implementación virtual……………………………………………………….……..8

Construcción física…………………………………………………….…………...9

Conclusiones…………………………………………………………………………….…10

Referencias……………………………………………………………………………….11

1
1. Introducción

Este informe describe una actividad que investiga el empleo del lenguaje ensamblador para
programar el microcontrolador 16F877A con el propósito de dirigir una secuencia de LEDs
a través del puerto D como salida de 8 bits. Durante esta actividad, se explorarán los
principios básicos de la programación a nivel de ensamblador y se demostrará cómo
controlar el hardware en tiempo real para generar efectos visuales mediante la
manipulación de bits.

El conocimiento adquirido en esta práctica establece los cimientos para proyectos


futuros en el ámbito de la electrónica, donde la manipulación precisa de dispositivos de
entrada/salida puede ser crucial. El informe detalla los procedimientos seguidos, el código
ensamblador empleado y los resultados obtenidos, proporcionando una comprensión
completa de la experiencia y sus implicaciones en el desarrollo de proyectos electrónicos.

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.

4. Procedimiento y resultados

4.1 Código en lenguaje ensamblador

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

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

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.

En la parte principal del código se incluyen todas las instrucciones del programa, así
como la configuración de las salidas del microcontrolador PIC16F877A necesarias para
controlar los LEDs. Se asigna el valor de 0 al puerto D, lo que significa que inicialmente
todos los LEDs están apagados.

Luego se encuentra la rutina principal escrita en lenguaje ensamblador, identificada


con el nombre "Secuenciador". Esta rutina contiene las instrucciones que determinan el
flujo de ejecución del programa y cómo se realizan las secuencias de operaciones
específicas.

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, se inicia la
conexión del sistema mínimo de PIC y la configuración para la salida al LED intermitente.
El circuito de prueba se muestra en la Ilustración 4.2.1 desarrollada en Proteus.

8
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 un botón pulsador, un cristal de cuarzo, capacitores con valores
entre 15 y 30 pF, resistencias de 10 kΩ y 1 kΩ, 8 LEDs y una fuente de alimentación que
suministre 5V para alimentar 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 secuencia de LED cuando se presiona aplicación de secuencia de LED cuando la salida es
el reset. “00000011”

9
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 secuencia de LED cuando la salida es aplicación de secuencia de LED, circuito
“00110000” desenergizado.

5. Conclusiones

Bejarano Lozada Elias 20213057

Durante esta práctica, hemos adentrado en el mundo de la programación en lenguaje


ensamblador para el microcontrolador 16F877A, aprovechando el puerto D como una
salida de 8 bits para orquestar una secuencia de LEDs con corrimiento de bits. A lo largo de
este ejercicio, hemos adquirido destrezas en la manipulación de registros y puertos de E/S
para gestionar la activación y desactivación de LEDs, mientras que hemos explorado la
implementación de una secuencia de desplazamiento de bits para producir efectos visuales
dinámicos y atractivos. Este proceso ha enriquecido nuestro entendimiento sobre la
programación de microcontroladores y ha fortalecido nuestra capacidad para interactuar
con el hardware en tiempo real mediante lenguaje ensamblador.

Jacobo Mendoza Miroslava 21212669

En esta sesión práctica, hemos incursionado en la programación en lenguaje ensamblador


dirigida al microcontrolador 16F877A, empleando el puerto D como una interfaz de salida
de 8 bits para generar una secuencia de LEDs con corrimiento de bits. A través de esta
experiencia, hemos desarrollado competencias en la manipulación de registros y puertos de
entrada/salida para controlar la activación y desactivación de LEDs, al mismo tiempo que
hemos explorado la aplicación de una secuencia de desplazamiento de bits para producir

10
efectos visuales cautivadores. Esta práctica ha sido fundamental para profundizar en nuestra
comprensión de la programación de microcontroladores y ha ampliado nuestra capacidad
para gestionar hardware en tiempo real mediante el uso de lenguaje ensamblador.

Vazquez Aldeco Kenia Michelle 21212183

Durante esta actividad práctica, hemos explorado la programación en lenguaje ensamblador


dirigida al microcontrolador 16F877A, utilizando el puerto D como una salida de 8 bits
para generar una secuencia de LEDs con corrimiento de bits. A lo largo de este ejercicio,
hemos adquirido habilidades en la manipulación de registros y puertos de E/S para
controlar el encendido y apagado de LEDs, y hemos aprendido a implementar una
secuencia de desplazamiento de bits para lograr efectos visuales dinámicos. Este ejercicio
nos ha permitido profundizar en nuestra comprensión de la programación de
microcontroladores y ha fortalecido nuestra capacidad para trabajar con lenguaje
ensamblador y controlar hardware en tiempo real.

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

11

También podría gustarte