Tienda | Foros | Blogs | EN |
 

ayuda con este programita pliss Basic

Seguir
holas a todos!!! he estado lleyen una revista Saber electronica, y he visto un secuensiador programable por computadora, en el cual el programa lo hacen en basic y manda señales al puerto de la impresora(lpt1), el PROBLEMA es que lo trate de hacer al programa en basiq y me da muchos errores, y como para mi es chino basico, esto de programar, aki les pongo el programa, aver que ayudin me pueden dar!!! plis porfavor!!! una ayudita!!! desde aya muchisimas!! gracias!!! Feliz Feliz
4 SCREEN 3
5 TIEMPO = 120
10 CLS
15 OUT &H3BC, NOT (0)
20 LET$="PROGRAMA DE MANEJO DE LUCES"
30 LOCATE 1, 40 - LEN(LET$) / 2
40 PRINT LET$
50 LOCATE 8, 30
60 PRINT "1.EFECTO # 1"
70 LOCATE 9, 30
80 PRINT "2.EFECTO # 2"
90 LOCATE 10, 30
100 PRINT "3.EFECTO # 3"
110 LOCATE 11, 30
120 PRINT "4.EFECTO # 4"
130 LOCATE 12, 30
140 PRINT "5.EFECTO # 5"
142 LOCATE 13, 30
143 PRINT "6.TODOS"
144 LOCATE 14, 30
145 PRINT "7.FINALIZAR"
150 LOCATE 16, 30
160 INPUT "CUAL EFECTO: ";A$
170 IF VAL (A$) > 7 THEN GOTO 150
175 TEMP = VAL (A$): CUENTA=TEMP
180 ON VAL (A$) GOSUB 1000, 2000, 3000, 4000, 5000, 1000, 200
190 GOTO 10:CLS
210 END

1000 REM SUBRUTINA PARA EL EFECTO #1
1010 REM CONSISTE EN HACER EL DESPLAZAMIENTO
1020 REM BOMBILLO POR BOMBILLO HACIA ADELANTE
1030 PARA ESTO SE DEBE GENERAR LA SIGUIENTE
1040 REM SECUENCIA DE NUMEROS: 1,2,4,8,16,32,64,128
1055 GOSUB 7000
1060 FOR X = 0 TO 7
1065 LOCATE 10, 21
1066 PRINT TIEMPO; USING "#####";
1067 ACTUAL =2 ^ X
1068 GOSUB 8000
1070 OUT &H3BC, NOT (2 ^ X)
1071 A$=INKEY$
1074 IF A$="+" THEN TIEMPO = TIEMPO -40
1075 IF A$="-" THEN TIEMPO = TIEMPO +40
1076 IF TIEMPO < 0 THEN TIEMPO = 0
1077 GOSUB 6000
1078 IF A$ = "S" THEN RETURN
1080 NEXT X
1081 IF TEMP = 6 THEN CUENTA = CUENTA - 1
1082 IF CUENTA = 0 THEN CUENTA = TEMP: GOTO 2000
1090 GOTO 1060

2000 REM SUBRUTINA PARA EL EFECTO #2
2010 REM CONSISTE EN ENSENDER LOS BONBILLOS DE UNO EN UNO
2020 REM SIN APAGAR LOS ANTERIORES
2025 GOSUB 7000
2028 AB = 0
2030 FOR X = 0 TO 8
2032 LOCATE 10 ,21
2033 PRINT TIEMPO; USING "#####";
2034 ACTUAL = AB
2035 GOSUB 8000
2050 OUT $H3BC, NOT (AB)
2055 AB = AB + (2 ^ X)
2060 A$ = INKEY$
2070 IF A$ = "+" THEN TIEMPO = TIEMPO - 40
2080 IF A$ = "-" THEN TIEMPO = TIEMPO + 40
2090 IF TIEMPO < 0 THEN TIEMPO = 0
2100 GOSUB 6000
2110 IF A$ = "S" THEN AB = 0: RETURN
2120 NEXT X
2121 IF TEMP = 6 THEN CUENTA = CUENTA - 1
2122 IF CUENTA = 0 THEN CUENTA = TEMP: GOTO 3000
2130 GOTO 2028

