在51单片机中,使用汇编语言,如何将十六进制数转换成十进制。
5个回答
展开全部
程序经过仿真调试通过,如下所示:
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
;完
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
;完
追问
看不懂啊,感觉有点不对呀
追答
下面是十六进制转十进制程序,原理是:
例:十六进制的2AF5=十进制的5*16+F*16+A*16*16+2*16*16*16;
unsigned char ret4,ret3,ret2,ret1;//定义位的值
ret4=ret/0x1000; //取出千位的值,注意0x1000是个十六进制数
ret=ret<<4; //ret变量左移四位
ret3=ret/0x1000; //取出百位的值
ret=ret<<4;
ret2=ret/0x1000; //取出十位的值
ret=ret<<4;
ret1=ret/0x1000; //取出个位的值
ret=ret1+ret2*16+ret3*16*16+ret4*16*16*16;//各位的值乘以位权,完成十六转十进制
return(ret);
C语言看得清楚啊,希望对你有帮助,祝你成功&顺利!
展开全部
把数值送到寄存器A中,
mov b,#10
div ab
得到的a即是商,也就是十位,b中是余数,也就是个位。
如果位数更多的话,例如三位六进制数,100关到b中,相除,得到的a中就是最高位,先存放到别的寄存器中,再
mov a,b
mov b,10
div ab
得到的a就是十位喽,b中自然是个位
就是这个原理,再想想,不难的
mov b,#10
div ab
得到的a即是商,也就是十位,b中是余数,也就是个位。
如果位数更多的话,例如三位六进制数,100关到b中,相除,得到的a中就是最高位,先存放到别的寄存器中,再
mov a,b
mov b,10
div ab
得到的a就是十位喽,b中自然是个位
就是这个原理,再想想,不难的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主可以到网上搜索一下,很多这样的子程序。在使用时要注意这段子程序占用了哪些存储单元,程序的入口和出口分别是什么。你可以把计数器得到的数值赋给转换子程序的入口单元,转换结束后就可以从出口的存储地址得到结果,然后做一下处理送到数码管显示。
这类程序有很多,楼主只要注意它使用了哪些存储地址即可顺利使用。
这类程序有很多,楼主只要注意它使用了哪些存储地址即可顺利使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned char code seg_code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, // 0--9
0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00}; // A, b, C, d, E, F
是几就点亮相应的LED脚。
0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00}; // A, b, C, d, E, F
是几就点亮相应的LED脚。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
共阳数码管显示数字吗?0~9:0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询