' CTRL_3.BAS ' Ejemplo b sico de E/S digital mediante el puerto paralelo ' ' 2002 V¡ctor R. Gonz lez ' CONST C5ON = &H20 ' bit 5 de control a 1 ' determina los puertos instalados y sus direcciones DEF SEG = 0 ' selecciona el segmento de memoria 0 FOR puerto% = 2 TO 0 STEP -1 ' n£mero de puerto paralelo ' 0 (LPT1), 1 (LPT2), 2 (LPT3) ' direcci¢n del puerto LPTBASE% = PEEK(&H408 + puerto% * 2) + 256 * PEEK(&H408 + puerto% * 2 + 1) IF LPTBASE% = 0 THEN PRINT "No hay puerto asignado a LPT"; puerto% + 1 ELSE PRINT "La direcci¢n de LPT"; puerto% + 1; " es "; LPTBASE% END IF NEXT puerto% DATOS% = LPTBASE% ' direcci¢n de E/S del reg. de datos CONTROL% = LPTBASE% + 2 ' direcci¢n de E/S del reg. de control IF LPTBASE% > 0 THEN ' suponemos puerto bidireccional (comprobar en BIOS) ctrl% = INP(CONTROL%) ' guarda el valor actual del reg. de control ' byte para operaciones de E/S INPUT "Introduce el byte que se enviar  al puerto: ", byte% OUT CONTROL%, ctrl% AND NOT (C5ON) ' pone el puerto en modo salida OUT DATOS%, byte% ' env¡a un byte INPUT "Polariza las l¡neas del puerto y pulsa ", tecla OUT CONTROL%, ctrl% OR C5ON ' pone el puerto en modo entrada byte% = INP(DATOS%) ' lee un byte PRINT "El valor le¡do es "; byte% OUT CONTROL%, ctrl% ' restaura el valor original del reg. de control END IF END