Operaciones con números fraccionarios
Conversión binario-ASCII
Captura de teclas pulsadas
Escritura en pantalla
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. Éste convertiría una señal analógica
entre -9 voltios y +9 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:
.
|
![]() Ejemplo orientativo de presentación |
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 55 msg. hasta un máximo de 1 segundo,
aproximadamente. 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.
Los datos se obtendrán a través del servicio 61H (INT
61H), descrito a continuación.
Lectura de un dato del conversor
INT 61H AH = 01H
Descripción: La función de esta rutina es leer un dato que proviene del conversor analógico-digital
Uso: Entrada: AH = 01H
Salida:
AL = dato leído
AH = 0 lectura correcta
AH = -1 no hay más datos
Registros afectados: AX
En esta primera parte, este servicio será entregado al alumno en un fichero ejecutable que contendrá el programa residente que cumple la especificación anterior. Para su uso se debe ejecutar antes de probar el programa vuestro, con lo que el "driver" queda residente y responderá a la interrupción 61H. Basta con ejecutarlo una sola vez.
Se incluye el código fuente y se recomienda su lectura. (¡No hace falta ensamblarlo ni linkarlo!)
Mejora opcional: Presentación
de la medida del valor medio mediante números grandes, de 8x8 caracteres.
Plazo de entrega : La presentación y evaluación de esta práctica será la semana del 13 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 -9 a 9 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 18 voltios y disponemos de 256 estados diferentes, cada estado consecutivo representa un salto de 18/256=0,0703125 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. Para simplificar, se utilizará el valor de 0,071 como valor de salto, con lo que el valor máximo que se podrá medir será de 255*0,071=18,105 voltios.
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,071 voltios = 6,177 voltios, respecto del 0H, osea, respecto de -9 v. Por tanto la tensión real será -9+6,177 = -2,823. Como nos piden sólo dos decimales, el dato final a presentar será -2,82 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
|