[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
MTRx - это временные регистры общего пользования
;---------------------------------------------------------------;
; Binary to BCD convert 1-byte number ;
; Input: MTR1 - input binary 1-byte number, ;
; Output: MTR3:MTR2 - output BCD 2-byte number, ;
; Temp: MTR4 - temporary register. ;
;---------------------------------------------------------------;
BinBCD1:clrf MTR2
clrf MTR3
movlw 8
movwf MTR4bcd10: bcf STATUS,C
rlf MTR1
rlf MTR2
rlf MTR3
decfsz MTR4
goto bcd11
returnbcd11: swapf MTR2,W
addlw 0B0h
btfss STATUS,C
goto bcd12
movlw 03h ; Out1 low nibble >= 5
addwf MTR2bcd12: movf MTR2,W
addlw 0B0h
btfss STATUS,C
goto bcd13
movlw H'30' ; Out1 high nibble >= 5
addwf MTR2bcd13: swapf MTR3,W
addlw 0B0h
btfss STATUS,C
goto bcd14
movlw 03h ; Out2 low nibble >= 5
addwf MTR3
bcd14: goto bcd10
;---------------------------------------------------------------;
; 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
;---------------------------------------------------------------;
E-mail: info@telesys.ru