/* Ejemplo b sico de E/S digital mediante el puerto paralelo 2002 V¡ctor R. Gonz lez Suponemos puerto bidireccional (comprobar en BIOS) en la direcci¢n 0x378 */ #include #include #define LPT_BASE 0x378 /* Direcci¢n base del puerto paralelo */ #define DATOS LPT_BASE /* Direcci¢n de E/S del reg. de datos */ #define CONTROL LPT_BASE+2 /* Direcci¢n de E/S del reg. de control */ #define C5_ON 0x20 /* Bit 5 de CONTROL a 1 */ main () { unsigned char byte; /* byte para operaciones de E/S */ unsigned char ctrl; /* byte para estado de CONTROL */ ctrl = inportb(CONTROL); /* 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 */ outportb (CONTROL, ctrl & ~C5_ON ); outportb (DATOS, byte); /* env¡a un byte */ printf ("Polariza las l¡neas del puerto y pulsa una tecla\n"); getchar(); /* pone el puerto en modo entrada */ outportb (CONTROL, ctrl | C5_ON ); byte = inportb (DATOS); /* lee un byte */ printf ("El valor le¡do es %i", byte); outportb(CONTROL, ctrl); /* restaura el valor original del reg. de CONTROL */ return 0; }