Operaciones con números fraccionarios
Conversión binario-ASCII
Captura de teclas pulsadas
Escritura en pantalla
Manejo de ficheros en disco
Manejo de interrupciones, cambio de vectores
Funcionamiento
La finalidad de la práctica es convertir la pantalla del PC en
una pantalla de visualización de un equipo de medida. La entrada
será una serie de números, comprendidos entre el 0 y el 255,
que simularán ser la salida de un conversor analógico-digital
de 8 bits, grabados en un fichero. Éste convertiría una señal
analógica entre -12 voltios y +12 voltios a un valor binario entre
el 0 y el 255. El programa irá leyendo estos datos digitales de
uno en uno y de forma periódica, los convertirá al valor
de tensión correspondiente y presentará en pantalla (con
dos dígitos decimales) lo siguiente:
.
|
|
El programa deberá permitir definir un margen dentro del cual
los datos sean válidos, y si algún dato se sale de ese margen,
el PC emitirá un sonido. Ese margen se determina mediante los cursores
de izquierda-derecha, y variarán de forma simétrica respecto
del cero. Se indicará ese margen sobre la barra horizontal mediante
alguna marca (ver figura).
La periodicidad con que se leen los datos (y por tanto se refrescará
la pantalla) se controlará mediante las teclas + y - e irá
desde un mínimo de unos 100 msg. hasta un máximo de unos
2 segundos. Este tiempo también se deberá indicar en la pantalla.
El programa comenzará la presentación al pulsar F1 y
se detendrá al pulsar F2, pudiendo volver a arrancar con F1. Finalizará
al pulsar F3 o bien cuando se terminen los datos del fichero, cuyo nombre
por defecto será "voltios.dat" y contendrá, al menos, 300
valores.
Fichero ejemplo para pruebas: voltios.dat
Mejoras opcionales:
Presentación de la medida del valor medio mediante números
grandes, de 8x8 caracteres.
Lectura de diferentes nombres de fichero de datos a través del
teclado.
Plazo de entrega : La presentación y evaluación de esta práctica será la semana del 22 de noviembre, según el grupo. El nombre del fichero o ficheros a entregar será de la forma pareja_p1.asm, por ejemplo lt28_p1.asm. Si hay más de un fichero, nombrarlo con números sucesivos y añadir un .bat que los ensamble y linke.(lt28_p11.asm, lt28_p12.asm,... lt28_p1.bat)
Conversor Analógico-Digital. Dispositivo que obtiene una
representación digital de una señal analógica presente
a su entrada. Los procesos que debe llevar a cabo son los de cuantificación,
por el que la señal analógica de entrada se transforma en
un conjunto discreto de estados de salida, y codificación,
el cual asigna un conjunto de bits a cada uno de dichos estados.
En nuestro caso, si la señal de entrada a medir está
en el margen de -12 a 12 v. y el conjunto de estados de salida posible
es desde el 0 al 255, se realizará la siguiente asignación:
Cualquier valor de tensión se codificará con un número entre el 0 y el FFH, para lo que se deberá calcular a que tensión equivale pasar de un estado al siguiente: si el margen a medir es de 24 voltios y disponemos de 256 estados diferentes, cada estado consecutivo representa un salto de 24/256=0,09375 voltios. Esto limitará la precisión de la conversión, valores muy cercanos de tensión, cuya diferencia sea menor al valor anterior, tendrán la misma codificación.
La siguiente tabla muestra unos ejemplos de codificaciones de diferentes
valores de tensión a la entrada del conversor:
|
Codificación | Tensión entrada | Codificación |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
El programa pedido deberá hacer la conversión inversa, dado un número codificado, obtener el valor analógico de tensión al que corresponde. Por ejemplo, sea el estado 57H (dato leído del fichero del disco). El valor absoluto de tensión que representa es de 57H x 0,09375 voltios = 8,15625 voltios, respecto del 0H, osea, respecto de -12 v. Por tanto la tensión real será -12+8,15625 = -3,84375. Como nos piden sólo dos decimales, el dato final a presentar será -3,84 voltios.
Operaciones con decimales. Se puede utilizar la técnica que se desee. Una posible solución puede ser emplear punto fijo. Tomar los datos en un tamaño de16 bits, de forma que los 8 más significativos representen la parte entera y los 8 menos significativos la parte decimal. De esta forma se pueden utilizar las operaciones aritméticas definidas en el 8086 sin mayor problema. Recordar la notación binaria para números fraccionarios.
Control de acciones periodicas. La interrupción 8 (INT
8H) del PC se activa mediante un generador de reloj interno cada 55 mseg.
La rutina de atención a la interrupción actualiza la hora
del PC y llama a la interrupción 1CH. La subrutina de atención
a esta interrupción no realiza ninguna función, ya que tan
sólo contiene una instrucción IRET.
Se puede realizar un programa que instale unos nuevos vectores a la
interrupción 1CH, de forma que apunten a una rutina de atención
cuya finalidad sea la que nos convenga. De esta forma podremos realizar
ciertas operaciones de forma periodica, sin tener que modificar ni complicar
el código del programa principal
Caracteres de gran tamaño. La idea se basa en explorar
la tabla de caracteres empleada internamente por el ordenador. Esta tabla
se encuentra en la memoria ROM, a partir de la dirección F000:FA6E.
La forma de cada carácter está descrita por 8 bytes, cada
uno de los cuales representa una fila, según se muestra a continuación:
|
............ | Representación en ROM
0011 1110 = 3EH
|