Práctica 1. Manejo de recursos y elementos básicos

                                    (Este enunciado será explicado en la primera clase que corresponda a cada grupo)


Objetivos

    Operaciones con números fraccionarios
    Conversión binario-ASCII
    Captura de teclas pulsadas
    Escritura en pantalla
    Manejo de interrupciones

Funcionamiento

La finalidad de la práctica es convertir la pantalla del PC en una pantalla de visualización de un equipo de adquisición de datos, con 4 canales. La entrada será una serie de números, comprendidos entre el 0 y el 255 (00-FFH), que simularán ser la salida de un conversor analógico-digital de 8 bits, que provienen de un "driver" que, en esta primera práctica, será entregada por el profesor. El conversor analógico/Digital convertiría una señal analógica entre 0 voltios y +5 voltios a un valor binario entre el 0 y el 255. El programa irá leyendo estos datos digitales de uno en uno, según lo vaya entregando el conversor,  los convertirá al valor de tensión correspondiente y presentará en pantalla (con dos dígitos decimales) lo siguiente:
.

  • La pantalla se dividirá en cuatro partes, una para cada canal.
  • En cada parte se presentarán los 16 últimos datos leídos del conversor, presentandolos en una pequeña ventana de 2 filas por 8 datos cada fila, en hexadecimal. 
  • El valor en voltios de la medida actual    . 
  • El valor de tensión media de las 8 últimas medidas. 
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 el mínimo posible hasta un máximo de un segundo, aproximadamente. Este tiempo también se deberá indicar en la pantalla.
El programa comenzará la presentación al pulsar F10 y se detendrá al pulsar F9, pudiendo volver a arrancar con F10. Finalizará al pulsar F7.
Mediante las teclas F1 a F4 se activara/desactivará la lectura y presentación de los canales 1 a 4 respectivamente.

Plazo de entrega : La presentación y evaluación de esta práctica será la sindicada en el  calendario, según el grupo (ver calendario ). El nombre del fichero o ficheros a entregar será de la forma parejap1.asm, por ejemplo 3a28p1.asm. Si hay más de un fichero, nombrarlo con números sucesivos y añadir un .bat que los ensamble y linke.(3a28p11.asm, 3a28p12.asm,... 3a28p1.bat)





Ejercicios previos.

Estos ejercicios se proponen como un "entrenamiento" a la programación en ensamblador. La realización de estas rutinas será provechosa para la primerá práctica, pues permitirá conocer  de forma sencilla como manejar ciertos dispositivos de manera independiente..
Realizar un programa que muestre en pantalla el contenido de la posición de memoria 0:300. La presentación debe hacerse en hexadecimal en la fila 20 y columnas  34 y 35 de la pantalla. Se puede utilizar la interrupción 10H o el acceso directo a memoria de video

Realizar un programa que muestre en pantalla el contenido de la posición de memoria 0:300. La presentación debe hacerse en decimal en la fila 20 y columnas  34 y sucesivas de la pantalla. Se puede utilizar la interrupción 10H o el acceso directo a memoria de video

Realizar un programa  que de forma consecutiva muestre inicialmente en las posiciones anteriores de la pantalla el dígito decimal 3. Cada vez que se pulsa las tecla + se muestra el número pero incrementado en una unidad. Si se pulsa -, se muestra el número pero decrementado en una unidad. Si se pulsa * se acaba el programa. Solo se consideran números decimales de 1 dígito



Soporte teorico

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.
Suponer que la señal de entrada a medir estuviera en el margen de -12 a 12 v. y el conjunto de estados de salida posible es desde el 0 al 255 (8 bits). Cualquier valor de tensión se codificará con un número entre el 0 y el FFH, para lo que se deberá calcular a qué 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:
 

Tensión entrada 
Codificación  Tensión entrada  Codificación
-12 voltios
0H
3.45 voltios
A5H
-5.5 voltios
45H
8 voltios
D5H
-2 voltios
6BH
10,67 voltios
F2H
0 voltios
80H
11,5 voltios
FBH

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.
NOTA: en la práctica de este curso el margen de valores de tensión a la entrada es de 0 a 5 v.

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:
 

Caracter
     
     
   
   
     
       
     
 .              
 
 ............ Representación en ROM

   0011 1110 = 3EH
   0110 0011 = 63H
   0110 1111 = 6FH
   0111 1011 = 7BH
   0111 0011 = 73H
   0110 0011 = 63H
   0011 1110 = 3EH
   0000 0000 = 00H

 

La figura representa el número '0', el conjunto de 8 bytes forma una retícula de 64 bits. Los bits que están a '1' definen el contorno del carácter, es decir, los puntos que habrá que iluminar en una pantalla para conseguir una representación del carácter.
La tabla de todos los caracteres está ordenada según el código ASCII. Por tanto, para acceder a un carácter concreto habrá que sumar a la posición inicial (F0000:FA6EH) un desplazamiento que será igual al número ASCII del carácter multiplicado por 8, puesto que, como ya sabemos, cada carácter está representado mediante 8 bytes consecutivos.
Una vez que se conoce la dirección donde está almacenada la representación del carácter que se quiere imprimir, se toman los datos byte a byte (fila a fila) y se va examinando cada uno de los bits individuales. Si el bit correspondiente es '0', el procedimiento escribirá un espacio en la pantalla, mientras que si el bit examinado es un '1', se escribirá un caracter grueso ( ). Al terminar de escribir una fila habrá que colocar el cursor en la posición correspondiente a la primera columna de la siguiente fila, y volver a repetir la operación hasta terminar de explorar las 8 filas.

Página editada y mantenida por Guillermo Glez. de Rivera
  Volver atrás