Lógica de petición de interrupciones X. Chip controlador de teclado (8042/8741/8742) línea serie

Documentos relacionados
Periféricos Interfaces y Buses

ESTRUCTURA DE COMPUTADORES I (Capítulo 16:El Teclado) 1/5 16-EL TECLADO

Arquitectura de computadoras

Tema 9 Periféricos de Entrada

INTRODUCCIÓN. Comunicación Serial.

Tabla de interrupciones

VOCABULARIO DEL HARDWARE. Docente Yeni Ávila

ARQUITECTURA DE LOS SISTEMAS BASADOS EN MICROPROCESADOR

Tema 4: Las interrupciones y la ROM-BIOS

CURSO: MICROCONTROLADORES UNIDAD 4: COMUNICACIÓN SERIE- ARDUINO PROFESOR: JORGE ANTONIO POLANÍA

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA FACULTAD DE PSICOLOGIA CURSO: INTRODUCCION A LA INFORMATICA SECCION: A INFORMATICA

Bloque III: El nivel de transporte. Tema 7: Intercambio de datos TCP

Figura 2. Formato de un dato serie síncrono.

PERR TO MOBF INH A2 SYS IBF OBF. Tabla 1: Flags de estado del status register (0x64) en modo PS/2

Relación de Problemas I

TEMA 1: Concepto de ordenador

ITT-327-T Microprocesadores

Comunicación Serial: Conceptos Generales

TEMA 6.- INTERFACES PARA DISCOS DUROS. nexo de conexión que facilita la comunicación entre dos dispositivos

3 Interfaz PC DSP. 3.1 Introducción a las comunicaciones serie. 3 Interfaz PC DSP

Práctica 5MODBUS: Bus Modbus

Laboratorio 06. Diseño e implementación de un sistema digital para la captura de caracteres desde teclado

GESTION DE ENTRADA Y SALIDA

MICROPROCESADORES I ELECTRONICA DIGITAL III INTERFASE PROGRAMABLE A PERIFERICOS PPI 8255

ENTRADA-SALIDA. 2. Dispositivos de Carácter: Envía o recibe un flujo de caracteres No es direccionable, no tiene operación de búsqueda

Guía rápida para gestionar el puerto paralelo del PC

Periféricos II Teclado y ratón PS2

EL BUS I2C CARACTERISTICAS. Fernando Remiro

MANTENIMIENTO DE EQUIPO DE CÓMPUTO. CINDEA Sesión 06


28/09/2012. Interfaz con Dispositivos de Salida. Interfaz con Dispositivos de Entrada. Port Mapped. Memory mapped. Interfaz con Dispositivos I/O

Transmisión del diseño en la serie bartack

0-31 : caracteres de control : carac. Comunes : especiales (flechas, símbolos) y particulares (ñ)

Telegrama TP1. KNX Association

Bloque III: El nivel de transporte. Tema 7: Intercambio de datos TCP

SISTEMAS BASADOS EN MICROPROCESADORES

Microprocesador. Introducción. Instituto Sagrado Corazón de Jesús

6. Entrada y Salida Explicación de la interfaz entre el computador y el mundo exterior.

2

PLACA BASE. Diferentes tipos de placas base de los fabricantes habituales.

TEMAS 1 y 2 TECNOLOGIA DE LAS COMUNICACIONES INGENIERÍA INFORMÁTICA

Funcionamiento de un ordenador. Conrado Perea

INT 21H Función 02H Salida de Carácter LLAMADA: AH = 02H DL = Código ASCII a enviar al dispositivo de salida. DEVUELVE: NADA.

La expresión módem procede de las palabras modulador-demodulador, que son las dos funciones básicas que realiza ese dispositivo.

Arquitectura de Computadoras. Anexo Clase 8 Buses del Sistema

Manual de Usuario. Como controlar la carga de la batería

Centro de Formación Profesional Nº 401 Curso: Reparador de PC Instructor: Walter Carnero

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

... La Memoria. La Memoria CAPÍTULO. Conceptos Básicos sobre Tecnologías de la Información

COMUNICACIÓN I2C (Bus de circuito inter-integrado)

Informática Ingeniería en Electrónica y Automática Industrial

ITT-327-T Microprocesadores

APUNTE DEL 8155 ELECTRÓNICA DIGITAL III

