Buenas amigos, soy nuevo programando PICS en MPLAB, lo que sucede es que tengo que realizar un programa con el PIC 16F84A que prenda 8 LEDS, cada uno ubicado en uno de los puertos de B (RBO - RB7), pero este proceso debe realizarse al oprimir un solo pulsador ubicado en RA1, es decir, cada pulso debe hacer prender un LED pero apagando el LED anterior.
el programa que realice:
list p=16F84A
#include "P16F84A.INC"
org 0x00
TIEMPO equ 9Fh ; Variable para el bucle de retardo.
PORTB equ 06h ; Dirección del Port B.
TRISB equ 86h ; Dirección del registro tri-estado del Port B.
PORTA equ 05h ; Dirección del Port A.
TRISA equ 85h ; Dirección del registro tri-estado del Port A.
STATUS equ 03h ; Registro para seleccionar el banco.
bsf STATUS,5 ; Va al Banco 1
movlw 00h ; y configura
movwf TRISB ; ambos puertos A y B
movlw b'11111' ; como salidas,
movwf TRISA ; después vuelve
bcf STATUS,5 ; al Banco 0.
goto LED1
LED1
btfss PORTA,1
goto CLEAR
movlw b'00000001'
movwf PORTB
goto LED2
LED2
btfss PORTA,1
nop
rlf PORTB,1
goto LED3
LED3
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00000100, C = 0
goto LED4
LED4
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00001000, C = 0
goto LED5
LED5
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00010000, C = 0
goto LED6
LED6
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00100000, C = 0
goto LED7
LED7
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 01000000, C = 0
goto LED8
LED8
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 10000000, C = 0
goto RETORNO
RETORNO
btfss PORTA,1
nop
rlf PORTB,1
goto LED1
CLEAR
clrf PORTA
clrf PORTB
end
En teoria funciona, pero me cuenta automatico, y necesito que me cuente por cada vez que yo oprima el pulsador.
el programa que realice:
list p=16F84A
#include "P16F84A.INC"
org 0x00
TIEMPO equ 9Fh ; Variable para el bucle de retardo.
PORTB equ 06h ; Dirección del Port B.
TRISB equ 86h ; Dirección del registro tri-estado del Port B.
PORTA equ 05h ; Dirección del Port A.
TRISA equ 85h ; Dirección del registro tri-estado del Port A.
STATUS equ 03h ; Registro para seleccionar el banco.
bsf STATUS,5 ; Va al Banco 1
movlw 00h ; y configura
movwf TRISB ; ambos puertos A y B
movlw b'11111' ; como salidas,
movwf TRISA ; después vuelve
bcf STATUS,5 ; al Banco 0.
goto LED1
LED1
btfss PORTA,1
goto CLEAR
movlw b'00000001'
movwf PORTB
goto LED2
LED2
btfss PORTA,1
nop
rlf PORTB,1
goto LED3
LED3
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00000100, C = 0
goto LED4
LED4
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00001000, C = 0
goto LED5
LED5
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00010000, C = 0
goto LED6
LED6
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 00100000, C = 0
goto LED7
LED7
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 01000000, C = 0
goto LED8
LED8
btfss PORTA,1
nop
rlf PORTB,1 ; PORTB = 10000000, C = 0
goto RETORNO
RETORNO
btfss PORTA,1
nop
rlf PORTB,1
goto LED1
CLEAR
clrf PORTA
clrf PORTB
end
En teoria funciona, pero me cuenta automatico, y necesito que me cuente por cada vez que yo oprima el pulsador.