Estimados,
Estoy haciendo un proyecto con el Pic 16F84A que hace lo siguiente. El puerto B está conectado a 8 led, y el RA0 está conectado a un switch. Cuando el switch está abierto, los led del puerto B encienden secuencialmente de RB0 a RB7 (con delay de 1 segundo), si enciendo el switch los led encenderan secuencialmente de RB7 a RB0. Mi problema es en el retardo, dado que se activa el led RB0, pero la rutina de retardo no sigue la secuencia. No se me ocurre como hacerlo.
Dejo el código en Assembler.
Estoy haciendo un proyecto con el Pic 16F84A que hace lo siguiente. El puerto B está conectado a 8 led, y el RA0 está conectado a un switch. Cuando el switch está abierto, los led del puerto B encienden secuencialmente de RB0 a RB7 (con delay de 1 segundo), si enciendo el switch los led encenderan secuencialmente de RB7 a RB0. Mi problema es en el retardo, dado que se activa el led RB0, pero la rutina de retardo no sigue la secuencia. No se me ocurre como hacerlo.
Dejo el código en Assembler.
PHP:
INCLUDE <P16F84A.INC>
LIST P=16F84A
CBLOCK 0x0c
reg1
reg2
ENDC
org 0
goto inicio
inicio
bsf STATUS,RP0 ;Entro al banco 1
bsf TRISA,0 ;Configuro el RA0 como entrada
clrf TRISB ;Dejo en cero el registro TRISB dejando como salida
bcf STATUS,RP0 ;vuelvo al banco 0
switch
movlw b'00000001' ; Esta rutina escanea el puerto A, donde esta
subwf PORTA,0 ; conectado el switch al RA0.
btfsc STATUS,Z
call secuencia_2
call secuencia_1
goto switch
secuencia_1
movlw b'00000001'
movwf PORTB
call retardo_1s
movlw b'00000010'
movwf PORTB
call retardo_1s
movlw b'00000100'
movwf PORTB
call retardo_1s
movlw b'00001000'
movwf PORTB
call retardo_1s
movlw b'00010000'
movwf PORTB
call retardo_1s
movlw b'00100000'
movwf PORTB
call retardo_1s
movlw b'01000000'
movwf PORTB
call retardo_1s
movlw b'10000000'
movwf PORTB
call retardo_1s
goto switch
secuencia_2
movlw b'10000000'
movwf PORTB
call retardo_1s
movlw b'01000000'
movwf PORTB
call retardo_1s
movlw b'00100000'
movwf PORTB
call retardo_1s
movlw b'00010000'
movwf PORTB
call retardo_1s
movlw b'00001000'
movwf PORTB
call retardo_1s
movlw b'00000100'
movwf PORTB
call retardo_1s
movlw b'00000010'
movwf PORTB
call retardo_1s
movlw b'00000001'
movwf PORTB
call retardo_1s
goto switch
retardo_1s
movlw 0xF8
movwf reg2
nop
nop
nop
bucle_1
nop
decfsz reg2
call retardo_1ms
return
retardo_1ms
movlw 0xF8
movwf reg1
nop
nop
nop
bucle
nop
decfsz reg1
goto bucle
goto bucle_1
end