Microprocesador 8086

UNIVERSIDAD DE LAS FUERZAS ARMADAS “ESPE” DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA MIRCROPROCESADORES Tema: FABRICA HY

Views 132 Downloads 3 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

UNIVERSIDAD DE LAS FUERZAS ARMADAS “ESPE”

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA

MIRCROPROCESADORES

Tema: FABRICA HYNDAI MOTORS CON 8086 Nombre: Jácome Nicolás Docente: Ing. Miroslava Aracely Zapata Rodríguez NRC: 2085

Sangolquí, 20 de Febrero del 2018

Abstract

The following project shows the development of communications serially (DB9) and parallel (DB25) in conjunction with Visual Basic, Proteus and assembly language programmed in the software emu8086 Keywords: 8086, VisualBasic ,Assembler Language

Resumen

En el siguiente proyecto se muestra el desarrollo de comunicaciones de manera serial(DB9) y paralela(DB25) en conjunto con Visual Basic, Proteus y lenguaje ensamblador programado en el software emu8086

Palabras claves: 8086, VisualBasic ,Lenguaje Ensamblador

Contenido 1.

Tema ...................................................................................................................................... 4 2.1

Objetivo General ........................................................................................................... 4

2.2 Objetivos Específicos .......................................................................................................... 4 3.

Diagrama de Bloques ............................................................................................................ 4

4. Funcionamiento ......................................................................................................................... 4 4.1 Visual Basic: ....................................................................................................................... 4 4.2 Programación EMU8086 : .................................................................................................. 9 4.3 Circuito en Proteus: ........................................................................................................... 14 6. Conclusiones y Recomendaciones .......................................................................................... 19 6.1 Conclusiones ......................................................................................................................... 19 6.2 Recomendaciones .................................................................................................................. 19 7.

Bibliografía ......................................................................................................................... 20

1. Tema División de dos números utilizando conjunto de instrucciones del microprocesador z80 2. Objetivos 2.1 Objetivo General Diseñar un circuito en conjunto con la creación de software en Visual Basic utilizando comunicación serial , paralelo y el controlador de puertos 8255 conectado al microprocesador 8085 programado en lenguaje ensamblador . 2.2 Objetivos Específicos   

Programar en lenguaje ensamblador el microprocesador 8086 mediante la utilización del software (emu 8086). Realizar comunicación serial en visual basic para después mediante la comunicación en paralelo empalmar Visual y Proteus (Isis). Mostrar mediante el microprocesador 8086 el modelo y color seleccionado del carro.

3. Diagrama de Bloques MICRO 8086 Ingreso de datos a proteus mediante puerto paralelo

Envio de datos por Visual Basic de manera Serial

DATOS(AD0-AD15) Salida Interfaz programable de periféricos 8255

LCD , Display 7 segmentos

4. Funcionamiento 4.1 Visual Basic: El primer paso y etapa del problema yace en la programación de visual basic en donde se han creado dos frames de envío y recibo (tipo chat) los cuales envían y reciben sus datos de manera serial mediante la selección de dos puertos COM conectado entre si con la herramienta “Virtual Serial Port Driver” Para la utilización del puerto paralelo es necesario realizar los siguientes pasos  

Se necesita Windows Xp Activar componentes Hwinterface.ocx



Cargar en el system 32 inpout32.dll

Pues bien se empieza explicando el código implementado en Visual Basic esto se hará mediante bloques 4.1.2. Frame Enviar:

Lo primero a realizar es la definicion de variables en esta etapa lo mas importante no son las variables si no como definimos la utilizacion del puerto paralelo mediante las instrucciones : Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) Comunicación Serial:

En esta etapa habilitamos los puertos es decir programamos para que el puerto se abra o se cierre para esto es necesario importar las librerías de comunicación serial arrastrando el siguiente icono hacia el frame de programación.

Ilustración 1 Serial Port

Enviar:

