|
一般不建议对BCD码直接进行加减运算
正常情况下直接对十六进制数进行加减,显示之前转换成相应BCD码即可
附十六进制转BCD代码,该代码是我工作过程中一直在用的,希望能帮到你:
;******************************************************
;change: HEX to BCD code
; input: TempRam11,TempRam12,TempRam13
;output: TempRam1, TempRam2, TempRam3, TempRam4, TempRam5, TempRam6
;Temp : Buffer0, Buffer1 ,Buffer2,Buffer3 ,Buffer4
;******************************************************
_Ftob:
clrf TempRam1
clrf TempRam11
Sub10k:
clrf TempRam2
Sub10kLoop:
movlw 10h
subwf TempRam13,0
movwf Buffer2
movlw 27h
subwfc TempRam12,0
movwf Buffer1
movlw 0
subwfc TempRam11,0
btfss STATUS,C
goto Sub1k
movwf TempRam11
movff Buffer1,TempRam12
movff Buffer2,TempRam13
incf TempRam2,1
goto Sub10kLoop
Sub1k:
clrf TempRam3
Sub1kLoop:
movlw 0e8h
subwf TempRam13,0
movwf Buffer2
movlw 03h
subwfc TempRam12,0
btfss STATUS,C
goto Sub100
movwf TempRam12
movff Buffer2,TempRam13
incf TempRam3,1
goto Sub1kLoop
Sub100:
clrf TempRam4
Sub100Loop:
movlw 64h
subwf TempRam13,0
movwf Buffer2
movlw 0
subwfc TempRam12,0
btfss STATUS,C
goto Sub10
movwf TempRam12
movff Buffer2,TempRam13
incf TempRam4,1
goto Sub100Loop
Sub10:
clrf TempRam5
Sub10Loop:
movlw 10
subwf TempRam13,0
btfss STATUS,C
goto Sub1
movwf TempRam13
incf TempRam5,1
goto Sub10Loop
Sub1:
movff TempRam13,TempRam6
return |
|