(7) Unidad 7. Buses básicos de la arquitectura 80x86 SISTEMAS BASADOS EN MICROPROCESADORES. Grado en Ingeniería Informática EPS - UAM

Laboratorio 5: Tarjeta de Desarrollo Spartan-3

Conceptos básicos de comunicación de datos

ARQUITECTURA DE COMPUTADORES DESCRIPCIÓN BUS PCI (Tema 1: Conexión Externa de Procesadores. Buses)

Práctica 9. Organización del Computador 1 2do. Cuatrimestre de 2005

LA COMPUTADORA. Hardware El hardware se refiere a las partes físicas de un computador, las que se pueden ver o tocar.

MANUAL DE PRODUCTO KLIC-DD INTERFAZ KNX DAIKIN ZN1CL-KLIC-DD. Edición 1 Versión 1.0

Velocidades Típicas de transferencia en Dispositivos I/O

Universidad Carlos III de Madrid Grado en Ingeniería Informática Tecnología de Computadores

SISTEMAS ELECTRÓNICOS DIGITALES

INTERRUPCIONES. Existen 256 interrupciones En el modo real cada una tiene un vector asociado Vectores de 4 bytes: segmento + offset 32 F0 50 8A

Periféricos Práctica 4: CD-Audio

Ejercicio * N N X X X X X X X X X X X X X X X X X X X X

CONTROL DE UN VENTILADOR POR PUERTO PARALELO

Guía rápida de utilización

Introducción a la Entrada/Salida

EVOLUCIÓN HISTÓRICA DE LOS µp

Desarrollo de Productos Electrónicos

BIOS: Basic Input Output System

Ecomaster Basic ECOMASTER BASIC MANUAL DEL USUARIO. Control de aire acondicionado para pasajeros. Versión 1.0 Edición 0206

Unidad 2: Taller de Cómputo. Estructura y Componentes de la Computadora UNIDAD DOS: INTRODUCCIÓN

Arquitectura de Computadores

INTRODUCCIÓN. Interrupciones.

Examen 22 de Febrero 2006

TIMEFY - GUÍA DE INSTALACIÓN Y USO

4. Escribe con palabras lo que significan las siguientes letras y di cuántos bytes hay aproximadamente: a) 1 Gb? b) 1 Mb? C) 1 Kb?

Hardware del ordenador

Procedimientos para el Montaje de Equipos Microinformáticos.

En primer lugar, analizaremos algunos de los principios del hardware y después del software de E/S en general.

SUPER CONTROLADOR DE SERVOS S310175

Tema 4: SISTEMAS DE ENTRADA/SALIDA. Un computador no puede estar formado sólo por la CPU y la memoria.

Las Hojas de Cálculo Electrónicas

sangre completa Uso previsto Compatibilidad Instalación del adaptador PTS Connect en el analizador / Instalación del MEMo Chip Emparejamiento

Manual de MiniTIM - Bluetooth

Práctica de Arquitectura de Computadores Sistemas de Entrada/Salida: Entrada/Salida Programada Curso 2016/2017

Función del sistema operativo

Lenguaje Ensamblador. Equipo 3. Alberto Abraham Gomez Cruz Edgar

Capítulo III Puerto paralelo

CPU MEMORIAS CACHE. Memorias caché. Memoria caché = memoria de tamaño pequeño y acceso rápido situada entre la CPU y la memoria principal.

(1) Unidad 1. Sistemas Digitales Basados en Microprocesador SISTEMAS BASADOS EN MICROPROCESADORES. Grado en Ingeniería Informática EPS - UAM

Tarjetas aceleradoras de gráficos

6-3-5 PC Link (sólo CPUs CJ1M)

AMPLIACIÓN DE SISTEMAS OPERATIVOS

3.1. Buses Y La Transferencia De La Información.

Entrada y Salida! EC-2721 Arquitectura del Computador I! Entradas/Salidas: Problemas. Entradas salidas: Criterios. Amplia variedad de periféricos!

Guía para la instalación de discos duro SATA y Configuración RAID

Estructura de los sistemas de cómputo

Transcripción:

