Un saludo a todos, espero que alguien me pueda ayudar, necesito desarrollar una combinacion entre interruptores del dip conectados a los pines RA4 y RA3 del microcontrolador PIC16F84A, donde el circuito debe encender los leds, uno a uno, siguiendo un orden determinado. RA4=0 RA3=0 Apagado, RA4=0 RA3=1 secuencia de izquierda a derecha, RA4=1 RA3=0 secuencia de derecha a izquierda y por ultimo RA4=1 RA3=1 parpadeo intermitente.
Al compilar mi codigo no me aparece ni un solo problema, pero en la simulacion los led no encienden... al momento de compilar secuencia por secuencia al separado, me funciona de maravilla, pero todo junto no pasa nada. Seria de gran ayuda su aporte
Mi código es el siguiente:
;---------------------------------------------
LIST P = PIC16F84A
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
cont1 EQU 0X0C
cont2 EQU 0X0D
Count equ 0x0E
ORG 0x00
INICIO ;Inicio de programa
BSF STATUS,RP0; PASAMOS AL BANCO 1
CLRF TRISB ; PUERTO B COMO SALIDAS
movlw b'11111'
movwf TRISA ;PUERTO A COMO ENTRADAS
movlw b'00000000'
movwf TRISB
BCF STATUS,RP0; PASAMOS AL BANCO 0
CLRF PORTA; LIMPIAMOS PUERTO A
CLRF PORTB; LIMPIAMOS PUERTO B
;-------------------------------------------------
CONTROL
P1 btfsc PORTA,3
goto P1
P1A btfsc PORTA,4
goto P1A
call SECUENCIA1
P2 btfss PORTA,3
goto P2
P2A btfsc PORTA,4
goto P2A
call SECUENCIA2
P3 btfsc PORTA,3
goto P3
P3A btfss PORTA,4
goto P3A
call SECUENCIA3
P4 btfss PORTA,3
goto P4
P4A btfss PORTA,4
goto P4A
call SECUENCIA4
goto CONTROL
;-------------------------------------------------
SECUENCIA1 bcf PORTB,0
bcf PORTB,1
bcf PORTB,2
bcf PORTB,3
bcf PORTB,4
bcf PORTB,5
bcf PORTB,6
bcf PORTB,7
RETURN
SECUENCIA2 rlf PORTB
call RETARDO
return
SECUENCIA3 rrf PORTB
call RETARDO
return
SECUENCIA4 BSF PORTB,0
BSF PORTB,2
BSF PORTB,4
BSF PORTB,6
CALL RETARDO
BCF PORTB,0
BCF PORTB,2
BCF PORTB,4
BCF PORTB,6
BSF PORTB,1
BSF PORTB,3
BSF PORTB,5
BSF PORTB,7
CALL RETARDO
BCF PORTB,1
BCF PORTB,3
BCF PORTB,5
BCF PORTB,7
RETURN
;--------------------------------------
RETARDO
movlw d'100' ; Mover 100 a W
movwf cont1 ; Mover W a cont1 (cargar cont1)
movlw d'255' ; Mover 255 a W
movwf cont2 ; Mover W a cont2 (cargar cont2)
loop1
decfsz cont1, f ; decrementar cont1, saltear si da 0
goto loop2 ; saltar a loop2
decfsz cont2, f ; decrementar cont2, saltear si da 0
loop2
goto loop1 ; saltar a loop1
return ; retornar de subrutina
END ; Fin del cdigo