SALIDA. Contador 1. Contador 2

ARQUITECTURA DE COMPUTADORES (2º ING. INFORMATICA) PRACTICA 5 (CURSO 2004/05) ENTRADA/SALIDA. OBJETIVOS: En esta práctica, se pretenden ilustrar las

17 downloads 233 Views 198KB Size

Recommend Stories

Story Transcript

ARQUITECTURA DE COMPUTADORES (2º ING. INFORMATICA) PRACTICA 5 (CURSO 2004/05)

ENTRADA/SALIDA. OBJETIVOS: En esta práctica, se pretenden ilustrar las diferencias entre las distintas técnicas para las operaciones de entrada/salida, así como programar algunos de los dispositivos E/S básicos. Para simplificar, usaremos como dispositivos algunos de los que se encuentran en cualquier PC convencional, en particular teclado, altavoz, etc. La programación se realizará en lenguaje C. Aunque puede usarse ensamblador, resulta mucho más engorroso y eso dificulta centrarnos en los conceptos básicos. En cuanto al sistema operativo usado, es necesario arrancar la máquina en modo MS-DOS para permitir a los programas de usuario acceder tan a bajo nivel al sistema. Tenga en cuenta que el acceso a entrada/salida en Windows o Unix debe hacerse a base de llamadas al sistema operativo y no directamente, como pretendemos nosotros. DESCRIPCION: Como dispositivo de entrada utilizaremos el teclado del PC, mientras que el dispositivo de salida será el altavoz. En efecto, todos los PCs disponen de un pequeño altavoz muy simple (el que suena al arrancar, o cuando se llena el buffer de teclado) conectado como muestra la figura. El propósito de la práctica es que suene un pitido en el altavoz cada vez que pulsemos una tecla del teclado. PortB (61h)

Amplificador + filtro de paso baja. 8254 Contador 0 Contador 1

Bit 1

clk

Contador 2

Bit 0 Se utilizan para controlar el altavoz los dos bits menos significativos del puerto 97 (61h) de E/S (en los PC/XT se trataba del puerto B de un PPI 8255). El bit 0 va a la entrada Gate que activa el contador 2 de un 8253/4, un temporizador que genera una señal periódica de una frecuencia concreta, programable (ver apéndice al final de este boletín). El bit 1 simplemente conecta la señal periódica de salida del temporizador (Out) al altavoz, permitiendo que suene. En las dos primeras partes de la práctica, no alteraremos el estado del temporizador, es decir, mantendremos siempre una frecuencia constante. Por tanto, cuando queramos que suene un pitido en el altavoz, simplemente activaremos durante un tiempo los bits 1 y 0 del puerto 61h. PREPARACIÓN. Lea atentamente el resto de la práctica y traiga preparadas las siguientes tareas, antes de venir a la sesión de prácticas: •



Repase en sus apuntes de teoría los siguientes conceptos: o E/S programada. o E/S por interrupciones. o Vector de interrupciones. o PPI 8255 o Timer 8254 (mire en el apéndice de este boletín). Complete el código de la parte 2, para que incluya el código necesario para producir un sonido por el altavoz, mediante el manejador de interrupciones.

• •

Calcule el valor de inicialización del contador 2 en la parte 3, para cada una de las frecuencias que se enumera en la tabla. Convierta a hexadecimal dichos valores. Responda a las siguientes cuestiones: o ¿Porqué se guardan el registro de estado y el contador de programa cuando se entra en una rutina de servicio de una interrupción? o ¿Porqué no se puede llamar a funciones del MS-DOS cuando se está dentro de una rutina de interrupción? o ¿Qué logramos al escribir un dato en la dirección 61h de E/S? ¿En qué dispositivo estamos escribiendo? o ¿Para qué sirve el modo 3 del 8254? Explique brevemente.

PARTE 1. En esta primera parte, se utilizará para las operaciones de E/S el método de E/S programada o de encuesta (polling). Se trata del método más simple, que consiste en que la CPU controla en todo momento la operación E/S: testeo de bits de status, activación de los bits de control, transferencia de datos, etc. Así, nuestro programa testeará continuamente el teclado, y en cuanto se pulse cualquier tecla sonará el pitido. En principio, la forma de leer caracteres de teclado en C bajo DOS es a través de funciones como kbhit() –que detecta si alguna tecla ha sido pulsada- o getch() –que devuelve un char con el código ASCII de la tecla pulsada. Así, un posible código sería: #include #include int main(int argc, char* argv[]){ long int i; char caracter='x'; char a; while(caracter!=' '){ while (!kbhit()); // espera típica de E/S programada. CPU ociosa caracter=getch(); // permite abortar con ctrl-c a=inportb(97); // lee la direccion e/s 97 (61h) a=a|0x03; // activa los bits 0 y 1 outportb(97,a); for (i=0;i

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.