Buenas noches amigo Torres Electronico,gracias por el interes, ando bastante oxidado como comentaba tuve que lastimosamente dejar las practicas y el estudio y tratando de retomar los temas despues de años, efectivamente el programa compila y simula, la cuestion es que enclava pero un solo led y la idea es que enclave el efecto osea si esta corriendo de izquierda a derecha, efecto 1 sea el que se quede enclavado haciendo el desplazamiento indefinidamente y no pase al efecto 2 de derecha a izquierda automaticamente, o si esta corriendo el desplazamiento efecto 2 al presionar buton pues sea este el efecto que se mantenga desplazandose indefinidamente, hasta que reinicie el reset, no se como crear un bucle infinito en la misma línea de código, impidiendo que el programa continúe con el efecto siguiente automaticamente. gracias mil por la atencion prestada.
Hola , si veo algunos problemas lógicos.
A mi me gusta mas el Assembler , pero para muchos, es mas duro, asi que.....
Tratando de acercarme a lo tuyo , hice un arreglo de tu problema.
Tratá de aprender a manejear interrupciones , así vas a dar un salto de "calidad" en la resolusión de tus programas.
Despues pasalo a tu sintáxis. Saludos

----------------------------------------------------------------------
Código:
@ DEVICE INTRC_OSC, MCLR_OFF, LVP_OFF, WDT_OFF
DEFINE OSC 4
CMCON = 7 ' Deshabilitar comparadores (puerto A digital)
TRISB = %00000000 ' PORTB como salida
TRISA = %00000001 ' RA0 como entrada (Pulsador de enclavamiento)
PORTB = 0
' Variables
i var byte
boton var PORTA.0
----------------------------------Programa
Main:
set botonOK = 0
set efecto = 0
Efecto1: .................rem Izquierda
efecto =1
For i = 0 to 7
PORTB = 1 << i
PAUSE 100
if botonOK = 0 then Gosub Verificar
Next i
if botonOK =1 and efecto = 1 then goto Efecto1
Efecto2: ................ rem Derecha
efecto = 2
For i = 7 to 0 step -1
PORTB = 1 << i
PAUSE 100
if botonOK =0 then Gosub Verificar
Next i
if botonOK =1 and efecto =2 then goto efecto 2
Goto Main
---------------------------------------------
Subrutinas :
(esta parte no me gusta mucho como la trataste pero te la dejé, fijate si la podes mejorar )
Verificar:
if boton = 0 then Pause 50
if boton = 0 then botonOK=1
endif
endif
Return
------------------------------------------------