PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: -...

12
PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086. - Manejo de la pila - Diseño de procedimientos - Manejo de funciones del DOS para representación en pantalla REALIZACIÓN: a) Se desea diseñar un procedimiento FAR que reciba un número sin signo de tamaño byte y lo represente en la pantalla junto con un retorno de carro. El procedimiento recibe el dato de la zona de la pila, esto es, el programa que invoca al procedimiento debe introducir en la pila, inmediatamente antes a la instrucción de llamada al procedimiento, el dato a usar por este. Es recomendable que dicho procedimiento almacene, también en la pila, los contenidos de aquellos registros que pueden ser usados por este. Así, al principio del procedimiento, se almacenarán en la pila, y al final del mismo, se restauran de esta. Para representar el número en pantalla, se recuerda que, este, debe convertirse en una cadena ASCII terminada con los caracteres 13,10,'$, además, el contenido del registro DX debe tener la posición de inicio de la cadena de caracteres que se encuentra en el segmento DS. La función AH=9 de la INT 21H hace el resto. En el cuadro siguiente se resume todo lo explicado. Obsérvese que la cadena mensaje reserva tres bytes antes del retorno de carro, debido a que los números a representar están comprendidos entre 0 y 255. Prácticas de microprocesadores meter dato a representar call far ptr RUTINA RUTINA PROC Almacenar registros en pila …….. Recuperar registros de la pila RET RUTINA ENDP Datos segment Mensaje db ?,?,?,13,10,'$' …. Datos ends Code sgment Assume ds:Datos …. Dx=inicio mensaje Función 9 de int 21h

Transcript of PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: -...

Page 1: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

PRÁCTICA 1

Programación del 8086

OBJETIVOS:

- Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

- Manejo de la pila - Diseño de procedimientos - Manejo de funciones del DOS para representación en pantalla

REALIZACIÓN: a) Se desea diseñar un procedimiento FAR que reciba un número sin signo de tamaño byte

y lo represente en la pantalla junto con un retorno de carro. El procedimiento recibe el dato de la zona de la pila, esto es, el programa que invoca al procedimiento debe introducir en la pila, inmediatamente antes a la instrucción de llamada al procedimiento, el dato a usar por este. Es recomendable que dicho procedimiento almacene, también en la pila, los contenidos de aquellos registros que pueden ser usados por este. Así, al principio del procedimiento, se almacenarán en la pila, y al final del mismo, se restauran de esta.

Para representar el númerocadena ASCII terminada cDX debe tener la posiciónsegmento DS. La función Aresume todo lo explicado. Oretorno de carro, debido a 255.

Prácticas de microprocesadores

… meter dato a representar call far ptr RUTINA … RUTINA PROC Almacenar registros en pila …….. Recuperar registros de la pila RET RUTINA ENDP

en pantalla, se recuerda que, este, debe convertirse en una on los caracteres 13,10,'$, además, el contenido del registro de inicio de la cadena de caracteres que se encuentra en el

H=9 de la INT 21H hace el resto. En el cuadro siguiente se bsérvese que la cadena mensaje reserva tres bytes antes del

que los números a representar están comprendidos entre 0 y

Datos segment Mensaje db ?,?,?,13,10,'$' …. Datos ends … Code sgment Assume ds:Datos …. Dx=inicio mensaje Función 9 de int 21h
Page 2: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

Para convertir un byte(número entre 0 y 255) en una cadena de caracteres ASCII('000' a '255') se puede seguir el siguiente procedimiento: Por último recuerde que para poder usar procedimientos o subrutinas, es necesario establecer la pila.

b) Se desea diseñar un programa que permita ordenar una tabla de n números sin signo de tamaño byte. El tamaño de la tabla está contenido en una variable de memoria de 16 bits. El programa debe usar el procedimiento del apartado anterior para la representación en pantalla de cada uno de los elementos de la tabla ordenada.

c) Compruebe el funcionamiento del programa para diferentes casos prácticos (cambiando

los datos de la tabla y el tamaño de la misma)

Prácticas de microprocesadores