3000 REM SUBRUTINA PARA EL EFECTO #3
3010 REM CONSISTE EN ENCENDER LOS BOMBILLOS
3020 REM DE IZQUIERDA A DERECHA Y DE DERECHA A IZQUIERDA
3030 REM SIMULTANEAMENTE
3040 GOSUB 7000
3050 FOR X = 0 TO 7
3052 LOCATE 10, 21
3053 PRINT TIEMPO; USING "#####";
3055 REM LA SIGUIENTE FORMULA PRODUCE LOS SIGUIENTES
3056 REM RESULTADOS: 129, 66, 36, 24, 24, 36, 66, 129
3057 ACTUAL = ( (2 ^ X) + (2 ^ (7 - X) ) )
3058 GOSUB 8000
3070 OUT &H3BC, NOT ( (2^X) + (2 ^ (7 - X) ) )
3080 A$ = INKEY$
3090 IF A$ = "+" THEN TIEMPO = TIEMPO - 40
3100 IF A$ = "-" THEN TIEMPO = TIEMPO + 40
3110 IF TIEMPO < 0 THEN TIEMPO = 0
3115 GOSUB 6000
3120 IF A$ = "S" THEN RETURN
3130 NEXT X
3135 IF TEMP = 6 THEN CUENTA = CUENTA - 1
3136 IF CUENTA = 0 THEN CUENTA = TEMP; GOTO 4000
3140 GOTO 3050

4000 REM SUBRUTINA PARA EL EFECTO #4
4010 REM GENERA NUMEROS AL AZAR ENTRE 0 Y 255
4012 GOSUB 7000
4013 LOCATE 10, 21
4014 PRINT TIEMPO; USING "#####";
4020 NRO = INT (RND * 255) + 1
4030 ACTUAL = NRO
4035 GOSUB 8000
4040 OUT &H3BC, NOT (NRO)
4042 A$ = INKEY$
4043 IF A$ = "+" THEN TIEMPO = TIEMPO - 40
4044 IF A$ = "-" THEN TIEMPO = TIEMPO + 40
4045 IF TIEMPO < 0 THEN TIEMPO = 0
4046 GOSUB 6000
4047 IF A$ = "S" THEN RETURN
4048 IF TEMP = 6 THEN CUENTA = CUENTA - 1
4049 IF CUENTA = 0 THEN CUENTA = TEMP; GOTO 5000
4060 GOTO 4013

5000 REM SUBRUTINA PARA EL EFECTO #5
2010 REM ESTA GENERA NUMEROS DE FORMA TAL QUE
2020 REM DA EL EFECTO DE UN RESORTE
5025 GOSUB 7000
5030 HASTA = 7
5040 FOR X = 0 TO HASTA
5045 LOCATE 10, 21
5046 PRINT TIEMPO; USING "#####";
5050 AC = AC + (2 ^ X)
5051 ACTUAL AC
5052 GOSUB 8000
5060 OUT &H3BC, NOT (AC)
5061 A$ = INKEY$
5062 IF A$ = "+" THEN TIEMPO = TIEMPO - 40
5063 IF A$ = "-" THEN TIEMPO = TIEMPO + 40
5064 IF TIEMPO < 0 THEN TIEMPO = 0
5065 IF A$ = "S" THEN AC = 0: RETURN
5070 GOSUB 6000
5080 NEXT X
5090 FOR X = HASTA TO 0 SEP - 1
5100 AC = AC - (2 ^ X)
5105 ACTUAL = AC
5106 GOSUB 8000
5110 OUT &H3BC, NOT (AC)
5120 GOSUB 6000
5130 NEXT X
5140 HASTA = HASTA - 1
5145 IF HASTA = 0 THEN HASTA = 7
5146 IF TEMP = 6 THEN CUENTA = CUENTA - 1
5147 IF CUENTA = 0 THEN CUENTA = TEMP: GOTO 1000
5150 GOTO 5040