EL TECLADO El teclado es la principal vía de entrada de comandos y datos procedentes del usuario al computador. Está unido al PC por un conector de 5 contactos, por el que circulan la señal de reloj, la de datos y las señales de referencia. La comunicación con el PC, por consiguiente, es serie. Los elementos implicados en el funcionamiento del teclado y su comunicación con el computador son los que muestra la siguiente figura: IRQ1 Lógica de petición de interrupciones X Matriz de hilos Y datos Chip controlador de teclado (8042/8741/8742) línea serie Chip de teclado Controlador de teclado Teclado Bus del sistema El funcionamiento del teclado es el siguiente: cada tecla se encuentra en el cruce entre un hilo vertical y un hilo horizontal en la matriz de hilos. Los hilos verticales y los horizontales no se tocan en estado de reposo, están a distinta altura. Cuando se pulsa una tecla, se establece un contacto entre el hilo vertical y el horizontal que forman el cruce en el que se encuentra la tecla. El chip de teclado está constantemente muestreando la matriz para detectar cuándo se ha producido un contacto entre un hilo vertical y uno horizontal, señal de que se ha pulsado una tecla. A partir del hilo vertical y el horizontal involucrados en el contacto, el chip de teclado reconoce la tecla que se ha pulsado. Cuando el chip de teclado reconoce que se ha pulsado una tecla, calcula el código correspondiente a la tecla pulsada (un código de 8 bits llamado código scan ), y lo transmite por el cable serie al controlador de teclado. La transmisión consta de un bit de arranque, 8 bits de datos, uno de paridad (impar) y uno de parada. El cable serie contiene un hilo que lleva la señal de reloj, por lo que la transmisión es síncrona, a diferencia de la que se puede realizar por la UART. 1/7

El controlador de teclado se encuentra en el PC. Se encarga de recibir los datos en formato serie, convertirlos a formato paralelo, y solicitar una interrupción a la CPU para que los lea a través del bus del sistema. En los PC/XT el controlador de teclado era un simple interfaz serie, capacitado únicamente para recibir datos del teclado. A partir del PC AT se incluye un controlador más sofisticado, como el 8042, o el 8741 ó 8742, más modernos. De esta manera, el controlador de teclado puede llevar a cabo algunas funciones más que en el PC/XT. Por ejemplo, a partir del AT es posible, además de recibir los códigos scan del teclado, enviarle información (comandos). Como se puede ver, el teclado responde al modelo clásico de sistema de entrada / salida: en él se puede encontrar el periférico, que en este caso sería la matriz de hilos y teclas, con una cierta circuitería destinada a convertir la información exterior (pulsaciones) a formato digital (función que lleva a cabo el chip del teclado), un controlador, el controlador de teclado, que recibe del teclado los datos que hay que transmitir a la CPU (y, a partir del PC AT, envía al teclado información de control y recibe de él información de estado), actuando de puente entre periférico y CPU, y la propia CPU como tercer elemento. En este caso, el controlador de teclado utiliza entrada / salida por interrupciones (aunque siempre es posible inhabilitar las interrupciones y utilizar entrada / salida programada, como se hará en algún ejercicio de esta práctica). CÓDIGOS SCAN Los códigos que envía el teclado, y que llegan a la CPU a través del controlador de teclado, no son los correspondientes al código ASCII que devuelven las interrupciones del ROM BIOS. Son unos códigos particulares del teclado llamados códigos scan. El teclado no tiene información sobre qué tecla se encuentra en cada intersección de la matriz (si es una a o un ; ). El teclado identifica la posición de la tecla en el teclado, y se la indica a la CPU por medio del código scan. Los códigos scan están asociados a posiciones del teclado. Es la propia CPU la que convierte un código scan del teclado en un código ASCII correspondiente a un carácter, y lo hace por medio de las rutinas de interrupción que son invocadas cuando el controlador de teclado genera una petición de interrupción. Estas rutinas leen el dato del controlador de teclado (el código scan ) y lo convierten a código ASCII según una tabla interna (en caso de que sea un carácter del código ASCII; si se trata de teclas mudas, como la tecla Ctrl o Alt, se genera también un código, aunque no sea ASCII). Esto permite que una tecla situada en una posición determinada se traduzca como un código ASCII u otro, según el PC esté configurado para un idioma u otro (es el caso de la tecla ñ del teclado español, que en teclados para otros idiomas tiene un carácter distinto: el código scan que envía el teclado es el mismo en todos los teclados, son las rutinas de interrupción las que deciden que sea una ñ u otro carácter). Hay códigos scan de dos tipos: los códigos make y los codigos break. Los primeros se generan cuando se pulsa una tecla, y los segundos cuando se suelta. Esto permite que el PC pueda saber cuándo se pulsan dos teclas a la vez. Por ejemplo, si se recibe el código make de la tecla mayúsculas y luego el código make de la a, el PC deduce que se debe generar una A. Más adelante se recibirán el código break de la a y el código break de la tecla mayúsculas, al ser soltada cada una de ellas. Como observación, el código scan de la a y el de la A es el mismo, puesto que para ambas se pulsa la misma tecla. Lo que cambia es que, en el caso de la A, además, se pulsa la tecla mayúsculas. En general, el código make de una tecla es único, independientemente de cuántos caracteres tenga dibujados encima. Lo que distingue entre unos y otros son los códigos adicionales de teclas de modificación que se reciben (mayúsculas, Ctrl, Alt 2/7

...). Lo mismo ocurre para los códigos break. Para facilitar la conversión entre códigos make y códigos break, éstos se establecen de forma que para obtener el código break correspondiente a un código make únicamente hay que sumar al código make 128 (80h), por lo que los códigos make tienen el bit más significativo a 0 y los códigos break a 1. Por último, es necesario tener en cuenta que ha habido distintos tipos de teclado a lo largo de la historia del PC. Inicialmente se utilizó el teclado PC/XT. Con el PC AT se introdujeron algunas modificaciones en el teclado original y se añadieron teclas. Más adelante apareció el teclado MF- II, que era el que se utilizaba en todos los clónicos hace unos años, hasta que hubo que modificarlo para incluir las teclas nuevas requeridas por Windows 95. La distribución de teclas y sus correspondientes códigos make se incluyen como anexo al final del documento. ACCESO AL CONTROLADOR DE TECLADO Para leer los códigos que envía el teclado se puede acceder directamente a los puertos del controlador de teclado. Los puertos del controlador de teclado son los que representa la figura siguiente: Input Buffer Output Buffer Control Register Status Register Output Port Input Port TECLADO controlador de teclado Bus del sistema Los puertos que son accesibles directamente desde la CPU son los siguientes: puerto dir r/w output buffer 60h r input buffer 60h w control register 64h w status register 64h r Esquema de los registros del controlador de teclado 3/7