1. Sea N el byte a convertir 2. Sea i=0 3. Divide N entre 10 4. Sea N = cociente de la división 5. Sea di = resto 6. di = di mas el ASCII de '0' 7. incrementa i 8. Si i es menor que 3, se repite desde el punto 3. 9. La cadena ascii está formada por d2 d1 d0

Page 3: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

PRÁCTICA 2

EL TEMPORIZADOR 8253 Y EL PPI 8255

OBJETIVOS:

- Programación del temporizador 8253, junto con el PPI 8255 para la generación de sonido.

- Programación del interfaz paralelo para la lectura de los códigos de teclado: polling e interrupciones

REALIZACIÓN: Parte primera(GENERACIÓN DE SONIDO): Se desea diseñar un programa que permita la generación de sonido de diferentes frecuencias: 100,1000 y 3000 Hz. En la siguiente figura se representa la estructura que permite la generación de sonido en el PC-XT y compatibles. La salida OUT2 del temporizador 8253 se conecta, a través de una puerta AND, al altavoz. La otra entrada de la puerta AND se conecta a la salida PB1 del 8255, de modo que este pin sirve para habilitar o inhabilitar la generación de sonido. Asimismo, la salida PB0 del 8255 se conecta a la entrada GATE2 del temporizador 8253 con el objeto de habilitar o inhabilitar el proceso de cuenta.

&

Prácticas de microprocesadores

8253

8255

PB0PB1

OUT2GATE2

Page 4: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

La dirección base del temporizador 8253 es 40H, mientras que la del PPI, la 60H. Sabiendo que la frecuencia de reloj del temporizador es de 1,19MHz aproximadamente y que el puerto B del 8255 está configurado como salida, se pide: a) Determinar los contenidos que se deben cargar en el contador 2 que permitan generar,

por la salida OUT2, señales de frecuencia 100,1000 y 3000Hz. b) Realice un programa en ensamblador que permita configurar el contador 2 del 8253

para que genere una señal cuadrada periódica en su salida OUT2 de frecuencias:100,1000 y 3000Hz

c) Diseñe el programa completo que permita la generación de sonido (Recordar que sólo se deben modificar los bits 0 y 1 del puerto B del PPI, dejando el resto sin modificación)

d) Repita los apartados anteriores usando el lenguaje C Parte segunda (LECTURA DEL TECLADO) El controlador de teclado de un PC es responsable del envío de los códigos de identificación de cada tecla hacia el PC. Cuando se pulsa una tecla, se genera el correspondiente envío del código asociado a dicha tecla. El formato seguido para el envío del código de la tecla hacia el PC es el serie con un total de 11 bits enviados por cada tecla pulsada. Estos bits son:

- Un bit de start - 8 bits del código de tecla - bit de paridad impar - un bit de stop.

De los 8 bits del código de tecla, el más significativo se pone a 0 si existe una pulsación de tecla o a 1 si se ha producido una liberación de la tecla. Ejemplo: si se pulsa una tecla cuyo código asociado es 0000110b, el controlador envía 00000110b; si se libera la tecla, el controlador envía el código 10000110b. Por tanto, la pulsación de una tecla conlleva el envío de, como mínimo, dos códigos, uno de pulsación y otro de liberación. En la siguiente tabla se han representado algunos de los códigos más importantes Por su parte, la electrónica incorporada en el PC, cuando recibe un código del controlador de teclado, lo sitúa en el puerto A del PPI (que se encuentra configurado como entrada) y activa la entrada de petición de interrupción IRQ1 del PIC(controlador de interrupciones). El dato depositado en el PPI es recogido por una rutina de interrupción cuyo vector es el 0x9.

Prácticas de microprocesadores

Page 5: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

