返回信息流16进制用汇编转为10进制
先左移输入的16进制数,最高位移入C, 再左移输出的10进制数,把C移入最低位,
一直移动16次,把16位全部转移完。
在循环过程中校正数值,最后一次不要校正!
校正方法,检测每4位,是否>4,如果是+3到该4位上,否则不改变!
这其中的原理是什么 为什么检测每4位 为什么要看是否大于4,为什么+3?
谢谢各位!!!
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13062同步于 2013/3/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
请教一个用汇编把HEX码转BCD码的问题
devil5cry
2013/3/14镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
代码如下:HEX4_BCD5:
; initial data
CLRF BCD_H
CLRF BCD_M
CLRF BCD_L
MOVLW D'16'
MOVWF COUNT
BCF STATUS,C
; loop part BCD_H BCD_M BCD_L <- HEX_H HEX_l
HEX4_BCD5_LOOP:
RLF HEX_L
RLF HEX_H
RLF BCD_L
RLF BCD_M
RLF BCD_H
DECFSZ COUNT,F
GOTO HEX4_BCD5_ADJUST_DAT
RETLW 0
HEX4_BCD5_ADJUST_DAT:
MOVLW BCD_L ; W <- BCD_L地址
MOVWF FSR ; FSR <- W (BCD_L的地址)
CALL ADJUST_BYTE_HEX_BCD ; 调整
MOVLW BCD_M
MOVWF FSR
CALL ADJUST_BYTE_HEX_BCD
MOVLW BCD_H
MOVWF FSR
CALL ADJUST_BYTE_HEX_BCD
GOTO HEX4_BCD5_LOOP
ADJUST_BYTE_HEX_BCD:
MOVLW H'03' ; W<-3
ADDWF INDF,W ; F+W → W ,低四位加3
MOVWF TEMP
BTFSC TEMP,3 ; ? 结果 > 7
MOVWF INDF ; 保存结果(结果 > 7)
MOVLW H'30' ; W<-0X30
ADDWF INDF,W ; F+W → W ,高四位加3
MOVWF TEMP
BTFSC TEMP,7 ; ? 结果 > 7
MOVWF INDF ; 保存结果(结果 > 7)
RETLW 0