EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机把4位16进制数转成10进制数的方法7 q9 L& Z' K# r8 ~
" w" |& z3 a$ H4 T+ F% Z, }- ~2位16进制转10进制,用除以10求商跟余数的方法,即可。 4位16进制数呢?DIV指令只可以对2位16进制数进行除法运算啊,求高手解答。 例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。 ;------------------------------------------------------------------ 下面把这段转换程序,写成子程序的结构,便于网友移植。 ; 程序经过仿真调试通过,如下所示: ;------------------------------------------------------------------ ; MOV R0, TH1 MOV R1, TL1 CALL HEX2BCD ;调用子程序把R0 R1中的数字,转换成BCD码,送到R2 R3 R4 ;-------下面,把万千百十个位,分别存入R4 R3 R2 R1 R0 MOV A, R4 MOV B, #16 DIV AB ;除以16,目的是分离出高、低四位 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 SJMP $ ;到此,完成了题目要求 ;------------------------------------------------------------------ ;两个字节的二进制数转换成BCD码的程序如下: ;功能:16位二进制数变换成为 BCD 码; ;入口:R0 R1 中是 16 位二进制数,其中R0中是高 8 位; ;出口:R2 R3 R4 中是 BCD 码,其中R2中是万位,R3中是千、百位,R4中是十、个位。 HEX2BCD: CLR A MOV R2, A ;先清零 MOV R3, A MOV R4, A MOV R5, #16 ;共转换十六位数 LOOP: CLR C MOV A, R1 ;从待转换数的高端移出一位到Cy RLC A MOV R1, A MOV A, R0 RLC A MOV R0, 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 ;共转换十六位数 RET ;------------------------------------------------------------------
0 I( d% a0 i& H- o; M7 b8 h% f
+ `6 i/ W# ]2 s# Y% {6 U |