Control del teclado

Anuncio
Buses y Periféricos. 99/00
Control del teclado
Control del teclado.
El teclado es uno de los principales medios de introducir datos en el computador. Se trata de un
dispositivo externo al computador que recoge las pulsaciones sobre unas teclas y envía a este un código
que depende de la tecla pulsada. Es en el computador donde se le asignan significados a estos códigos.
Naturalmente estos significados deben ser coherentes con el símbolo que aparece sobre la tecla pulsada.
Estructura de un teclado
5V
o u tp u t
5V
1
0
1
1
1
0
1
in p u t
1
Un teclado es una matriz de conectores que enlazan en cada caso su fila con su columna. Por cada fila y
cada columna circula una intensidad de corriente que es detectada en el caso de las columnas por un
puerto de entrada. Las filas son a su vez alimentadas por un puerto de salida. Este mecanismo permite
detectar cuándo alguna tecla ha sido pulsada y generar un pseudo código que se utilizará como índice en
una tabla que almacena los códigos asignados previamente a cada una de las teclas.
En la figura hemos pretendido representar como ocurre la detección de la pulsación de una tecla. Las
flechas gruesas indican el flujo de corriente hacia el puerto de entrada. En los lugares a donde llega la
corriente el puerto detecta un nivel lógico alto (1) mientras que en los puntos a donde no llega corriente
detecta un cero lógico. A estos lugares no alcanza la corriente porque se ha desviado debido a que: 1) se
ha pulsado una tecla y 2) la salida del puerto output correspondiente a la fila de la tecla pulsada se ha
conectado a tierra (0 lógico).
El proceso de detectar una tecla pulsada tiene dos fases. Una primera de detección de pulsación. Para ello
el puerto de salida se carga con ceros en todas las filas. A continuación se lee el puerto de entrada. Si
alguno de sus bits está a cero es que una tecla se ha pulsado, la posición del bit a cero indica la columna a
la que pertenece la tecla pulsada. Pero aún no sabemos exactamente en qué fila está situada.
Para detectar la fila hay que ir enviando un 0 lógico por cada una de las salidas del puerto output
manteniendo el resto a uno y en cada ocasión volver a leer el puerto de entrada. En el momento en que
vuelva a aparecer un cero lógico en alguno de los bits del puerto de entrada, hemos detectado la fila y la
columna de la tecla pulsada.
La combinación de bits enviados al puerto de salida y la recibida por el puerto de entrada nos permite
acceder a una tabla de la que obtenemos el código asignado a la tecla. Este es un código genérico, todavía
no el código del carácter asociado a la tecla pulsada.
Como sabemos existen teclas cuya función es generar un carácter, pero otras teclas tienen funciones de
modo (mayúsculas, control, escape) y otras no tienen una función definida y el usuario puede asociarles
una por software.
Este proceso de detección y transmisión de un código de tecla al computador lo realiza un controlador, el
8042. La actividad del controlador es ligeramente más complicada puesto que ante una pulsación debe
tener en cuenta efectos eléctricos que pueden inducir a falsas pulsaciones. El controlador está
constantemente comprobando el puerto de entrada con el puerto de salida puesto a cero. En cuanto detecta
una pulsación entra en una fase de detección de tecla. Una vez obtenido el código lo almacena en un
buffer y continúa comprobando una nueva pulsación. Desde el buffer son enviados al computador los
código mediante una circuitería que envía estos datos por un canal serie.
1
Buses y Periféricos. 99/00
Control del teclado
Sobrepulsación.
La sobrepulsación ocurre cuando se pulsan más teclas de las que el sistema puede atender. Cuando buffer
de códigos se llena, el controlador interrumpe el ciclo de obtención de nuevas pulsaciones y envía un
carácter especial de buffer lleno (ffh). Si la rutina de atención a teclado recibe uno de estos código genera
un pitido indicando la condición de error.
El teclado en un PC.
Un teclado lleva incorporado su propio controlador 8042 más alguna lógica para hacerle llegar al
procesador por medio de una línea serie el código de la tecla al computador. En el computador recibe este
código un dispositivo conversor serie-paralelo (74LS322) que lo hace llegar al puerto A del 8255 (PPI), al
tiempo que se genera una interrupción hardware que en este caso es la IRQ1 en el controlador de
interrupciones. La IRQ1 está asociada con el vector de interrupciones 9h en el procesador. En este vector
tendrá situada la BIOS una rutina de atención que se encargará de recoger el código de la tecla del puerto
A y traducirlo convenientemente a carácter (ASCII) según el estado de las teclas de modo. Recuerde que
la interrupción 9h es la rutina de atención a la interrupción, pero que la BIOS ofrece un servicio de acceso
al teclado a través de la interrupción 16h y sus diferentes funciones.
Función de la BIOS la obtención de una tecla.
La rutina de atención a la interrupción, después de leer el código, comprueba a qué tipo de tecla
pertenece. Para las teclas de modo (Shift, Alt, Ctrl, etc) mantiene dos bytes en memoria (0040:0017H18H) llamados bytes de estado, que actualiza a la recepción de cualquiera de estas teclas. Si el código no
pertenece a una de estas teclas entonces comprueba si existe un carácter ASCII asociado con el código
obtenido, en cuyo caso lo almacena, junto con le propio código de tecla, en un buffer circular de teclas
pulsadas. Si, por último, comprueba que no existe un carácter ASCII asociado con el código, lo almacena
en el buffer, y le asocia un cero indicando esta condición.
El controlador envía un código de tecla pulsada, pero también envía un código cuando la tecla es liberada.
En este caso el código enviado es el de la tecla pulsada más 80H. La rutina de BIOS utiliza este código
para generar repetición de teclas. Si comprueba que la tecla permanece pulsada durante una determinada
cantidad de tiempo (0.5 sec), comienza a cargar el mismo código en el buffer sin necesidad de esperar a
obtener una nueva pulsación de la tecla.
Buffer de teclas de la BIOS
La BIOS va almacenándolas teclas en un buffer circular 16 posiciones. Cada elemento del buffer consiste
en dos bytes, uno con el código de tecla y el otro con el código ASCII si lo lleva, en caso contrario 0. El
buffer se controla por medio de dos punteros el de cola y el de cabeza. El puntero de cola es la dirección
en donde se puede almacenar el siguiente carácter obtenido, el puntero de cabeza la dirección de donde se
puede obtener el carácter más antiguo de los almacenados. Si ambos punteros señalan la misma posición
es signo de que el buffer está vacío. Cuando el buffer se llena, el puntero de cola está detrás del puntero
de cabeza ( en el sentido del movimiento de la lista circular que es creciente, de manera que si el puntero
de cola señala una dirección inmediatamente más baja que el puntero de cabeza es que el buffer está lleno
- salvo en el caso de que el puntero de cabeza señale la dirección más baja del buffer y el puntero de cola
la más alta, ¿qué ocurre en este caso?)
2
Descargar