HEX TECLA HEX TECLA HEX TECLA HEX TECLA 01 ESC 16 U y u 2B | y \ 40 F6 02 1 y ! 17 I e i 2C Z y z 41 F7 03 @ y 2 18 O y o 2D X y x 42 F8 04 # y 3 19 P y p 2E C y c 43 F9 05 $ y 4 1A { y [ 2F V y v 44 F10 06 % y 5 1B } y ] 30 B y b 45 NUMLOCK 07 ^ y 6 1C ENTER 31 N y n 46 SCROLL 08 & y 7 1D CTRL 32 M y m 47 7 y HOME 09 * y 8 1E A y a 33 < y , 48 8 Y uparrow 0A ( y 9 1F S y s 34 > y . 49 9 y PgUP 0B ) y 0 20 D y d 35 ¿ y / 4A - (gray) 0C _ y - 21 F y f 36 RIGHTSHIFT 4B 4 y leftarrow 0D + y = 22 G y g 37 PRTSCR 4C 5 0E BACKSP 23 H y h 38 ALT 4D 6 y rightarrow 0F TAB 24 J y j 39 SPACE 4E + 10 Q y q 25 K y k 3A CAPSLOCK 4F 1 y End 11 W y w 26 L y l 3B F1 50 2 y downarrow 12 E y e 27 : y ; 3C F2 51 3 y PgDn 13 R y r 28 “ y ’ 3D F3 52 0 y Ins 14 T y t 29 ~ y ‘ 3E F4 53 . y Del 15 Y e y 2A LEFTSHIFT 3F F5 a) Diseñe un programa en ensamblador que permita la lectura consecutiva del contenido

del puerto A del PPI 8255 y que presente este contenido en hexadecimal en pantalla. (Téngase en cuenta que sólo se debe presentar un dato leído del puerto A si este es diferente al leído en el ciclo anterior) Además, establezca un contador con el objeto de presentar sólo unos cuantos caracteres recibidos.

b) Repetir el apartado anterior en lenguaje C, pero utilizando la técnica de interrupción.

Para ello se necesitan las siguientes consideraciones:

- Antes de instalar la dirección de nuestra rutina de interrupción en la tabla de vectores se debe guardar el vector anterior con el objeto de restaurarlo cuando se termine la aplicación.

- Establecer algún tipo de contaje para determinar el final de ejecución del programa.

- En ningún caso se realizará una presentación de dato en pantalla dentro de la rutina de interrupción.

Prácticas de

En lenguaje C, la rutina de interrupción se define como: void interrupt FUNCION(void)

Al final de la rutina de interrupción hay que enviar el comando de fin de interrupción alcontrolador de interrupciones (outportb(0x20,0x20)). La rutina principal debe ser capaz de establecer el vector de interrupción en la tabla devectores (setvect(NUM_VECTOR,FUNCION), pero antes hay que almacenar elcontenido del vector de interrupción antiguo con la función *getvect(NUM_VECTOR).

microprocesadores

Page 6: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

PRÁCTICA 3

MANEJO DEL PUERTO SERIE DE UN PC MEDIANTE LAS TÉCNICAS DE SONDEO E INTERRUPCIÓN

OBJETIVOS: En esta práctica se buscan dos objetivos importantes:

Realización de una comunicación full-duplex Manejo del puerto serie utilizando los métodos de polling (apartado 2 de la realización)

e interrupción (apartado 3). REALIZACIÓN:

1.- Implementa funciones en C que permitan configurar la velocidad, paridad, longitud y número de bits de stop para una comunicación serie asíncrona. 2.-Diseña un programa que, usando las funciones anteriores, permita la siguiente implementación: cuando se inicie la ejecución del programa, este espera a que se pulse una tecla. El valor ASCII asociado a dicha tecla será el enviado por el puerto serie. Si en el proceso de transmisión se realiza otra pulsación, el valor ASCII asociado a la nueva tecla pulsada será el que se envíe a continuación. El proceso se detiene cuando se detecte la pulsación de la tecla ESCAPE. Asimismo, si por el puerto se recibe algún carácter, este será representado en pantalla. Los parámetros de configuración del puerto son fijados en el propio programa y cada vez que estos cambien, se realizará modificando el código. Este programa debe permitir la representación de los caracteres en pantalla mediante el uso de la librería PANTALLA.C que se dispone en la Web de la asignatura. Las funciones de esta librería permiten manejar la memoria de vídeo con el objeto de cargar en pantalla dos ventanas que mostrarán los caracteres enviados y recibidos por el PC. Esta librería tiene dos funciones directamente utilizables: void carga_ventanas(void); int presenta_dato(int ventana, unsigned char dato,int modo) La primera de estas funciones, carga las ventanas de recepción y transmisión e inicializa los punteros de la memoria de vídeo, que son necesarios para el manejo de la siguiente función.

Prácticas de microprocesadores

La segunda función permite escribir en memoria de vídeo los caracteres que se reciben o envían. El primer argumento, VENTANA, especifica en cuál de las dos ventanas se va a representar el carácter recibido o enviado. Este argumento tiene asociado dos constantes RECEPCIÓN (0) y TRANSMISIÓN(1). El segundo argumento DATO, es el carácter que será impreso en la ventana seleccionada por el primer argumento. El último argumento,

Page 7: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

MODO, define el tipo de representación: ASCII(modo=0) o HEX (modo=1). En la representación ASCII se tienen en cuenta las tabulaciones, el retorno de carro, el de línea y el borrado de carácter; en cambio en el formato HEX, se representa los códigos hexadecimales de todos los caracteres sin tener en cuenta sus funciones especiales. 3.- Se desea diseñar una rutina de interrupción que permita la recepción de datos por el puerto serie y su representación en pantalla (mediante la función presenta_dato ). Para ello se deben tener en cuenta las siguientes consideraciones: 4.- Supongamos ahora que se disponen de dos PC's conectados a través del puerto serie. Uno de ellos, que llamaremos PC1 tiene la siguiente configuración: 1200bps,8,paridad par,1stop, mientras que el segundo, PC2, tiene la configuración 1200bps,7,siempre 1,2stop. Determina los tipos de errores, si existen, que se pueden detectar en la recepción de bytes tanto por el PC1 como por el PC2.

Prácticas de microprocesadores

5.- Añade al programa del apartado una subrutina que permita la representación en pantalla de un mensaje que permita la identificación de un posible error en recepción (PARIDAD),(TRAMA),(BREAK). Para ello se usará la función presenta_dato(RECEPCIÓN, mensaje_error[ì],ASCII) tanta veces sea necesaria para la representación de cada uno de los caracteres de los mensajes (PARIDAD),(TRAMA),(BREAK).

Page 8: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

PRÁCTICA 4

MANEJO DE LOS PUERTOS DE ENTRADA/SALIDA DEL MICROCONTROLADOR AT90S2313

OBJETIVOS: En esta primera práctica del microcontrolador se buscan dos objetivos importantes: - familiarización con el entorno de trabajo del STK2000 (Assambler, Simulator & ISP) - realización de programas básicos que permitan manejar los puertos de entrada/salida del

microcontrolador AT90S2313 REALIZACIÓN: Parte primera: 1.- El Starter Kit dispone de una hilera de pulsadores conectados al puerto D del microcontrolador y de una hilera de diodos LED conectados al puerto B de dicho microcontrolador, tal y como aparece en la siguiente figura La pulsación de una tecla es detectada si la entrada asociada del puerto D se pone a 0. En caso contrario, la entrada del puerto D es 1. Un diodo se ilumina, ON, cuando la línea del puertoB asociada a dicho led se pone a 0, en caso contrario, el diodo se apaga,OFF.

Prácticas de microprocesadores

AT90S2313

PORTB[0..7]

PORTD[0..6]

Page 9: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

2.- Diseñe un programa en ensamblador que permita:

- configurar el puerto D como entrada - configurar el puerto B como salida - configurar la zona de pila en la posición más alta de la memoria RAM - activar el diodo conectado a la línea PORTB[i]( para todo i), solo sí, el pulsador

asociado a la línea PORTD[i] está pulsado. Parte segunda: 1.- Diseñar un programa que permita contar el número de veces que se pulsa la tecla conectada a la entrada 0 del puerto D y presentar el valor de cuenta usando los diodos LED. En concreto, el programa debe ser capaz de:

- configurar los puertos B y D de la forma adecuada. - inicializar el puntero de pila a la zona más alta de la memoria. - Incrementar la variable contador cada vez que se detecta una transición de

bajada en la línea de entrada PORTD0 - Volcar el contenido de la variable contador en PORTB de la forma adecuada

para su correcta visualización binaria

Prácticas de microprocesadores

Page 10: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

PRÁCTICA 5

MANEJO DEL TIMER Y DE LAS INTERRUPCIONES OBJETIVOS:

- Manejo de temporizadores para el cómputo de tiempo - Familiarización con el sistema de gestión de interrupciones del microcontrolador

AT90S2313 - Diferenciación de los métodos de entrada/salida: polling e interrupciones

REALIZACIÓN: Se desea resolver un problema usando dos técnicas distintas: interrupciones y polling. En concreto, se desea diseñar un programa que permita incrementar una variable cada segundo y mostrar el contenido binario de dicha variable en los LEDs conectados en el puerto B (Repásese el apartado 1 de la práctica 5). El programa debe permitir:

- configurar adecuadamente el puerto B - inicializar el puntero de pila a la zona más alta de la memoria - configurar el temporizador para que genere un desbordamiento cada 32,5ms

aproximadamente - incrementar una variable auxiliar cada vez que se genere un desbordamiento en

el temporizador.(NOTA: determina el valor que máximo que toma esta variable cuando se alcanza un segundo de funcionamiento)

- incrementar la varible contador de segundo cada vez que la variable auxiliar alcanza su máximo valor

- presentar de forma adecuada el contenido de la variable contador de segundos en los diodos LED’s

Primera parte (polling)

El desbordamiento del temporizador se determinará mediante consulta progresiva al flag TOV0 del registro TIFR. Segunda parte (interrupciones)

Se diseñará una rutina de interrupción que permita la realización del programa anterior sin la necesidad de consultar periódicamente el flag TOV0 del registro TIFR.

Además de esta rutina se acompañara del conjunto de instrucciones necesarias para la activación de las interrupciones

Prácticas de microprocesadores

Page 11: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

STK200 AT90S FLASH MICROCONTROLLER STARTER KIT

El Starter Kit se compone de:

- Software para PC (AVR ISP) - Placa prototipo - Cable de interconexión al puerto paralelo.

El software AVR ISP es de fácil manejo. Siguiendo el protocolo siguiente se puede realizar la programación de cualquier aplicación. (IMPORTANTE: Este software sólo sirve para programar el microcontrolador que se encuentra en la placa prototipo conectada al PC a través del puerto paralelo. Este programa no permite ensamblar ni depurar programas). 1) Crear un nuevo proyecto. Aparecerá una ventana asociada con todos los

microcontroladores de la casa ATMEL. Escoger AT90S2313

2) Ahora aparecerán tres ventanas: Data EEPROM memory, Project Manager y Program Memory. Seleccionar con el raton la ventana Program Memory

3) En la barra de menú seleccionar File – Load (carga del fichero)

Prácticas de microprocesadores

Page 12: PRÁCTICA 1 Programación del 8086 - dte.us.es · PRÁCTICA 1 Programación del 8086 OBJETIVOS: - Diseño de un programa en ensamblador usando el juego de instrucciones del 8086.

4) Seleccionar el fichero a cargar que tenga la extensión .HEX (En Mostrar archivos de tipo especificar Intel Hex File)

5) A partir de este momento, y si no existe ningún problema,. la ventana Program Memory

mostrará en azul los códigos binarios del programa cargado del fichero y que será enviado a la placa de prototipo.

6) Utilizaremos, ahora, las opciones Erase o Program Device del menú Program, para

borrar el programa de la memoria del microcontrolador o cargarle el nuevo programa. La placa prototipo cuenta con los siguientes elementos:

- 8 diodos LED’s de color ROJO conectados al puerto B del microcontrolador - 8 pulsadores mecánicos conectados al puerto D del microcontrolador - 1 conector de alimentación - 1 Conector DB9 para RS232 - 1 cristal de cuarzo de 4Mhz para la generación de la temporización del

microcontrolador - Un interruptor de alimentación

Prácticas de microprocesadores