DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA
MICROPROCESADORES
“PROYECTO TERCER PARCIAL”
BENALCAZAR ALEXANDER
SANDOVAL SEBASTIÁN
ING. NANCY PAREDES
Sangolquí - 2013
1
ÍNDICE
1 OBJETIVOS DEL PROYECTO ................................................................................. 2
1.1. OBJETIVO GENERAL ....................................................................................... 2
1.2. OBJETIVOS ESPECÍFICOS .............................................................................. 2
2 MARCO TEÓRICO ................................................................................................... 2
3 DISEÑO .................................................................................................................. 10
3.1 DIAGRAMA DE BLOQUE ................................................................................ 10
3.2 DISEÑO DELPROGRAMA............................................................................... 11
3.3 DISEÑO DEL CIRCUITO. ................................................................................ 15
3.4 CIRCUITO COMPLETO ................................................................................... 18
4 CONCLUSIONES ................................................................................................... 19
RECOMENDACIONES ................................................................................................. 19
5 REFERENCIAS BIBLIOGRÁFICAS. ...................................................................... 19
ÍNDICE DE TABLAS E ILUSTRACIONES.
TABLA 1-TABLA DE VERDAD DEL BUFFER TRISTATE¡Error! Marcador no
definido.
TABLA 2-DECODIFICACIÓN DE LECTURA Y ESCRITURA¡Error! Marcador no
definido.
ILUSTRACIÓN 2-MEMORIA EEPROM .......................... ¡Error! Marcador no definido.
ILUSTRACIÓN 3-MODOS DE OPERACIÓN ................... ¡Error! Marcador no definido.
ILUSTRACIÓN 4-BUFFER TRISTATE ............................ ¡Error! Marcador no definido.
ILUSTRACIÓN 5-DIAGRAMA DE BUSES DE UN MICROPROCESADOR .......... ¡Error!
Marcador no definido.
ILUSTRACIÓN 6-DIAGRAMA DE BLOQUES ............................................................... 11
ILUSTRACION 7-CIRCUITO GENERADOR DE PULSOS¡Error! Marcador no
definido.
ILUSTRACIÓN 8- CIRCUITO DE REINICIO .................... ¡Error! Marcador no definido.
ILUSTRACIÓN 9-LED’S DE ESCRITURA Y LECTURA .. ¡Error! Marcador no definido.
ILUSTRACIÓN 10-DECODIFICACIÓN DE ESCRITURA Y LECTURA¡Error! Marcador
no definido.
2
ILUSTRACIÓN 11-CONEXIÓN DE PINES DEL MICROPROCESADOR Z80 ....... ¡Error!
Marcador no definido.
ILUSTRACION-12 CONEXIÓN DE PINES DE LA MEMORIA EEPROM .............. ¡Error!
Marcador no definido.
ILUSTRACIÓN-13 CONEXIÓN DE LOS PINES DEL BUFFERS¡Error! Marcador no
definido.
ILUSTRACIÓN-14 DECODIFICADOR 74LS47 PARA DISPLAY ÁNODO COMÚN
......................................................................................... ¡Error! Marcador no definido.
ILUSTRACIÓN-15 DISPLAY ÁNODO COMÚN ............... ¡Error! Marcador no definido.
ILUSTRACIÓN 16-DISEÑO COMPLETO ..................................................................... 18
1 OBJETIVOS DEL PROYECTO
1.1. OBJETIVO GENERAL
Utilizar el programa emulador EMU8086 y relacionarlo con los
elementos básicos que conforman el modelo de programación del
microprocesador 8086 para implementar un programa que controle un
carro a control remoto por medio del puerto paralelo.
1.2. OBJETIVOS ESPECÍFICOS
Determinar el funcionamiento del teclado matricial, así como su
decodificación para la realización del circuito.
Utilizar los conocimientos adquiridos durante el parcial para programar
en lenguaje ensamblador y lograr una comunicación de entrada y
salida por un puerto paralelo.
2 MARCO TEÓRICO
2.1 El lenguaje ensamblador
Es un lenguaje de programación de bajo nivel para los computadores,
microprocesadores, microcontroladores y otros circuitos integrados programables.
Implementa una representación simbólica de los códigos de máquina binarios y otras
constantes necesarias para programar una arquitectura dada de CPU y constituye la
3
representación más directa del código máquina específico para cada arquitectura
legible por un programador.
2.1.1 Estructura del Ensamblador
En el lenguaje ensamblador las líneas de código constan de dos partes, la primera es
el nombre de la instrucción que se va a ejecutar y la segunda son los parámetros del
comando u operando. Por ejemplo:
ADD ah bh
Aquí "ADD" es el comando a ejecutar (en este caso una adición o suma) y tanto "ah"
como "bh" son los parámetros.
El nombre de las instrucciones en este lenguaje puede estar formado de 2 a 6 letras, a
estas instrucciones también se les llama nombres mnemónicos o códigos de operación,
ya que representan alguna función que habrá de realizar el procesador. Existen
algunos comandos que no requieren parámetros para su operación, así como otros que
requieren solo un parámetro.
Algunas veces se utilizarán las instrucciones como sigue:
ADD al,[170]
Los corchetes en el segundo parámetro nos indican que vamos a trabajar con el
contenido de la casilla de memoria número 170 y no con el valor 170, a esto se le
conoce como direccionamiento directo (en la instrucción viene la dirección del objeto).
2.1.2 Técnicas de codificación en ensamblador:
En ensamblador los bucle, condicionales, subrutinas y demás elementos se codifica de
forma distinta de cómo se hace en otros lenguajes de alto nivel. A continuación
describiremos algunas técnicas útiles para codificar las estructuras más usuales.
BUCLES:
Inicialización de un registro(a modo de contador) al nº de vueltas del bucle
Etiqueta: Primera instrucción del bucle
<resto de instrucciones dentro del bucle>
Decrementar el contador
Saltar a la etiqueta si el contador es mayor que cero
4
<Instrucciones fuera del bucle>
SALTOS CONDICIONALES:
Instrucción de comparación
Evaluar condición y si se cumple saltar a la etiqueta prefijada
<Instrucciones para el caso de no cumplirse la condición>
Saltar fuera del condicional
MACROS:
Declaración:
<nombre de la macro> MACRO
<instrucciones de la macro>
ENDM
Llamada:
<nombre de la macro>
SUBRUTINAS:
Declaración:
<nombre la de subrutina> PROC
<instrucciones de la subrutina>
RET
<nombre de la subrutina> ENDP
Llamada:
5
CALL <nombre de la subrutina>
2.1.3 Interrupciones
Una interrupción es una instrucción que detiene la ejecución de un programa para
permitir el uso de la
UCP a un proceso prioritario. Una vez concluido este último proceso se devuelve el
control a la aplicación anterior. Por ejemplo, cuando estamos trabajando con un
procesador de palabras y en ese momento llega un aviso de uno de los puertos de
comunicaciones, se detiene temporalmente la aplicación que estábamos.
Interrupciones internas de hardware.- Las interrupciones internas son generadas
por ciertos eventos que surgen durante la ejecución de un programa. Este tipo de
interrupciones son manejadas en su totalidad por el hardware y no es posible
modificarlas. Un ejemplo claro de este tipo de interrupciones es la que actualiza el
contador del reloj interno de la computadora, el hardware hace el llamado a esta
interrupción varias veces durante un segundo para mantener la hora actualizada.
Interrupciones externas de hardware.- Las interrupciones externas las generan los
dispositivos periféricos, como pueden ser: teclado, impresoras, tarjetas de
comunicaciones, etc. También son generadas por los coprocesadores. No es posible
desactivar a las interrupciones externas. Estas interrupciones no son enviadas
directamente a la UCP, sino que se mandan a un circuito integrado cuya función es
exclusivamente manejar este tipo de interrupciones. El circuito, llamado PIC 8259A, si
es controlado por la UCP utilizando para tal control una serie de vías de comunicación
llamadas puertos.
Interrupciones de software.- Las interrupciones de software pueden ser activadas
directamente por el ensamblador invocando al número de interrupción deseada con la
instrucción INT. El uso de las interrupciones nos ayuda en la creación de programas,
utilizándolas nuestros programas son más cortos, es más fácil entenderlos y
usualmente tienen un mejor desempeño debido en gran parte a su menor tamaño. Este
tipo de interrupciones podemos separarlas en dos categorías: las interrupciones del
sistema operativo DOS y las interrupciones del BIOS.
La diferencia entre ambas es que las interrupciones del sistema operativo son más
fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso del
BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho más
rápidas pero tienen la desventaja que, como son parte del hardware son muy
6
La elección del tipo de interrupción a utilizar dependerá únicamente de las
características que le quiera dar a su programa: velocidad (utilizando las del BIOS) o
portabilidad (utilizando las del DOS).
Ejemplos:
Interrupción 21H
Propósito: Llamar a diversas funciones del DOS.
Sintaxis:
Int 21H
Otras Interrupciones;
10/02 para posicionar el texto
10/00 para poner color
21/09 para imprimir un mensaje
21/01 para esperar un que ingrese un dato.
Saltos, ciclos y procedimientos:
Los saltos incondicionales en un programa escrito en lenguaje ensamblador están
dados por la instrucción JMP, un salto es alterar el flujo de la ejecución de un programa
enviando el control a la dirección indicada. Un ciclo, conocido también como iteración o
bucle, es la repetición de un proceso un cierto número de veces hasta que alguna
condición se cumpla. En estos ciclos se utilizan los bifurcaciones "condicionales"
basados en el estado de las banderas.
Por ejemplo la instrucción JNZ que salta solamente si el resultado de una operación es
diferente de cero y la instrucción JZ que salta si el resultado de la operación es cero.
Por último tenemos los procedimientos o rutinas, que son una serie de pasos que se
usarán repetidamente en el programa y en lugar de escribir todo el conjunto de pasos
únicamente se les llama por medio de la instrucción CALL. Un procedimiento en
ensamblador es aquel que inicie con la palabra PROC y termine con la palabra RET (ya
explicado anteriormente).
2.2 Emulador 8086
7
El emulador 8086 fue el primero que se utilizó para impartir un curso de
microprocesadores por la universidad de Don Bosco.
Este emulador posee una interfaz de usuario muy amistosa que permite familiarizarse
con los fundamentos de la programación en lenguaje ensamblador de forma muy
intuitiva, aparte de eso brinda una serie de recursos para ejecutar y depurar programas.
2.2.1 Ventajas
Fácil manipulación.
Interfaz amigable con el usuario.
Barra de herramientas que permiten realizar programas fácilmente.
2.2.2 Desventajas
No soporta algunas de las interrupciones que posee el sistema operativo.
No puede acceder a los puertos Físicos (reales), sino que los emula usando
otros programas.
2.3 Entorno EMU 8086
2.3.1 Pantalla Principal
Es donde se escribirán los archivos fuentes en el lenguaje ensamblador.
Se puede ver una barra de menú de Windows con sus opciones file, edit, etc. Pero
también se vera unas operaciones poco usuales como assembler, emulador, etc.
Propias del emulador. También se ve una serie de botones que le permitirán crear un
nuevo archivo, abrir un archivo que ya existe, abrir un ejemplo, compilar un archivo
fuente, emular un archivo ejecutable y otras opciones.
8
2.3.2 Pantalla de
Compilación
E l momento de compilar y mientras
se abre una ventana llamada
“assembler status” nos informa
sobre los resultados del proceso.
Si el resultado es exitoso observara
un mensaje como el de la figura en
caso contrario se despliegan los
errores generados.
2.3.3 Pantalla del Emulador
Permite administrar, cargar o salvar los archivos que se van creando o ejecutando.
Math da acceso a calculadora y un convertidor de bases de numeración. Debug provee
herramientas para depurar programas, Además aquí podemos ejecutar nuestro
programa de corrido o línea por línea.
External, permite ejecutar el programa con otras herramientas diferentes del EMU
8086. Virtual Devices y Virtual drive activan dispositivos y unidades virtuales.
9
2.3.4 Ventanas de Código Fuente
Una ventana es donde se crea el código del programa y la otra aparece como apoyo al
momento de compilar.
10
3 DISEÑO
3.1 DIAGRAMA DE FLUJO
INICIO
Inicialización
“Presentación de Carátula”
Ingrese una Instrucción por
medio del teclado matricial
Se verifica
Instrucción
Válida
Generar instrucción directamente
por medio de puerto paralelo
hacia el Auto RC
Instrucción
Invalida
NO
SI
Cerrar
Ventana FIN
11
3.2 DIAGRAMA DE BLOQUE
ILUSTRACIÓN- DIAGRAMA DE BLOQUES
3.3 DISEÑO DELPROGRAMA.
Para la realización del programa se utilizó la herramienta de diseño EMU 8086:
12
Código:
13
14
15
Para ejecutar el programa debemos generar un archivo .exe, para lo cual
presionamos el botón compilar, una vez realizado este proceso procedemos a
ejecutar nuestro programa:
16
3.4 DISEÑO DEL CIRCUITO.
PUERTO PARALELO
ILUSTRACIÓN- PUERTO PARALELO
Para realizar la conexión entre el EMU8086 y nuestro circuito utilizaremos el
puerto paralelo, el cual tiene 5 puertos de salida, 8 puertos de entrada, 4 puertos
de control y 8 pines son tierra.
TECLADO MATRICIAL
Sirve para ingresar las instrucciones que va a realizar nuestro carrito a través de
los puertos de entrada del puerto paralelo, es decir que trabaja como control
remoto, consta de una matriz de botones de 4x4, donde cada botón tendrá una
instrucción asignada:
17
DECODIFICADOR TECLADO MATRICIAL 74922
ILUSTRACIÓN- DECODER TECLADO MATRICIAL
Sirve para ayudarnos a identificar que tecla ingresamos, conectamos en la
entradas X las columnas y a las entradas Y las filas, una vez que presionamos
una tecla el código de la tecla aparecerá en las líneas de salida (A,B,C,D) y se
activa la línea de dato disponible, además el integrado elimina el efecto rebote
que surge al presionar una tecla.
CONEXIÓN CON EL JOYSTICK
ILUSTRACIÓN- CONEXIÓN CON EL JOYSTICK
Finalmente para controlar el carrito conectaremos a los puertos de salida del
puerto paralelo a los pulsadores que se encuentran dentro del joystick, lo que
nos permite controlar el carrito por medio del teclado matricial.
3.5 CIRCUITO COMPLETO
ILUSTRACIÓN 1-DISEÑO COMPLETO
4 CONCLUSIONES
Se empleó el emulador EMU8086 con éxito, logrando controlar de manera
certera el carro de Radio Control por puerto paralelo, definiendo así el
empleo del microprocesador 8086 y su utilidad como base para los
procesadores superiores.
Se empleó correctamente el teclado matricial con su respectivo
decodificador, logrando un correcto desarrollo del circuito de control.
Aplicamos los conocimientos adquiridos durante el parcial para programar en
lenguaje ensamblador, manejando sus interrupciones logrando así una
comunicación de entrada y salida por un puerto paralelo.
RECOMENDACIONES
Se recomienda tomar en cuenta el funcionamiento del Radio Control, no
debe ser complicado ya que tenemos que controlarlo de una manera
sencilla.
Para el diseño se debe tener en cuenta la función del cada pin del puerto
para no generar errores y lograr una buena codificación.
Para la hora de implementar el circuito en un protoboard se recomienda ir
comprobando el funcionamiento del circuito por etapas.
5 REFERENCIAS BIBLIOGRÁFICAS.
1. UDB, Introducción a EMU8086 Recuperado el 13 de diciembre del 2013 en
http://www.udb.edu.sv/udb/archivo/guia/electronica-
tecnologico/microprocesadores-(fet)/2013/ii/guia-1.pdf
2. SÁNCHEZ, Manual de Programación e ensamblador 8086,, Recuperado el 13
de diciembre del 2013 en
http://www.uhu.es/tomas.mateo/ac2/manual%20ensamblador%20UHU.pdf
3. GUERRERO Francisco, Emulador 8086 Recuperado el 13 de diciembre del
2013 en
http://www.slideshare.net/CesarSandoval12/emulador-8086