Hola, ¿cómo están?
Estoy comenzando a trabajar en assembler con el conocidísimo pic 16f84a quiero que al oprimir un pulsador que manda un 1 a RA0, este cuente por PORTB en binario DE 0 A (F) 16 / (15)10 y vuelva a 0 después de 15. Y bueno, adivinen, no me funciona, jajjaj.
Por favor, alguno podría decirme que está mal?:
este es el código:
Estoy comenzando a trabajar en assembler con el conocidísimo pic 16f84a quiero que al oprimir un pulsador que manda un 1 a RA0, este cuente por PORTB en binario DE 0 A (F) 16 / (15)10 y vuelva a 0 después de 15. Y bueno, adivinen, no me funciona, jajjaj.
Por favor, alguno podría decirme que está mal?:
este es el código:
list p=16F84A ; list directive to define processor
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;***** VARIABLE DEFINITIONS
BIN EQU 0x0C ;variable used for context saving
;************** ASSEMBLER **********************************
ORG 0x00 ; processor reset vector
#include <p16F84A.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;***** VARIABLE DEFINITIONS
BIN EQU 0x0C ;variable used for context saving
;************** ASSEMBLER **********************************
ORG 0x00 ; processor reset vector
INICIO
BSF STATUS,RP0 ;BANCO 1
CLRF TRISB ;PORTB ES SALIDA
BSF TRISA,0 ;RA0 ES ENTRADA
BCF STATUS,RP0 ;IR A BANCO 0
ESPERA
BTFSS PORTA,0 ;SI RA0=1
GOTO ESPERA ;
INCF BIN,1 ;INCREMENTA EN 1 A BIN EN 0X0C
MOVLW 0X1F ;COMPRUEBA QUE BIN NO SEA 11111
SUBWF BIN,0 ;RESTANDO
BTFSC STATUS,Z ;
CLRF BIN ;SI DA =0 , BIN= 11111, BORRA. BIN = 00000000
GOTO SALIDA
SALIDA
MOVLW BIN ;SACA EL DATO EN BIN
MOVWF PORTB ;A PORTB
GOTO ESPERA ;VUELVE A PROBAR EL ESTADO EN RA0
END ; directive 'end of program'
BSF STATUS,RP0 ;BANCO 1
CLRF TRISB ;PORTB ES SALIDA
BSF TRISA,0 ;RA0 ES ENTRADA
BCF STATUS,RP0 ;IR A BANCO 0
ESPERA
BTFSS PORTA,0 ;SI RA0=1
GOTO ESPERA ;
INCF BIN,1 ;INCREMENTA EN 1 A BIN EN 0X0C
MOVLW 0X1F ;COMPRUEBA QUE BIN NO SEA 11111
SUBWF BIN,0 ;RESTANDO
BTFSC STATUS,Z ;
CLRF BIN ;SI DA =0 , BIN= 11111, BORRA. BIN = 00000000
GOTO SALIDA
SALIDA
MOVLW BIN ;SACA EL DATO EN BIN
MOVWF PORTB ;A PORTB
GOTO ESPERA ;VUELVE A PROBAR EL ESTADO EN RA0
END ; directive 'end of program'
lo único que he visto raro es en los mensajes del ensamblado que me dice que el el registro del operando no está en banco 0 enlas dos líneas con asterisco, que me parece extraño.Perdón por la alineación de columnas, me lo dejó así y no puede mejorarlo.
Gracias por su ayuda.
Gracias por su ayuda.
Última edición: