Buenos dias a todo el mundo. Hace muy poco empece a introducirme en el tema de programacion en assembler de PICs y este es mi primer proyecto que hago con microcontroladores (No sean muy duros si ven muchos errores de principiante
). Bueno, la idea del proyecto es relativamente simple: Encender de forma permanente un led con un pulsador asignado, y prender otro led con otro pulsador asignado (apagando el led anterior apenas se pulse otro pulsador que no sea el asignado a este)... La idea era hacerlo con una bandera, pero verificando los registros con el MPLAB SIM veo que nunca cambia de estado el registro bandera (aun forzando a cero alguno de los bits del puerto B que uso como entrada dentro del codigo, solo para probar si cambiaba el estado de bandera)... Alguien tiene idea de que estoy haciendo mal?... Aca les dejo el codigo
Lo estoy probando en Proteus, cuando pulso no hace nada... Aca les dejo el circuito donde lo estoy probando:
Si alguien tiene alguna respuesta, desde ya muchas gracias!
Código:
list p=16F84
include <p16f84A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
BANDERA equ 0X0C
Pulsador1 equ 0
Pulsador2 equ 1
Pulsador3 equ 2
Pulsador4 equ 3
Led1 equ 4
Led2 equ 5
Led3 equ 6
Led4 equ 7
org 0
bsf STATUS,RP0 ; Paso a banco 1
movlw b'10000' ; Configuro puerto A como salida
movwf TRISA ; "
movlw b'00001111'; Configuro pin 0 a 3 como entrada y 4 a 7 como salida
movwf TRISB
bcf STATUS,RP0 ; Paso a banco 0
clrf PORTA ; Limpio puerto A
clrf PORTB ; Limpio puerto B
; ********* ZONA DE CODIGO ***********
leerpuerto
btfsc PORTB,Pulsador1 ; Verifico si pin 0 este sin tension
movlw .1 ; Asigno decimal 1 a W
btfsc PORTB,Pulsador2 ; Verifico si pin 1 este sin tension
movlw .2 ; Asigno decimal 2 a W
btfsc PORTB,Pulsador3 ; Verifico si pin 2 este sin tension
movlw .3 ; Asigno decimal 3 a W
btfsc PORTB,Pulsador4 ; Verifico si pin 3 este sin tension
movlw .4 ; Asigno decimal 4 a W
movwf BANDERA ; Cargo contenido de W a BANDERA
movfw BANDERA ; Cargo contenido de BANDERA a W
sublw .1 ; Comparo contenido de W a decimal 1
btfsc STATUS,Z ; Verifico que el bit Z este en cero
goto funcion1
movfw BANDERA ; Cargo contenido de BANDERA a W
sublw .2 ; Comparo contenido de W a decimal 2
btfsc STATUS,Z ; Verifico que el bit Z este en cero
goto funcion2
movfw BANDERA ; Cargo contenido de BANDERA a W
sublw .3 ; Comparo contenido de W a decimal 3
btfsc STATUS,Z ; Verifico que el bit Z este en cero
goto funcion3
movfw BANDERA ; Cargo contenido de BANDERA a W
sublw .4 ; Comparo contenido de W a decimal 4
btfsc STATUS,Z ; Verifico que el bit Z este en cero
goto funcion4
volver
goto leerpuerto
funcion1
bcf PORTB,Led1 ;Enciendo bit 4 de puerto B
goto volver
funcion2
bcf PORTB,Led2 ;Enciendo bit 5 de puerto B
goto volver
funcion3
bcf PORTB,Led3 ;Enciendo bit 6 de puerto B
goto volver
funcion4
bcf PORTB,Led4 ;Enciendo bit 7 de puerto B
goto volver
end
Lo estoy probando en Proteus, cuando pulso no hace nada... Aca les dejo el circuito donde lo estoy probando:
Si alguien tiene alguna respuesta, desde ya muchas gracias!