' ' CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO ' ' Programaci¢n de la interface b sica de 8 LED y 8 microinterruptores ' Actuadores - LED en las 8 l¡neas de DATOS: ' 7 6 5 4 3 2 1 0 ' D7 D6 D5 D4 D3 D2 D1 D0 ' ' Sensores - DIP switch de 8 pos. en 4 l¡neas de CONTROL y 4 de ESTADO: ' 7 6 5 4 3 2 1 0 ' S7# S6 S5 S4 C3# C2 C1# C0# ' ' 2002 V¡ctor R. Gonz lez DECLARE SUB Espera (segundos AS SINGLE) ' Direcciones del puerto paralelo CONST LPTBASE = &H378 CONST DATOS = LPTBASE CONST ESTADO = LPTBASE + 1 CONST CONTROL = LPTBASE + 2 DIM byte AS INTEGER DIM i AS INTEGER, j AS INTEGER ' Control de actuadores digitales (8 diodos LED en el puerto de DATOS) PRINT "Control de salidas digitales (valor > 255 para fin):" byte = 0 ' La primera vez apaga los diodos (env¡a 0) DO WHILE byte < 256 OUT DATOS, byte INPUT " Introduce el byte que se enviar  al puerto: ", byte LOOP ' Control de sensores digitales (8 microinterruptores -DIP switch- ' 4 en l¡neas de CONTROL y 4 en l¡neas de ESTADO) PRINT "Control de entradas digitales (f para fin):" OUT CONTROL, &H4 ' Pone CONTROL en modo entrada (si posible) DO byte = ((INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0)) XOR &H8B PRINT " Byte le¡do del puerto: "; byte LOOP UNTIL INKEY$ = "f" ' Interacci¢n de actuadores y sensores PRINT "Realimentaci¢n de las salidas con las entradas digitales (f para fin):" PRINT " entrada < 16 = dirige la entrada a la salida" PRINT " entrada < 32 = destello impares" PRINT " entrada < 64 = destello pares" PRINT " entrada < 128 = intermitencia 5 s" PRINT " entrada < 256 = destello progresivo" DO ' Toma nibble bajo de CONTROl y alto de ESTADO ' e invierte bits 0, 1, 3 y 7 byte = ((INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0)) XOR &H8B PRINT " Byte le¡do: "; byte SELECT CASE byte CASE IS < 16 ' Env¡a el valor de la entrada a la salida OUT DATOS, byte CASE IS < 32 ' Realiza un destello en las salidas impares OUT DATOS, 85 ' Enciende Espera .5 OUT DATOS, 0 ' Apaga CASE IS < 64 ' Realiza un destello en las salidas pares OUT DATOS, 170 ' Enciende Espera .5 OUT DATOS, 0 ' Apaga CASE IS < 128 ' Intermitencia durante 5 segundos FOR i = 1 TO 10 OUT DATOS, 0: Espera .25 ' Apaga OUT DATOS, 255: Espera .25 ' Enciende todos NEXT i CASE ELSE ' Destello progresivo FOR i = 1 TO 10 j = 7 DO OUT DATOS, j Espera .05 j = j * 2 LOOP WHILE j <= 224 j = 224 DO OUT DATOS, j Espera .05 j = j / 2 LOOP WHILE j >= 7 NEXT i END SELECT LOOP UNTIL INKEY$ = "f" END ' Rutina de espera SUB Espera (segundos AS SINGLE) tIni! = TIMER DO WHILE TIMER - tIni! < segundos: LOOP END SUB