Buenas, estoy tratando de hacer un convertir un numero binario a bcd (0-255) utilizando el pic 16f883. el codigo que estoy utilizando es el siguiente:
el programa me compila pero no funciona, agradecería mucho su ayuda
Código:
__CONFIG _CONFIG1,_CP_OFF & _WDT_OFF & _PWRTE_ON & _LVP_OFF
LIST P=16F883
#INCLUDE P16F883.INC
CBLOCK 0X20 ;DECLARA VARIABLES EN LA MEMORIA RAM APARTIR DE LA DIRECCION 20
BCDH ;GUARDO LAS CENTENAS
BCDL ;GURADO UNIDADES Y DECENAS
BIN ;ALMACENO NUMERO BINARIO
ENDC
ORG 0X00 ;DIRECION DE LA MEMORIA FLAHS
GOTO CONFIGURACION ;SALTAR A LA ETIQUETA INICIO
ORG 0X05 ;VOY A LA DIRECCION 5
CONFIGURACION
NOP
;PARA EL PUERTO A LO CONFIGURO COMO DIGITAL
BANKSEL ANSEL ;ESTA INSTRUCION VA AL BANCO DONDE ESTA ANSEL
MOVLW 0X00 ;CARGO EL REGISTRO DE TRABAJO (W) DE CEROS
MOVWF ANSEL ;LLEVO LO DE W A ANSEL
;PARA EL PUERTO B LO CONFIGURO COMO DIGITAL
MOVWF ANSELH ;LLEVO LO DE W A ANSELH
;CONFIGURAR CRSITAL INTERNO
BANKSEL OSCCON ;VA AL BANCO DONDE ESTA OSCCON
MOVLW 0X61 ;CRSITAL INTERNO Y A 4MHZ
MOVWF OSCCON ;LLEVO LO DE W A OSCCON
MOVLW 0XFF ;CARGO W COMO ENTRADA
ANDLW B'11111111' ;HACE UNA OPERACION AND ENTRE W Y LO ESCRITO
MOVWF TRISA ;LLEVO LO DE W A TRISA
MOVLW B'00000000' ;CARGO EL REGISTRO DE TRABAJO (W) DE CEROS
MOVWF TRISB ;LLEVO LO DE W A TRISB
MOVLW B'00000000' ;CARGO EL REGISTRO DE TRABAJO (W) DE CEROS
MOVWF TRISC ;LLEVO LO DE W A TRISC
BANKSEL PORTA ;VUELVO AL BANCO 0
CLRF PORTB ;DESATIVO TODOS LOS DISPLAYS
CLRF PORTC
INICIO
MOVF PORTA,W ;CAPTURO LO DEL PUERTO A Y GUARDO EN W
MOVWF BIN ;LLEVO LO DE W A BIN
GOTO BIN8_BCD3 ;VOY A BIN8_BCD3
MOVLW BCDL ;CARGO A W CON UNIDADES Y DECENAS
MOVWF PORTB ;LLEVO W A PORTB
MOVLW BCDH ;CARGO A W CON CENTENAS
MOVWF PORTC ;LLEVO W A PORTC
GOTO INICIO ;VOY A INICIO
BIN8_BCD3
CLRF BCDH ;BORRO BCDH
CLRF BCDL ;BORRO BCDL
BCD_HIGH
MOVLW .100 ;CARGO W CON 100
SUBWF BIN,F ;RESTO A BIN CON W
BTFSS STATUS,C ;
GOTO SUMA_100 ;VOY A SUMA_100
INCF BCDH,F ;INCREMENTE A BCDH
GOTO BCD_HIGH ;VOY A BCD_HIGH
SUMA_100
MOVLW .100 ;CARGO W CON 100
ADDWF BIN,F ;SUMO A BIN CON W
MOVLW 0x0F ;CARGO W CON
MOVWF BCDL ;LLEVO W A BCDL
BCD_LOW
MOVLW .10 ;CARGO A W CON 10
SUBWF BIN,F ;RESTO A BIN W
BTFSS STATUS,C ;
GOTO SUMA_10 ;VOYA SUMA_10
INCF BCDL ;INCREMENTO BCDL
MOVLW 0x0F ;CARGO A W CON
IORWF BCDL ;OR DE W CON LO ESCRITO
GOTO BCD_LOW ;VOY A BCD_LOW
SUMA_10
MOVLW .10 ;CARGO A W CON 10
ADDWF BIN,F ;SUMO A BIN CON W
MOVLW 0xF0 ;CARGO A W CON
ANDWF BCDL,F ;AND ENTRE W Y BCDL
MOVF BIN,W ;GUARDO BIN EN W
IORWF BCDL,F ;OR ENTRE BCDL Y W
RETURN
END
el programa me compila pero no funciona, agradecería mucho su ayuda
Última edición por un moderador: