你好!欢迎来到深圳市颖特新科技有限公司!
语言
当前位置:首页 >> 技术中心 >> 单片机入门 >> 51单片机把4位16进制数转成10进制数的方法

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

关键字:51单片机 C语言 作者:admin 来源:不详 发布时间:2018-05-19  浏览:13

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

;------------------------------------------------------------------

编辑:admin  最后修改时间:2018-05-19

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright © 2014-2023 颖特新科技有限公司 All Rights Reserved.  粤ICP备14043402号-4