Muy bien cuando el botón enviar sea presionado se enviaran los datos en la variable textout o texto de salida este paso es muy importante ya que tenemos un frame de recibir entonces con las instrucción PUERTOENVIAR:Output=textout estamos asignando valores a uno de los COM seleccionados para luego ser enviados hay que recordar que la comunicación serial utiliza el prototipo 1N81 y la velocidad recomendada son 9600 baudios o bits por segundo.

Ilustración 2 Frame de Enviar

La interfaz grafica programada para el envío tiene campos necesarios para la fabricación de un carro al seleccionar el puerto COM y presionar el botón conectar podemos ya realizar el envio de datos de manera serial .

4.1.3. Frame Recibir:

Para almacenar los datos enviados en el frame de envío utilizaremos una tabla que sirve como una base de datos en donde se iran almacenando los autos creados con sus diferentes características , como se observa en el siguiente código lo que hacemos para modificar la tabla es asignar el valor de columnas (Col) y el valor de filas (Row) además asignaremos un titulo a cada parámetro con la instrucción LISTADO.Text=”Al texto deseado” , es necesario asignar el valor de 1 a la variable para que cuando llegue un nuevo dato este se almacene en la siguiente fila

Pues bien de esta menera realizamos la recepción con comunicación serial es decir al igual que en el frame de envío debemos definir la librería Serial Port y asignar un COM especifico pero los datos que llegan por el puerto serial están almacenados en la variable txtin y simplemente iremos separando el string recibido con el comando Split(txtin,”_”)(Posición del String) de esta manera podemos almacenar cada dato recibido en una nueva variable para después manipularlo

En esta etapa almacenamos los datos recibidos al presionar el botón añadir se almacena el dato leído en el puerto de entrada en filas y columnas , mediante el comando LISTADO.Text=variable.Caption asignaremos a los casilleros de la tabla los valores recibidos.

El botón crear es el mas importante ya que al presionarlo estamos enviando de manera paralela la información al controlador de puertos 8255 , para esto se utiliza el puerto A , entonces la lógica de programación es simple se debe jugar con los datos seleccionados por el usuario y condicionar una serie de datos que vayan al empalme para poder mostrar lo ingresado por el usuario . Por ejemplo: If txtcedula.Caption = "TUCSON" And txtnombre.Caption = "VERDE" Then txtparalelo.Text = 8 Out "&H378", Val(txtparalelo.Text) End If Si el usuario selecciono el modelo Tucson y el color verde enviaremos por el puerto paralelo mediante la instrucción en negrilla el valor de 8 .

Ilustración 3 Frame Recibir

4.2 Programación EMU8086 : En la siguiente etapa se explicará la lógica de programación en lenguaje ensamblador para la impresión de un texto en un lcd 16x2 y el envío y recepción de ordenes por el puerto paralelo del frame de recibir programado en Visual Basic

Para iniciar a programar abrimos EMU8086:

Ilustración 4 Ventana Principal EMU 8086

Una vez iniciado el programa damos clic en la opción new nos desplegara la siguiente ventana:

Ilustración 5 Generar archivos en el EMU8086

Damos clic en la opción COM y damos clic en OK una vez creado el archivo generara por defecto las sentencias de control del ensamblador.

Figura 4. Ventana de código en EMU 8086 Como primer paso en la programación del control del motor a pasos se va a declarar todas las variables que se va a utilizar para esto se digitamos el siguiente comando: IOCON IOA IOB IOC

EQU 8006H EQU 8000H EQU 8002H EQU 8004H

Donde IOA, IOB, IOC representa el puerto A, puerto B, puerto C respectivamente del integrado 8255. EQU: Define nombres simbólicos que representan valores u otros valores simbólicos. Las dos formas son: nombre EQU expresión nuevo_nombre EQU viejo_nombre Una vez definido un nombre mediante EQU, no se puede volver a definir. Inicializacion del LCD en lenguaje ensamblador Para explicar como se inicaliza el LCD 16x2 en lenguaje ensamblador es necesario primero explicar como funciona .