No hay que confundir el puerto de salida con el buffer de salida. El primero sirve para que el controlador de teclado envíe datos al teclado, mientras que el segundo es donde el controlador deposita los datos para la CPU. El caso es análogo para el buffer de entrada y el puerto de entrada. Sólo los buffers de entrada y de salida son accesibles por la CPU (aparte de los registros de control y estado). El código scan que el teclado envía se puede obtener del buffer de entrada. Se genera una interrupción cada vez que llega un código nuevo, por lo que será necesario interceptar esta interrupción.. El registro de estado refleja el estado del controlador de teclado. Su formato es: 7 0 pare tim auxb keyl c/d sysf inpb outb pare: error de paridad en el último byte del teclado o dispositivo auxiliar 1= error de paridad; 0=no hubo error tim: error de time-out 1=error de time-out; 0=no hubo error auxb: dato del buffer de salida del dispositivo auxiliar 1=dato del dispositivo auxiliar; 0=dato del teclado keyl: telcado bloqueado 1=teclado no bloqueado 0=teclado bloqueado c/d: comando/dato 1=comando en puerto 64h; 0=dato en puerto 60h sysf: system flag 1=self-test OK 0=power-on reset inpb: estado del buffer de entrada 1=dato aún en el buffer de entrada 0=buffer de entrada vacío outb: estado del buffer de salida 1=dato aún en el buffer de salida 0=buffer de salida vacío Antes de explicar el significado de los bits del registro de estado es necesario comentar que, en el caso del teclado del IBM PS/2, es posible conectar al controlador de teclado también el ratón. Es a eso a lo que se refiere el dispositivo auxiliar. En el resto de teclados simplemente hay que ignorar lo que se refiera al dispositivo auxiliar. El bit pare indica si ha habido un error de paridad en la última comunicación con el teclado (o el dispositivo auxiliar). tim especifica si el teclado no ha respondido en el tiempo máximo especificado para ello. auxb muestra si el buffer de salida tiene un byte procedente del ratón. outb indica si hay un dato en el buffer de salida listo para ser leído por la CPU. Al ser leído el buffer de salida, los bits auxb y outb se ponen a cero automáticamente. inpb indica si el dato 4/7

