Hola!
Feliz cumple para mi !!!
Aqui te dejo tu rutina modificada y funcionando a la perfección , simulada en proteus.
;Necesito que el pic al energizarlo por defecto tenga tres salidas altas, Por ejemplo. (RB1, RB2, RB3, ON)
;Si RA0 recibe un pulso, las salidas deBeran cambiar al siguiente estado RB1 = OFF, RB2 = ON, RB3 = ON
;Si RA1 recibe un pulso, las salidas deBeran cambiar al siguiente estado RB1 = ON, RB2 = OFF, RB3 = ON
;Si RA2 recibe un pulso, las salidas deBeran cambiar al siguiente estado RB1 = ON, RB2 = ON, RB3 = OFF
;Si RA3 recibe un pulso, las salidas deBeran cambiar al siguiente estado RB1 = OFF, RB2 = ON, RB3 = OFF
;Si RA4 recibe un pulso, las salidas deBeran cambiar al siguiente estado RB1 = ON, RB2 = OFF, RB3 = OFF
;Si RA6 recibe un pulso, las salidas deBeran cambiar al siguiente estado RB1 = ON, RB2 = ON, RB3 = ON (ENCIENDE LAS TRES SALIDAS)
; SI USAS MCLR NO PUEDES USAR RA5. POR LO TANTO, MEJOR USAS RA6. SINO AL LLEVAR RA5 A TIERRA LO RESETEARÁS AL PULSAR.-
; LA OTRA ALTERNATIVA ES CAMBIAR LA CONFIG _MCLRE_ON POR _MCLRE_OFF PARA PODER USAR EL RA5 COMO ENTRADA.;NOTA 1: AL ENERGIZAR EL CIRCUITO QUE SUS SALIDAS POR DEFECTO SEAN ALTAS.
;NOTA 2: EL PULSO QUE LLEGA A LAS ENTRADAS ES MOMENTANEO
;NOTA3: DE PREFERENCIA PROGRAMAR EN UN PIC16F628A
;ESTE ES ELPROGRAMA QUE TENGO PERO NO CORRE
__CONFIG _CP_OFF&_MCLRE_ON&_WDT_OFF&_INTOSC_OSC_NOCLKOUT
LIST P=16F628A
INCLUDE <P16F628A.INC>
PDel0 equ 0x20 ; variables para demora antirrebotes
PDel1 equ 0x21
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO BSF STATUS,RP0
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'11111111'
MOVWF TRISA
BCF STATUS,RP0
MOVLW 07h
MOVWF CMCON
MOVLW B'11111111' ;
ANTES ERA "MOVWF". ERROR PORQUE ESTABAS MOVIENDO EL "DATO" DE LA DIRECCION FF (11111111) EN LUGAR DE UN VALOR FF AL ;ACUMULADOR MOVWF PORTB
leer: BTFSS PORTA,0 ; bit 0 del puerto B esta en nivel bajo, salta 1 linea
CALL led0 ;salta a encender LED1
BTFSS PORTA,1
CALL led1
BTFSS PORTA,2
CALL led2
BTFSS PORTA,3
CALL led3
BTFSS PORTA,4
CALL led4
BTFSS PORTA,6
CALL led5
call DEMORA; demora antirrebotes pulsadores 40ms
GOTO leer
led0: MOVLW b'00001100'
MOVWF PORTB
RETURN
led1: MOVLW b'00001010'
MOVWF PORTB
RETURN
led2: MOVLW b'00000110'
MOVWF PORTB
RETURN
led3: MOVLW b'00000100'
MOVWF PORTB
RETURN
led4: MOVLW b'00000010'
MOVWF PORTB
RETURN
led5: MOVLW b'11111110'
MOVWF PORTB
RETURN
DEMORA movlw .93 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .71 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL3 goto PDelL4 ; 2 ciclos delay
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END
También te adjunto el archivo de imágen del proteus para que veas el esquema.
Un abrazo