[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
;---------------------------------------------------------------;
; Binary to BCD convert 3-byte number ;
; Input: MTR3:MTR2:MTR1 - input binary 3-byte number, ;
; Output: MTR7:MTR6:MTR5:MTR4 - output BCD 4-byte number, ;
; Temp: MTR8,FSR - temporary registers. ;
;---------------------------------------------------------------;
BinBCD3:clrf MTR4
clrf MTR5
clrf MTR6
clrf MTR7
movlw 24 ; 24 shift steps
movwf MTR8bcd30: bsf MTR8,7 ; 4 Out registers
movlw MTR4
movwf FSR
bcf STATUS,C
rlf MTR1
rlf MTR2
rlf MTR3
rlf MTR4
rlf MTR5
rlf MTR6
rlf MTR7
decf MTR8
movf MTR8,W
andlw b'00011111'
btfss STATUS,Z
goto bcd31
returnbcd31: swapf INDF,W
addlw 0B0h
btfss STATUS,C
goto bcd32
movlw 03h ; Out low nibble >= 5
addwf INDFbcd32: movf INDF,W
addlw 0B0h
btfss STATUS,C
goto bcd33
movlw 30h ; Out high nibble >= 5
addwf INDFbcd33: incf FSR
movlw 20h
subwf MTR8
movf MTR8,W
andlw b'11100000'
btfss STATUS,Z
goto bcd31
goto bcd30
;---------------------------------------------------------------;
для переделки увеличь число регистров, кол-во сдвигаемых регистров и число сдвигов с 24 до 32-х
E-mail: info@telesys.ru