发新帖我要提问
12
返回列表
打印

大于65536的5位BCD码怎样转换成HEX?

[复制链接]
楼主: wwdyl
手机看帖
扫描二维码
随时随地手机跟帖
21
懒人| | 2007-8-6 16:42 | 只看该作者 回帖奖励 |倒序浏览

不好意思,程序的说明不是很清楚,但此程序是经过验证的,绝



ORG    000H
ljmp    START

ORG      0100H
START:
    mov    SP,#070H
    mov    R0,#010H  ;压缩BCD码最高位地址
    mov    R1,#02FH  ;HEX最低位地址
    mov    R7,#09    ;9字节BCD数据
    call    BCD_HEX
    jmp    $

;例如RAM中010H~018H保存数据BCD码数据=99 22 33 44 55 66 77 88 99 共9字节
;转换结果是:028H~02F的HEX数据=0D C5 1F 0F C9 45 0E 13



;==========压缩BCD码数据,转换为16进制数据子程序========
;函数名称:BCD2_HEX
;功能:    压缩BCD码数据,转换为16进制数据
;入口参数:R0 指向BCD码最高位(压缩BCD码数据保存格式 = 低位地址存最高位BCD码),R7 = 压缩BCD码数据字节数
;出口参数:(R1) = 最低16进制数据地址(低位地址存最高位HEX数据)
;影响资源:C,A,B,R2,R3,R4,R5,R6,R7
;其他:       压缩BCD码
;==========================经过修改=========================
    BCD_HEX:
            push    PSW
            push    Acc
            push    B
            mov    A,R1
            mov    R6,A
            mov    A,R7
            mov    R3,A
            clr    A
    BCD_HEX0:
            mov    @R1,A
            dec    R1
            djnz    R3,BCD_HEX0
            mov    A,R7
            mov    R3,A        ;清零
    BCD_HEX1:
            lcall    BCD_HEX2
            mov    A,@R0
            anl    A,#0F0H
            swap    A
            lcall    BCD_HEX4
            lcall    BCD_HEX2
            mov    A,@R0
            anl    A,#0FH
            lcall    BCD_HEX4
            inc    R0
            djnz    R3,BCD_HEX1
            pop    B
            pop    Acc
            pop    PSW
            inc    R1
            ret

    BCD_HEX2:
            mov    A,R7        ;*10
            mov    R4,A
            mov    A,R6
            mov    R1,A
            clr    C
            mov    R2,#00H
    BCD_HEX3:
            mov    A,@R1
            mov    B,#0AH
            push    PSW
            mul    AB
            pop    PSW
            addc    A,R2
            mov    @R1,A
            mov    R2,B
            dec    R1
            djnz    R4,BCD_HEX3
            ret            ;*C10 End
    BCD_HEX4:
            mov    R5,A        ;+
            mov    A,R6
            mov    R1,A
            mov    A,R7
            mov    R4,A
            mov    A,R5
            addc    A,@R1
            mov    @R1,A
            dec    R1
            dec    R4
            mov    A,R4
            jnz    BCD_HEX5
            ljmp    BCD_HEXEND
    BCD_HEX5:
            mov    A,@R1
            addc    A,#00H
            mov    @R1,A
            dec    R1
            djnz    R4,BCD_HEX5
    BCD_HEXEND:
            ret

 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则