求51单片机把4位16进制数转成10进制数的方法

我要的是汇编的方法,C语言还没学到.

2位16进制转10进制我已会了,用除于10求商跟佘数的方法,但4位16进制数呢?
DIV 这个指令只可以对2位16进制数进行除法运算啊,求高手解答,
最好能给出个例子,比如把TH1 TL1的数值,转成十进制, 分别存入R4 R3 R2 R1 R0 ,注上适当的说明,因为我刚学,对程序的解读还很不熟练

第1个回答  2013-08-20
这个很复杂的 你可以考虑 就是只有把TL1的数据先转10进制 然后 TH1其实就是累加了 TH1次的TL1 也就是说 商和余数都要累加TH1次 然后在除 可以用累加一次就处理一次的方法处理 程序还是自己慢慢写吧 方法可以用我这样的 汇编好累 C语言一句话的问题 汇编好写好久 汇编对于控制操作位啊什么的很好用 程序空间可以很省 但是对于运算 它就是非常繁复的
第2个回答  2019-10-24
串口接收到的数据都是十六进制。将a0c1转换成十进制程序如下:
ibtd22 : mov a,r0
push a
mov r3,#0a0h
mov r4,#0c0h
mov r7,#03h
clr a
ibd221 : mov @r0,a
inc r0
djnz r7,ibd221
pop a
mov r0,a
mov r7,#10h
ibd222 : push a
clr c
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov b,#03h
ibd223 : mov a,@r0
addc a,@r0
da a
mov @r0,a
inc r0
djnz b,ibd223
pop a
mov r0,a
djnz r7,ibd222
ret
第3个回答  2013-08-20
程序经过仿真调试通过,如下所示:

MOV R0, TL0

MOV R1, TH0

CLR A

MOV R2, A,

;先清零

MOV R3, A,

MOV R4, A,

MOV R5, #16

;共转换十六位数
LOOP:

CLR C

MOV A,
R0

;从待转换数的高端移出一位到Cy

RLC A

MOV R0, A

MOV A,
R1

RLC A

MOV R1, A

MOV A,
R4

;送到BCD码的低端

ADDC A,
R4

;带进位加。自身相加,相当于左移一位

DA
A

;十进制调整,变成BCD码

MOV R4, A

MOV A,
R3

ADDC A,
R3

DA
A

MOV R3, A

MOV A,
R2

ADDC A,
R2

MOV R2, A

DJNZ R5, LOOP

;共转换十六位数
;-------至此,已经把TH1 TL1中的数字,转换成BCD码,送到了R2 R3 R4。
;-------下面,分别存入R4 R3 R2 R1 R0。

MOV A,
R4

MOV B,
#16

DIV AB

MOV R1, A

MOV R0, B

MOV A,
R2

MOV R4, A

MOV A,
R3

MOV B,
#16

DIV AB

MOV R3, A

MOV R2, B

RET
;完本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网