Actualizado el 6 de Enero del 2019 (Publicado el 1 de Enero del 2019)
1.217 visualizaciones desde el 1 de Enero del 2019
1,2 MB
109 paginas
Creado hace 11a (29/11/2013)
(6)
Unidad 6
Programación de los recursos
hardware básicos del PC
SISTEMAS BASADOS EN MICROPROCESADORES
Grado en Ingeniería Informática
EPS - UAM
(6)
Índice
6. Programación de recursos hardware básicos del PC.
Teclado.
Timer.
6.1.
6.2.
6.3. Reloj de Tiempo Real (RTC).
6.4. Controladora de Vídeo y Pantalla.
6.5. Puerto Paralelo. Impresora.
6.6. Puerto Serie Asíncrono (UART 8250).
(6)
6.1. Teclado (I)
Basado en un integrado de Intel (8042)
El controlador de teclado 8042 tiene 2 puertos paralelos E/S
(8 bits) programables y 2 entradas serie programables (TEST0,
TEST1).
Los pines P26 y P27 son para enviar CLK y DATOS al teclado.
Las entradas serie TEST0 yTEST1 son para recibir el CLK y los
DATOS enviados por el teclado.
8042
P20
P26
IRQ9
(IR1 PIC-0)
P27
TEST0
TEST1
CLK
DATOS
+Vcc
Conector del
teclado
GND
(6)
6.1. Teclado (II)
El 8042 es un microcontrolador
compatible con las familias MCS-48
(8048) y MCS-51 (8051) de Intel.
Se comporta como un PPI (Interfaz de
Periférico Programable) que permite
implementar interfaces a medida para
distintos periféricos.
Dispone de 2 KB de memoria ROM
(8042) o EPROM (8742), 128 KB de
memoria RAM, 2 puertos prog. de E/S
de 8 bits, 2 entradas serie prog.,
contador interno de 8 bits, reloj de 12
MHz, y otras señales de control y
especiales
Direcciones: 60h (REG. ENTRADA y
SALIDA), 64h (REG. CONTROL y
ESTADO)
8042
REG.
ENTRADA
REG.
SALIDA
REG.
ESTADO
REG.
CONTROL
ROM
(2 KB)
RAM
(128 KB)
(6)
6.1. Teclado (III)
Al transmitir señal de reloj (CLK) aparte de los datos, no es
necesario un controlador de línea serie (UART).
No hay problemas de transmisión del reloj por ser línea muy
corta.
+Vcc
CLK
P26
P27
DATOS
CLK
DATOS
TEST0
TEST1
Conector del
teclado
GND
CLK
DATOS
A
0
1
2
3
4
5
6
7
P S
(6)
6.1. Teclado (IV)
Teclado del PC tiene 83 teclas divididas en 3 grupos:
Teclas de funciones.
Teclado alfanumérico.
Teclado numérico.
Teclado se comunica con BIOS mediante INT 09h
(PIC-0, IR1).
Cada vez que se pulsa/suelta tecla se genera INT 09h.
Rutina de servicio otbiene código de tecla (SCAN
CODE) leyendo el puerto 60h del controlador de teclado.
Código de tecla al soltar es el mismo que al pulsar pero
con bit de mayor peso a 1.
Cada vez que se pulsa tecla, la rutina de servicio
almacena dos bytes en un buffer en memoria del BIOS:
Código ASCII correspondiente o 00h en caso de tecla
especial (F1,…,F12, shift, flechas, etc.).
Identificador de tecla pulsada (SCAN CODE).
(6)
6.1. Teclado (V)
Se pueden pulsar combinaciones de teclas.
Normalmente teclas de tipo modificador (ALT,
MAYÚSCULAS, CONTROL) acompañadas de otras
teclas.
Algunas combinaciones no son reconocidas por las
rutinas BIOS y no generan ningún tipo de código.
Teclas con significado especial:
Alt-Ctrl-Del (carga del sistema).
Ctrl-Pausa (llama a INT 1Bh del BIOS).
Pausa (detención de un programa hasta pulsar tecla).
Impr Pant (llama a INT 5h para imrpimir pantalla por
impresora)
(6)
6.1. Teclado (VI)
Teclado
Al pulsar o soltar tecla se
envía código KSCAN
(KEYBOARD SCAN CODE)
que codifica posición física de
la tecla en el teclado.
Controlador teclado (8042)
Programa de la ROM traduce KSCAN
a SCAN CODE.
Teclas F1 a F12, flechas, shift, etc. no
generan codígo ASCII.
83 teclas
µC (8048, 8051)
Explora
matricialmente el
teclado y envía el
KSCAN al PC
TEST0,1
µC (8042)
SCAN CODE
Buffer del teclado (DOS)
BIOS (Int 09h)
PIC-0
(INT 09h)
Formato de palabra
ASCII-PAÍS SCAN CODE
BIOS
(INT 09h)
ASCII USA
SCAN CODE
Buffer de 16 palabras
KEYB.COM
(6)
6.1. Teclado (VII)
Buffer cíclico
0040:001E ... 0040:003D EN ZONA DE VARIABLES DE LA BIOS
ZONA LLENA
0040:001E
0040:003C
Los punteros son offsets
del segmento 40h entre
1E y 3C
Al leer se incrementa
el puntero en 2
PUNTERO
LECTURA
PUNTERO
ESCRITURA
(Posición del siguiente
(Posición del siguiente
carácter a leer)
carácter a escribir)
Se deja libre una posición (word). Se
pueden guardar hasta 15 caracteres
(words) en el buffer de 16 words
ASCII PAÍS
(1er byte)
SCAN CODE
(2º byte)
(6)
6.1. Teclado (VIII)
INT 16h (BIOS)
Función
Lee del buffer de teclado los códigos asociados a la tecla o
combinación de teclas y avanza el puntero del buffer al carácter
siguiente. Si el buffer está vacío espera a que se pulse una tecla.
Salidas:
AH = Identificador de la tecla (SCAN CODE)
AL = código ASCII del carácter
Devuelve el estado del buffer del teclado
Salidas:
ZF = 1 si buffer vacío
ZF = 0 si buffer no vacío
AH = Identificador de la tecla
AL = código ASCII del carácter
Estado de pulsación de distintas teclas
Salidas:
Devuelve en AL el byte de estado de pulsación de distintas teclas:
7: Ins, 6: Bloq. Mayúsculas, 5: Bloq. Numérico, 4: Bloq. Desplazamiento,
3: Alt, 2: Ctrl, 1: Mayúscula Izqda., 0: Mayúscula Dcha.
AH
00h
y
10h
01h
y
11h
02h
y
12h
(6)
6.1. Teclado (IX)
INT 16h (BIOS)
AH
12h
05h
Función
Estado de pulsación de distintas teclas.
Salidas:
Devuelve en AH el byte de estado de pulsación de distintas teclas:
7: Impresión Pantalla, 6: Bloq. Mayúsculas, 5: Bloq. Numérico,
4: Bloq. Desplazamiento, 3: Alt Dcho., 2: Ctrl Dcho., 1: Alt Izqdo.,
0: Ctrl Izqdo.
Escribe el carácter indicado en el buffer del teclado.
Entradas:
CH = Identificador de la tecla (SCAN CODE)
CL = Código ASCII del carácter.
Salidas:
AL = 1 si buffer lleno.
(6)
AH
01h
06h
07h
0Ah
0Bh
6.1. Teclado (X)
INT 21h (DOS)
Función
Espera para leer un carácter del teclado y lo escribe por pantalla
Salidas: AL = carácter tecleado
Lee un carácter del teclado sin salida por pantalla (DL = FFh)
Salidas: AL = carácter tecleado si hay disponible, AL = 0 si no disponible
Espera para leer un carácter del teclado sin escribirlo por
pantalla
Salidas: AL = carácter tecleado si hay disponible
Lee caracteres del teclado sin escribirlos por pantalla
Entrada: DS:DX = dirección del buffer de memoria
El primer byte del buffer debe indicar el número máximo de caracteres
a leer (incluido el retorno de carro)
Salidas: El segundo byte del buffer indica el número de caracteres
leídos sin incluir el retorno de carro. Los códigos ASCII de los
caracteres tecleados se guardan a partir del tercer byte.
Lee el estado del teclado
Salidas: AL = FFh si carácter disponible, AL = 0 si no disponible.
(6)
6.2. Timer (I)
Temporizador de intervalo programable de Intel (8254).
Contiene 3 contadores independientes de 16 bits.
Cada contador se decrementa en una unidad en cada
flanco de bajada del reloj (entrada CLK) si está
activada su señal de habilitación (entrada GATE).
La salida de cada contador
(señal OUT) se activa
en función del modo
en que el contador
se haya programado
previamente.
6 modos de
funcionamiento.
CLK 1
GATE 1
CLK 0
GATE 0
8254
CONT 0
OUT 0
CONT 1
OUT 1
CLK 2
GATE 2
CONT 2
OUT 2
(6)
6.2. Timer (II)
El timer tiene 4 puertos de E/S.
Puerto 43h (sólo de escritura)
Registro de control del timer.
Permite definir la configuración inicial de un contador y
enviar un comando de memorización del valor de conteo
actual.
Puerto 40h (CONT 0)
En escritura modifica valor de conteo inicial de CONT 0.
El contador decrementa a partir de ese valor inicial.
Al llegar a cero, el contador puede volverse a cargar con el
mismo valor inicial según el modo de funcionamiento.
En lectura retorna el valor memorizado de CONT 0.
Puertos 41h (CONT 1) y 42h (CONT 2)
Igual comportamiento que 40h para los otros contadores.
(6)
6.2. Timer (III)
Palabra de control
Se escribe en el puerto 43h el siguiente valor:
SC1 SC0 RW1 RW0 M2
M1
M0
BCD
(6)
6.2. Timer (IV)
Palabra de control
Se escribe en el puerto 43h el siguiente valor:
SC1 SC0 RW1 RW0 M2
M1
M0
BCD
Selección del contador
SC1
SC0
Acción
0
0
1
0
1
0
Selecciona CONT 0
Selecciona CONT 1
Selecciona CONT 2
Configuraciones del resto de la palabra de control
aplicadas sólo al contador seleccionado.
(6)
6.2. Timer (V)
Palabra de control
Se escribe en el puerto 43h el siguiente valor:
SC1 SC0 RW1 RW0 M2
M1
M0
BCD
Comando de memorización del valor actual del contador
+ Configuración de Lectura/Escritura en contador
RW1
RW0
Acción
0
0
1
1
0
1
0
1
Comando de memorización del valor
actual (campos M y BCD sin efecto).
Lectura/Escritura en puerto del contador
sólo afecta al byte bajo.
Lectura/Escritura en puerto del contador
sólo afecta al byte alto.
Primera Lectura/Escritura en puerto del
contador afecta a byte bajo y segunda al
byte alto.
(6)
6.2. Timer (VI)
Palabra de control
Se escribe en el puerto 43h el siguiente valor:
SC1 SC0 RW1 RW0 M2
M1
M0
BCD
Configuración de modo de funcionamiento
M2 M1 M0
0
0
X
X
1
1
0
0
1
1
0
0
Acción
0 Modo 0: Interrupción al final del conteo.
1 Modo 1: Monoestable programable.
0 Modo 2: Generador de frecuencia.
1 Modo 3: Generador de onda cuadrada.
0 Modo 4: Pulso Strobe iniciado por software.
1 Modo 5: Pulso Strobe iniciado por hardware.
(6)
6.2. Timer (VII)
Palabra de control
Se escribe en el puerto 43h el siguiente valor:
SC1 SC0 RW1 RW0 M2
M1
M0
BCD
Configuración de codificación del contador
BCD
0
1
Acción
Contador binario de 16 bits.
Contador BCD de cuatro dígitos.
Binary-Coded Decimal (BCD): Cada cuatro bits codifican
un dígito entre 0 (0000b) y 9 (1001b).
(6)
6.2. Timer (VIII)
Configuración inicial: Se envía palabra de control al
puerto 43h indicando contador y su configuración inicial
(RW ≠ 00b).
Valor de conteo inicial de un contador:
Se envía al puerto del contador (40h, 41h o 42h).
Se envía byte bajo, byte alto o byte bajo seguido de
byte alto según campo RW de la palabra de control.
Ejemplo: Configurar contador 2 (SC = 10b) en modo 3
(M = 011b), con codificación binaria (BCD = 0), e
inicializarlo a 1234h (RW = 11b).
; Palabra de control: SC | RW | M | BCD
; Envía palabra de control
mov al, 10110110b
out 43h, al
mov al, 34h
out 42h, al
mov al, 12h
out 42h, al
; Envía byte bajo
Comentarios de: Unidad 6 Programación de los recursos hardware básicos del PC (0)
No hay comentarios