Ilustración 6 LCD 16x2

Entonces para la programación se asignan los pines en el siguiente orden estamos utilizando una configuración de 4 bits . VDD , RW , D7 ,D6 ,D5, D4, E(Enable) Las siguientes instrucciones permiten inicializar al lcd

Tabla 1 Comandos de incializacion LCD

D7 0 0 0 0 0 0 0 1

D6 0 0 0 0 0 0 0 1

D5 1 1 1 1 1 0 0 1

D4 1 1 1 0 0 1 0 1

La instruccion mov dx,IOC esta definiendo como salida al Puerto C del controlador 8255, entonces cuando queremos ingresar un dato en un lcd es importante cambiar de estado binario al pin enable es decir de 0 a 1 para que de esta forma reconozca la instrucción deseada Entonces nos guiamos en la tabla de comandos de inicialización el primer dato a ingresar es 0011 entonces debemos ir cambiando el ultimo digito de la instrucción de 0 a 1 para que el estado lógico del enable sea modificado y el dato sea ingresado .

;;;;;;;;;;;;;;;;;;;;; ;LCD inicializador;;; mov al,0000000b mov dx,IOC out dx,al

mov al,1000110b mov dx,IOC out dx,al

mov al,1000111b mov dx,IOC out dx,al

Entonces para la programación se asignan los pines en el siguiente orden es importante recordar que en un LCD de 16x2 los datos se ingresan con código hexadecimal

RW , D7 ,D6 ,D5, D4, E(Enable) De igual manera que para inicializar el LCD es necesario ingresar los datos cambiando el estado lógico del enable otro aspecto muy importante es que RW debe estar en 1 ya que empezaremos a escribir en el LCD , en el ejemplo estamos imprimiendo la letra H la cual tiene por código 01001000 como es una configuración de 4 bits se ingresan los primeros 4 bits y después los restantes .

;IMPRIMIR CHAR POR CHAR ;H mov al,101000b mov dx,IOC out dx,al mov al,101001b mov dx,IOC out dx,al mov al,101000b mov dx,IOC out dx,al mov al,110000b mov dx,IOC out dx,al mov al,110001b mov dx,IOC out dx,al mov al,110000b mov dx,IOC out dx,al Con el comando mov dx,IOA estamos definiendo al puerto A como entrada y es aquí donde lee los datos enviado desde visual a proteus de manera paralela , con la Instrucción mov dx,IOB estamos asignando al Byte de salida el puerto B

mov al,0001010b mov cl,al MOV DX,IOA ;Se lee el Byte del puerto "A" IN AL,DX MOV BL,AL salida: mov dx,IOB ;Le asignamos el Byte de salida del puerto "B" out dx,al ;SALIDA

4.3 Circuito en Proteus:

BLOQUE A

BLOQUE B

BLOQUE C

Ilustración 7 Cirtuito total

4.4.1. BLOQUE A

Ilustración 8 Bloque A

Pues bien este bloque es el encargado del control de todo el sistema del circuito primero empezaremos definiendo que es el controlador de puertos 8255

FUNCIONAMIENTO El 8255 dispone de un buffer bidireccional triestado de 8 bits que utiliza para interactuar con el bus de datos del sistema. Los datos son transmitidos o recibidos por el buffer tras la ejecución de instrucciones de entrada o salida por la CPU.

BLOQUES FUNCIONALES Estos se dividen en tres puertos de 8 bits (Puerto A, Puerto B, Puerto C). Los puertos A y B se pueden utilizar como puertos de entrada/salida de 8 bits. El puerto C puede ser utilizado como un puerto de entrada/salida de 8 bits o como dos puertos de 4 bits de entrada/salida o para producir las señales de reconocimiento (handshake) para los puertos A y B. Ocho líneas de datos (D0 - D7) están disponibles (con un buffer de datos de 8 bits) para leer/escribir datos en los puertos o control de registro en virtud de la situación de

