otra rutina de bin a bcd
; MONBRE ARCHIV0 : 40 BIN A BCD.asm
; MODIFICADO : 11/11/2002
; ARCHIVO BASICO : P16F874.inc
; FUNCION : CONVERSION 40 BITS A BCD
list p=16f874 ; Definicion de Procesador
#include <p16f874.inc> ; Definicion de Registros del Procesador
; Definicion de Variables locales
cblock 20
ibin
fm_outl
fm_outh
fm_outu
fm_outf
fm_outt
fm_in1l
fm_in1h
fm_in1u
fm_in1f
fm_in1t
endc
org 00
goto start
bin_bcd
movlw .40
movwf ibin ; Inicializa contador de bits
clrf fm_outl ; dato BCD = 0
clrf fm_outh
clrf fm_outu
clrf fm_outf
clrf fm_outt
goto inc_bcd ; Ve a incrementar BCD
badj
movlw 0x33 ; BCD = BCD+333333H
addwf fm_outl,f
addwf fm_outh,f
addwf fm_outu,f
addwf fm_outf,f
addwf fm_outt,f
movlw 0x03
btfss fm_outl,3 ; BCD(0:3)>=8?
subwf fm_outl,f ; else: BCD(LSB) = BCD(LSB)-3
btfss fm_outh,3 ; then: BCD(HSB)>=8?
subwf fm_outh,f ; else: BCD(HSB) = BCD(HSB)-3
btfss fm_outu,3
subwf fm_outu,f ; then: BCD(USB)>=8?
btfss fm_outf,3
subwf fm_outf,f ; else: BCD(USB) = BCD(USB)-3
btfss fm_outt,3
subwf fm_outt,f
movlw 0x30 ; then:
btfss fm_outl,7 ; BCD(4:7)>=8?
subwf fm_outl,f ; else: BCD(LSB) = BCD(LSB)-30
btfss fm_outh,7 ; then:BCD(8:15)>=8?
subwf fm_outh,f ; else: BCD(HSB) = BCD(HSB)-30
btfss fm_outu,7 ; then: BCD(20:23)>=8?
subwf fm_outu,f
btfss fm_outf,7
subwf fm_outf,f ; else: BCD(USB) = BCD(USB)-30
btfss fm_outt,7
subwf fm_outt,f
inc_bcd ; then:
rlf fm_in1l,f ; ls bit de BCD = ms bit de bin
rlf fm_in1h,f
rlf fm_in1u,f
rlf fm_in1f,f
rlf fm_in1t,f
rlf fm_outl,f
rlf fm_outh,f
rlf fm_outu,f
rlf fm_outf,f
rlf fm_outt,f
decfsz ibin,f ; contador = contador -1 = 0 ?
goto badj ; else: repite el ciclo
retlw 0 ; then: fin
start movlw 0
movwf fm_in1t
movlw 05
movwf fm_in1f
movlw 05b
movwf fm_in1u
movlw 093
movwf fm_in1h
movlw 0a2
movwf fm_in1l
;RESULTADO 89887650
call bin_bcd
dre goto dre
END ; Fin de Codigo