DIGITAL II – DEPARTAMENTO DE SISTEMAS E INFORMÁTICA – UNIVERSIDAD NACIONAL DE ROSARIO PRÓLOGO Este apunte contiene los problemas para el segundo práctico de Digital II. En este trabajo práctico se plantea resolver un problema integral emulando un sistema microprocesado completo, esto es, deberá realizarse la programación en assembler del programa principal y de las rutinas de servicio de interrupción, el mapeo de memoria, y la configuración de la IVT para que se realice un correcto llamado a las rutinas de servicio de interrupción que se solicite implementar en cada uno de los problemas. Por otra parte el sistema microprocesado a emular deberá tener un mapeo como el siguiente: 0xFFFFF 0xFFFF0 SECTOR DE ARRANQUE ~ (área reservada) inicio fin MEMORIA DE USUARIO ~ (área reservada) 0x000FF 0x00000 IVT Dónde “inicio” y “fin” refieren a direcciones de memoria que serán especificadas en cada uno de los problemas. Para implementar este mapeo utilizar la funcionalidad de ajustar el mapa de memoria brindada por el EMU8086. El problema debe ser resuelto mediante programación en assembler utilizando el entorno EMU8086 y los dispositivos virtuales desarrollados por la cátedra. El alumno deberá presentarse a rendir el laboratorio con el problema resuelto y funcionando correctamente. PROBLEMA 1 Diseñar un software que implemente una calculadora utilizando 8086. Esta versión simplificada de la calculadora debe aceptar las siguientes operaciones matemáticas: suma(+), resta(-), división(/) y multiplicación(*). La calculadora debe funcionar continuamente, es decir cuando devuelve un resultado debe estar lista para recibir una nueva operación. Para resolver el problema se deberán utilizar los dispositivos virtuales “Entrada(texto)” e “impresora”. Debe realizarse el correcto tratamiento de las interrupciones generadas por el DVIO Entrada. Se asumirá que el numero mas largo será de cuatro dígitos, es decir el numero máximo que podrá ingresarse será 9999 (entero). Y la operación completa Problemas de laboratorio - Vers.1, 2011 1/6 DIGITAL II – DEPARTAMENTO DE SISTEMAS E INFORMÁTICA – UNIVERSIDAD NACIONAL DE ROSARIO tendrá el siguiente formato: Sig A A1 A2 A3 A4 OPER Sig B B1 B2 B3 B4 = Es decir el formato de los datos a ingresar será fijo de 12 caracteres, donde: Sig A: signo del dato A A1: Unidad de mil del dato A A2: Centena del dato A A3: Decena del dato A A4: Unidad del dato A OPER: Operación a realizar. SigB, B4, B3, B2 y B1: Dato B, se interpreta de la misma manera que A. = Indica que se han ingresado todos los datos Los resultados serán números enteros y deberá contemplarse que las operaciones se realicen en forma correcta para cualquier combinación de los datos de entrada valor y signo, incluyendo el caso de la división por cero. Para detectar este último caso deberá hacerse uso de la interrupción por división por cero. Para este problema: inicio = 0x0A000 fin = 0x0AFFF PROBLEMA 2 Diseñar un software que implemente un temporizador multiproposito utilizando el 8086 y los dispositivos DVIO. El temporizador que se desea implementar deberá ser totalmente configurable. Deberá contar con la posibilidad de cargar un valor de comparación (modificable), así como también deberá contar con dos modos posibles de operación (cíclico o one-shot) Para resolver el problema se deberán utilizar los dispositivos virtuales “Pulsadores”, “Display” y “Timer”. Debe realizarse el correcto tratamiento de las interrupciones generadas por los DVIO Pulsadores y Timer. Para lograr la configuración del Temporizador se utilizarán los pulsadores que deberán tener asociadas las siguientes funciones: Pulsador 1 : Subir Pulsador 2 : Bajar Pulsador 3 : Entrar Pulsador 4 : Arrancar/Parar Problemas de laboratorio - Vers.1, 2011 2/6 DIGITAL II – DEPARTAMENTO DE SISTEMAS E INFORMÁTICA – UNIVERSIDAD NACIONAL DE ROSARIO Modo Configuración: Pulsando “Entrar” se ingresará al modo de configuración del temporizador, en el que se deberá ingresar el valor de comparación con los pulsadores “Subir” y “Bajar” (dicho valor se deberá ir mostrando en el Display). Pulsando nuevamente “Entrar” se deberá grabar el valor de comparación y quedará disponible nuevamente el display en “0000” para configurar el modo de operación del Timer (cíclico = 1 y one-shot =2). Con los pulsadores “Subir” y “Bajar” elegimos el modo de operación y pulsando nuevamente “Entrar” se finalizará la configuración. Modo Operación: Una vez finalizada la configuración el display deberá mostrar el valor “0000” y pulsando “Arrancar/Parar” se da comienzo al ciclo configurado. Si se pulsa nuevamente “Arrancar/Parar” el ciclo se abortará y el temporizador deberá mostrar el valor “0000” y quedar a la espera de un nuevo pulsado de “Arrancar/Parar”. Si en cualquier momento del ciclo se pulsara el botón “Entrar”, se deberá ingresar inmediatamente al modo de configuración. En operación normal los pulsadores “Subir” y “Bajar” carecen de sentido y no deben realizar ninguna acción. El DVIO Timer deberá cumplir la función de generar la base de tiempo de 1 seg para el temporizador (Asumir que 10 cuentas del timer equivalen a 1 segundo). Para este problema: inicio = 0x0B000 fin = 0x0BFFF PROBLEMA 3 Diseñar un software que implemente el control de llenado y vaciado del DVIO Tanque. El control de nivel del tanque deberá operar de la siguiente manera: 1 - El tanque deberá ser llenado hasta lo que ocurra primero, se alcance el nivel máximo del tanque (sensor LS) o se cumpla con un tiempo máximo (XX) configurado en el DVIO Timer X. Durante este proceso se debe tener en cuenta que antes de detener el proceso de llenado del tanque se debe superar el nivel intermedio (sensor LM) del mismo. 2 - El control deberá ser capaz de mantener el nivel del agua entre los sensores LM y LS contemplando cualquier estado de las válvulas manuales (purga y llenado). 3 - En el caso que se presione el DVIO Pulsador1, el tanque deberá vaciarse Problemas de laboratorio - Vers.1, 2011 3/6 DIGITAL II – DEPARTAMENTO DE SISTEMAS E INFORMÁTICA – UNIVERSIDAD NACIONAL DE ROSARIO en forma completa tomando el tiempo que este proceso demande haciendo uso del DVIO Timer X. (El tiempo será medido desde el pulsado hasta que se alcanza el sensor de nivel mínimo LI). El tiempo medido deberá mostrarse en el DVIO Display. Para este problema: inicio = 0x0C000 fin = 0x0CFFF Nota: tener en cuenta que todos los cambios de estado de los sensores de nivel (LI, LM y LS), pulsadores y timers generan interrupciones las cuales deberán utilizarse para resolver el problema. PROBLEMA 4 Diseñar un software que implemente el control de llenado y vaciado del DVIO Tanque. El control de nivel del tanque será realizado a través del DVIO Pulsadores, los cuales deberán tener la siguiente funcionalidad: Pulsador 1: Controlar el nivel del tanque entorno al sensor de nivel LI Pulsador 2:Controlar el nivel del tanque entorno al sensor de nivel LM Pulsador 3: Controlar el nivel del tanque entorno al sensor de nivel LS Pulsador 4: Deberá vaciar el tanque por debajo del nivel de LI y luego llenarlo completamente hasta superar el valor LS y quedar a la espera de un mando de control (pulsador 1,2 o 3). Al iniciar el proceso, el sistema deberá llenar el tanque hasta superar el valor LS y quedar a la espera de un mando de control (pulsador 1,2 o 3). Para este problema: inicio = 0x0D000 fin = 0x0DFFF Nota: tener en cuenta que todos los cambios de estado de los sensores de nivel (LI, LM y LS) y pulsadores generan interrupciones las cuales deberán utilizarse para resolver el problema. PROBLEMA 5 Diseñar un software que implemente un sistema de conversión de caracteres haciendo uso de los DVIO Impresora, Entrada y Pulsadores. El sistema deberá permitir el ingreso de datos en formato texto en el DVIO entrada (letras en minúsculas y mayúsculas, números y caracteres especiales). El sistema deberá operar de la siguiente manera: 1 - El texto ingresado por Entrada deberá ir mostrándose por la Impresora. El Problemas de laboratorio - Vers.1, 2011 4/6 DIGITAL II – DEPARTAMENTO DE SISTEMAS E INFORMÁTICA – UNIVERSIDAD NACIONAL DE ROSARIO texto debe contener 5 caracteres. 2 - En el caso de que se presione el pulsador 1, la totalidad del mensaje ingresado deberá ser mostrado en letras MAYUSCULAS (de existir números deberán quedar sin alteraciones). 3 - En el caso de que se presione el pulsador 2, la totalidad del mensaje ingresado deberá ser mostrado en letras MINUSCULA (de existir números deberán quedar sin alteraciones). 4 - Si el texto ingresado contiene caracteres especiales (/, “, @ ..) al presionar el pulsador 1 o 2 el sistema deberá generar una interrupción por software e imprimir el siguiente mensaje de error en la impresora: “Conversión No Valida”. Luego de esto, si se presionan nuevamente el pulsador 1 o 2 el sistema deberá mostrar nuevamente el mensaje de error. Luego de ingresar un texto de caracteres válidos deberá ser posible convertir sus letras en mayúsculas o minúsculas presionando los pulsadores 1 o 2 de manera alternada. Notas: Tener en cuenta que todos los pulsadores generan interrupciones las cuales deberán utilizarse para resolver el problema. Utilizar la taba de caracteres ASCII, disponible en la barra de herramientas del emu8086 (“ascii codes”), para determinar el código asociado (en hexa o decimal) a cada carácter o letra para determinar si se trata de una letra mayúscula, minúscula o carácter especial Al momento del ingreso de caracteres e impresión de los mismos (punto 1) tener en cuenta que velocidades de simulación menores a 200ms pueden ocasionar errores en el uso del DVIO Impresora. Para este problema: inicio = 0x0E000 fin = 0x0EFFF PROBLEMA 6 Diseñar un software que implemente un sistema de ingreso de números a través del DVIO Entrada de números y visualización de los mismos mediantes el DVIO Display 7 Segmentos. El sistema deberá operar de la siguiente manera: 1- El sistema deberá permitir el ingreso de un número de 8 cifras. Para esto se debe utilizar el DVIO Entrada de números. Los números deberán ingresarse en dos grupos de cuatro dígitos, validando cada grupo con el pulsador 1. 2- Una vez que se haya detectado el ingreso de los 8 números, el sistema deberá comenzar a mostrar dichos números en el display 7 segmentos de a uno a la vez, rotando la cadena de números de derecha a izquierda hasta mostrar la totalidad de los mismos. La velocidad de barrido de caracteres se deberá conseguir mediante el uso del DVIO Timer 1. Problemas de laboratorio - Vers.1, 2011 5/6 DIGITAL II – DEPARTAMENTO DE SISTEMAS E INFORMÁTICA – UNIVERSIDAD NACIONAL DE ROSARIO 3- Una vez mostrada la primera cadena de caracteres el display deberá mostrar 8888, lo que habilitará al sistema al ingreso de otros 8 números para ser mostrados de la forma que se indicó en el punto 2. Para este problema: inicio = 0x09000 fin = 0x09FFF Problemas de laboratorio - Vers.1, 2011 6/6