hola , de monstruo nada ya quisiera yo, aun estoy aprendiendo en esto de los pics.
Bueno prueba esto y ya me cuentas , una cosa he puesto la entrada PA1 que si no esta a nivel 0 no funciona , no se exactamente para que lo quieres asi que si hay que cambiar algo lo comentas.
[CODE];Secuenciador de ocho LEDS conectados al puerto B
;Velocidad de desplazamiento Ra0 (pin 17)
;Direccion de desplazamiento Ra1 (pin 18)
EST equ 0x03 ;Registro de estado
PA equ 0x05 ;Puerto A
PB equ 0x06 ;Puerto B
AUXA equ 0x0c ;Variable de temporizacion
AUXB equ 0x0d ;Variable de temporizacion
org 0 ;Vector de reset
goto INICIO
org 5
INICIO bsf EST,5 ;Selecciona el banco 1
clrf PB ;Configura el puerto B como salida
movlw 0x1f
movwf PA ;Configura el puerto A como entrada
bcf EST,5 ;Selecciona el banco 0
BUCLE btfsc PA,1 ;Verifica el interruptor de direccion
goto BUCLE ;Si esta suelto salta a giro a la izquierda
bcf EST,0 ;BORRO EL BIT DE ACARREO
movlw 1 ;ENCIENDO EL PRIMER LED
movwf PB
call DELAY ;Rutina de retardo para visualizacion
LOOP rlf PB ;Desplaza el bit hacia la izquierda
call DELAY ;Otra espera
btfsc PB,7 ;Verifica el estado del ultimo LED
goto APAGA ;LO ENVIO A LA SECUENCIA DE APAGADO
goto LOOP ;Rota nuevamente si esta apagado
APAGA clrf PB ;BORRO LA PUERTA B
goto APAGA ;LO DEJO EN UN BUCLE INFINITO
DELAY movlw 2000 ;Carga el temporiz. 1 con 255 (lento)
btfss PA,0 ;Verifica el interruptor de velocidad
movlw 1000 ;Si esta presionado carga con 127 (rapido)
movwf AUXA
CA movlw 0xff ;Carga el auxiliar de temporizacion 2
movwf AUXB
CB nop ;Pierde 1æS por vuelta
decfsz AUXB ;Resta uno al auxiliar 2
goto CB ;Si no llego a cero vuelve al punto CB
decfsz AUXA ;Resta uno al auxiliar 1
goto CA ;Si no llego a cero vuelve al punto CA
return
end ;Fin del programa[/CODE]
P.D YO NO NOTO CAMBIO EN LA VELOCIDAD Y HAY UNA COSA QUE NO ENTIENDO Y LO VOY A MIRAR , YA TE CONTARE, LO PODEMOS MODIFICAR PARA QUE VAYA MAS LENTO COMO TU HAS DICHO QUE TENIA QUE IR DE 1 A 1'5 SEGUNDO Y LO ESTOY PROBANDO Y VA MAS RAPIDO.
UN SALUDO Y YA ME CUENTAS