6000 REM SUBRUTINA DE RETARDO
6010 REM ESTA FUNCIONA DE ACUERDO AL VALOR ALMACENADO
6020 REM EN LA VARIABLE TIEMPO
6030 REM
6040 FOR Y = 1 TO TIEMPO
6050 NEXT Y
6060 RETURN

7000 REM SUBRUTINA PARA ENCABEZADO DE PANTALLA
7005 CLS
7010 LET$ = "EFECTO #" + A$
7020 LOCATE 1, 40 - LEN(LET$) / 2
7030 PRINT LET$
7031 LOCATE 10, 10
7032 PRINT "VELOCIDAD="
3033 LOCATE 15, 35
7034 PRINT "0 1 2 3 4 5 6 7"
7035 LOCATE 23, 1
7036 PRINT " SALIR [+] AUMENTA [-] DISMINUYE"
7040 RETURN

8000 REM SUBRUTINA PARA MOSTRAR EN PANTALLA EL EFECTO ACTUAL
8005 LOCATE 12, 40: PRINT" ";
8006 LOCATE 12, 40: PRINT ACTUAL;
8010 FOR ZZ = 7 TO 0 STEP - 1
8020 IF (2 ^ ZZ) <= ACTUAL THEN A$ (ZZ) = "*":ACTUAL = ACTUAL - (2 ^ ZZ): GOTO 8030
8025 A$ (ZZ) = "-"
8030 NEXT ZZ
8040 LOCATE 14, 35
8050 FOR ZZ = 0 TO 7
8060 PRINT A$ (ZZ); " ";
8070 NEXT ZZ
8080 RETURN

bueno este es el programa!! desde ya gracias a cualquier respuesta!!!


3 Soluciones propuestas

EN 1º ojeada creo q tnes un probl con la var LET$, la instruc LET$ asigna datos ALFANUMERICOS (Nºs o txt o boolenaos.)y se asegura de q sea asi
Otra * la GOSUB, aqui no veo problemas, pero no deben cruzarse los datos de varble de entorno, esto en PCS viejas (como las xt o 286), cauzan error de stack en pilas de datos. Mas bien todas las vars. deben ser distintas. Y por ser un comando para proceso con varbls globls medio automaticas, consume clocks de la pc (sin importancia en PC rapidas).Mis alumnos no son muy buenos, pero... hacen andar algo. Shock
No seas melodramatico en el codigo,PE : prueba:
declare function ret(X) '(retardo)
local x: FOR t = 1 to X: next '(si no toma tu basic "local" no lo pongas
end function()
y pon ret(TIEMPO) en vez del fatidico GOsub, donde se te canten...ganas.
[email protected] ,tengo Audiritmico en basic para port LPT1, y efectos como el tuyo.(q lo he usado y bastante).
Ok.

No no no.Este es un programa que venia en un curso llamado "Luces y Sonido" de cekit. Bastante viejito.

EN 1º ojeada creo q tnes un probl con la var LET$, la instruc LET$ asigna datos ALFANUMERICOS (Nºs o txt o boolenaos.)y se asegura de q sea asi...


No hay problemas con el Let$, los problemas estan en otro lado subo las correciones hechas y ademas el programa compilado y funcionando como asi tambien unas pequeñas capturas del mismo.-

Te recomiendo que uses Qbasic 7.1 <-- Para los amantes del qb el mejor!!!!! (me hace acordar a mis epocas con este programa)

Suerte y espero que te sirva.-
SOLUCIÓN ACEPTADA
Ok.

No no no.Este es un programa que venia en un curso llamado "Luces y Sonido" de cekit. Bastante viejito.

EN 1º ojeada creo q tnes un probl con la var LET$, la instruc LET$ asigna datos ALFANUMERICOS (Nºs o txt o boolenaos.)y se asegura de q sea asi...


No hay problemas con el Let$, los problemas estan en otro lado subo las correciones hechas y ademas el programa compilado y funcionando como asi tambien unas pequeñas capturas del mismo.-

Te recomiendo que uses Qbasic 7.1 <-- Para los amantes del qb el mejor!!!!! (me hace acordar a mis epocas con este programa)

Suerte y espero que te sirva.-