del buffer de entrada ha sido leído o no. c/d muestra si el último dato enviado por la CPU fue un dato al buffer de entrada o un comando al registro de control. keyl especifica si el teclado se encuentra bloqueado o no, y sysf si el auto-test se realizó correctamente. De este registro son importantes, sobre todo, los bits inpb y outb, puesto que permiten sincronizar la comunicación entre la CPU y el controlador de teclado, de forma que la CPU no sobreescriba datos en el buffer de entrada ni lea varias veces el mismo del buffer de salida. En cualquier caso, si la CPU se limita a leer códigos scan enviados por el teclado, no es necesario comprobar estos bits, ya que el propio controlador genera una interrupción cuando hay un carácter nuevo por leer. El uso principal de estos bits se hace cuando se quiere enviar comandos al controlador de teclado o al propio teclado. Los comandos para el controlador de teclado se escriben en el registro de control. Este registro tiene 8 bits, y se utiliza exclusivamente para recibir estos comandos. Algunos de los comandos más útiles pueden ser: código comando descripción aah auto-test el controlador de teclado lleva a cabo un test de sí mismo y coloca el valor 55h en el buffer de salida si no detecta errores abh comprobar interfaz de teclado el controlador de teclado chequea el interfaz de teclado y escribe el valor 00h en el buffer de salida si no hay errores adh inhabilitar teclado inhabilita el teclado aeh habilitar teclado habilita el teclado coh leer puerto de entrada lee el valor que contiene el puerto de entrada y lo escribe en el buffer de salida d1h escribir puerto de entrada lee el siguiente byte (que deberá ser escrito en el propio registro de control por la CPU) y lo escribe en el puerto de salida ACCESO AL TECLADO Es posible acceder a los datos enviados por el teclado, y si se trata de un teclado AT o posterior, también es posible enviarle comandos. El controlador de teclado pone automáticamente los datos recibidos del teclado en el buffer de salida. El teclado envía los códigos make y break según se van pulsando y soltando teclas. Si su buffer interno se llena, envía el código 00h para avisar a la CPU. Además, es un teclado AT o posterior, responde a los comandos que le envíe la CPU. Si no se envían comandos al teclado (que se verán ahora; no confundir con los comandos para el controlador de teclado vistos en la sección anterior), éste se limita a enviar códigos scan. Con todo esto, los códigos que puede enviar el teclado al controlador (y que la CPU leerá eventualmente) son: código 00h 01h-58h 81h-d8h 41abh aah eeh fah significado Buffer interno del teclado lleno Códigos make Códigos break Código identificador del teclado MF-II BAT OK Respuesta al comando eco Código ACK 5/7