NOTA: Los tres puertos se agrupan adicionalmente como sigue: 1. Grupo A que consiste en el puerto A y la parte superior del puerto C. 2. Grupo B que consiste en el puerto B y la parte inferior del puerto C.

Las líneas de dirección A1, A0 permiten acceder sucesivamente a cualquiera de los puertos o al registro de control como se indica a continuación: Tabla 2 Registros de Control

A1 0 0 1 1

A0 0 1 0 1

PORT SELECTED PUERTO A PUERTO B PUERTO C REGISTRO DE CONTROL

Para el 8086 se debe cargar el programa que se genera al compilar el EMU8086 en el formato COM de la siguiente manera dando doble click en el integrado del 8086 se abrirá la siguiente pestaña.

Ilustración 9 Seleccion archivo COM

Seleccionamos la ruta donde este el archivo .COM y listo.

Ilustración 10 Puerto Paralelo

De esta manera simulamos el puerto paralelo en Proteus , es importante señalar que ese solo funcionara si la computadora tiene un puerto paralelo físico y cuenta con Windows XP.

4.4.2. BLOQUE B

Ilustración 11 MUX y contadores

La explicación de este bloque es simple como sabemos para acceder a una memoria se deben ingresar combinaciones estas combinaciones básicamente son números binarios esto se puede hacer de manera manual pero lo optimo en este proyecto seria hacerlo de manera automática así que usamos contadores (74Ls193) que son contadores de 1 a 15 en binario , así accedemos a las localidades de la memoria los MUX(74157) clasifican el conteo según lo que el el frame de Recibo envié por el puerto paralelo para así imprimir la información correcta de una localidad

4.4.2. BLOQUE C De igual forma la explicación de este bloque es de funcionamiento mas que de diseño ya que el proceso lo realiza el microprocesador 8086

Ilustración 12 Tracción

Aquí se indica si el vehículo a crear es de tracción 4x4 o 4x2 mediante 2 displays de 7 segmentos.

Ilustración 13 Modelo

Este bloque está relacionado directamente con el bloque B ya que con los contadores podemos acceder a las localidades de memoria en donde se han guardado las palabras deseadas para esto es necesario programar la memoria con ayuda de cualquier software de programación. Es necesario explicar como se forma cada letra el primer paso es definir el orden de los pines que queremos programar el orden utilizado fue el siguiente. abcdefg

Ilustración 14 Display 7 segmentos

En donde según la letra que queramos formar vamos a dar el valor de 1 a cada segmento ejemplo para formar la letra H Tabla 3 Configuración de letras

a 0

b 1

c 1

d 0

e 1

f 1

g 1

Ilustración 15 Letra H 7 segmentos

Luego ese dato tenemos que trasformar a hexadecimal y luego programar en la memoria

Ilustración 16 Selección de color

En esta parte del circuito si el vehículo seleccionado tiene color rojo encenderemos un dislpay de 7 segmentos rojo y caso contrario un display de color verde los MUX (74157) utilizados tienen la función de decidir que color a ingresado el usuario y van conectados directamente al 8255.

6. Conclusiones y Recomendaciones 6.1 Conclusiones 

Para manejar el puerto paralelo en simulación es necesario contar con el puerto físico y el sistema operativo Windows Xp



Podemos definir si un puerto del controlador de puertos 8255 es entrada o salida en la programación del 8086 en lenguaje ensamblador para cargar este archivo en la simulación es necesario elegir el formato com.



Para la comunicación serial es necesario que el RX(Receptor) este conectado al Tx (Emisor) del otro y viceversa ya que de esta manera se realizara la transmisión de datos .

6.2 Recomendaciones

 Para la comunicación serial verificar que los puertos virtuales este conectados entre si  Instalar un controlador de puerto paralelo que permita manipular los estados de salidas o entradas ya que estos suelen quedarse con valores guardados.

7. Bibliografía  Banderas - tutoasm-emu8086s jimdo page!