/* Ejemplo b sico de E/S digital mediante el puerto paralelo 2002 V¡ctor R. Gonz lez */ #include #include #include "ctrl.h" unsigned int PuertoDir(void); /* Determina la direcci¢n del puerto */ main () { unsigned char byte; /* byte para operaciones de E/S */ unsigned char ctrl; /* byte para estado de CONTROL */ if ( PuertoDir() ) { /* Suponemos puerto bidireccional (comprobar en BIOS) */ lee_control (ctrl); /* guarda el valor actual del reg. de CONTROL */ printf ("Introduce el byte que se enviar  al puerto: "); scanf("%u", &byte); getchar(); /* pone el puerto en modo salida */ control ( ctrl & ~C5_ON ); escribe (byte); /* env¡a un byte */ printf ("Polariza las l¡neas del puerto y pulsa una tecla\n"); getchar(); /* pone el puerto en modo entrada */ control ( ctrl | C5_ON ); lee (byte); /* lee un byte */ printf ("El valor le¡do es %i", byte); control (ctrl); /* restaura el valor original del reg. de CONTROL */ } return 0; } unsigned int PuertoDir() { int puerto; /* n£mero de puerto paralelo: 0 (LPT1), 1 (LPT2), 2 (LPT3) */ /* Determina los puertos instalados y sus direcciones */ for (puerto=2; puerto>=0; puerto--) { LPT_BASE = peek(0x0040,0x0008 + puerto*2); if (LPT_BASE == 0) printf("No hay puerto asignado a LPT%d \n", puerto+1); else printf("La direcci¢n de LPT%d es 0x%X\n", puerto+1, puerto_dir); } return LPT_BASE; }