fch feh ffh BAT error Petición de reenvío Error de tecla El significado de la mayoría de estos códigos tiene que ver con los comandos que se pueden enviar al teclado, puesto que son la respuesta a ellos. Estos se ven más adelante. A medida que el teclado va detectando teclas y calculando sus códigos scan, va comprobando si el buffer de salida del teclado está vacío. Cuando lo está, transfiere un código de su buffer interno, por medio del cable serie, al puerto de entrada del controlador de teclado. Éste lo coloca en el buffer de salida y activa el bit outb del registro de estado, para indicar que hay un dato para leer. Además, solicita una interrupción por la línea IRQ1. Para enviar comandos al teclado, la CPU debe primero esperar a que el buffer de entrada esté vacío (bit inpb del registro de estado=0), y cuando lo está, colocar el comando en el buffer de entrada del controlador de teclado. Éste lo coloca automáticamente en el puerto de salida para que sea enviado al teclado. Hay que tener en cuenta que para poder enviar comandos al teclado, éste debe ser el modelo AT o uno posterior, ya que el modelo PC/XT no puede recibir comandos. Además, hay algunos comandos que no tienen sentido salvo en un teclado MF-II, como se verá. Salvo para los comandos reenviar y eco, el teclado responde con el código ACK (fah). Por ejemplo, cuando la CPU envía el comando para encender o apagar los LEDs del teclado, éste envía el código ACK al controlador de teclado (que lo pone en el buffer de salida), y espera un byte que le indica cuáles activa y cuáles no. Los comandos disponibles son: comando código descripción activar/desactivar LEDs edh el teclado responde con un código ACK y espera un nuevo byte que especifique el estado deseado de los LEDs. Los bits 0 a 2 de este byte indican con 1 o 0 si los Leds de BloquearDesplazamiento, BloquearTecladoNumérico y BloquearMayúsculas respectivamente deben estar encendidos o apagados eco eeh devuelve el código eeh. Sirve para comprobar la comunicación entre teclado y controlador de teclado. El teclado no envía un ACK establecer o identificar juego f0h el teclado responde con ACK y espera un byte de la CPU. EL byte de códigos scan especifica uno de los tres juegos de códigos scan (lo normal es el 2). Si el byte tiene valor 0, entonces el teclado responde con un byte que indica el juego activo en ese momento identificar teclado f2h el teclado XT no responde, el teclado AT responde con ACK, y el MF-II especificar parámetros del teclado f3h responde con ACK y el código 41abh (byte inferior primero) el teclado responde con ACK y espera un nuevo byte. Con este byte se especifican el tiempo de espera (cuánto tiempo se debe mantener la tecla pulsada para que se envíe más de un carácter) y la tasa de repetición del teclado (cuántos caracteres por segundo se envían cuando se deja apretada una tecla). El formato aparece más abajo reenviar feh avisa al teclado de que repita el envío del último carácter. El teclado no responde con ACK reset ffh el teclado envía un ACK y efectúa un auto-test, comprueba la comunicación con el controlador de teclado (para lo cual es necesario que el controlador responda según una pauta determinada) y luego 6/7

efectúa un BAT (Basic Assurance Test), a cuya terminación responde enviando BAT OK (aah) o BAT error (fch). El formato del byte que especifica el tiempo de espera y la tasa de repetición es el siguiente: los bits 6 y 5 especifican el tiempo de espera. Las combinaciones 00 a 11 seleccionan 250 ms, 500 ms, 750 ms y 1000 ms respectivamente. En cuanto a la frecuencia de envío de caracteres, los bits 2 a 0 indican la frecuencia base. Las combinaciones desde 000 a 111 seleccionan 30, 26 7, 24, 21 8, 20, 18 5, 17 1 y 16 respectivamente. Los bits 4 y 3 especifican por cuánto se divide la frecuencia base: 00 por 1, 01 por 2, 10 por 3 y 11 por 4. La frecuencia de envío de caracteres debe entenderse como el número de caracteres que se envían cada segundo si una tecla se mantiene pulsada durante todo ese segundo. El bit 7 debe estar a 0. Por ejemplo, para especificar un tiempo de espera de 500 ms, y frecuencia de envío de 10 caracteres por segundo, se enviará el byte: 00101100. Los bits 6 y 5 son 01 para indicar espera de 500 ms, los bits 4 y 3 están a 01 para indicar dividir por 2, y los bits 2 a 0 a 100 para indicar frecuencia base de 20 caracteres/s. EJERCICIOS OBLIGATORIOS 1.- Escribir un programa que saque por pantalla los códigos ASCII correspondientes a los códigos scan enviados por el teclado a medida que se van pulsando teclas. Para realizar este ejercicio es necesario capturar la interrupción de teclado. Puesto que el controlador de teclado utiliza la línea IRQ1, el número de vector correspondiente será el 9. Para terminar correctamente la rutina de interrupción, es necesario, antes de salir de ella, enviar el valor 20h al puerto 20h. Convertir únicamente los códigos make entre 1 y 63 y sus correspondientes códigos break, y sólo para los caracteres visibles. Para ello, ayudarse de la tabla que entregará el profesor en un fichero. 2.- Escribir un programa que inhabilite el teclado y, pasado un tiempo, lo vuelva a habilitar. 3.- Escribir un programa que compruebe, con el comando eco del teclado, que la comunicación entre controlador de teclado y teclado funciona correctamente. OPCIONALES 1.- Escribir un programa que encienda, alternativamente, los LEDs del teclado. 2.- Escribir un programa que permita al usuario establecer la tasa de repetición y el tiempo de espera. NOTA: Puede ser necesario, en algún momento, enmascarar la línea de interrupción del controlador de teclado. Para ello, basta con enviar el valor 02h al puerto 21h. Para volverla a habilitar, enviar a la misma dirección el valor 00h. 7/7