历史上的今天
今天是:2024年11月23日(星期六)
2018年11月23日 | 51单片机把4位16进制数转成10进制数的方法
2018-11-23 来源:eefocus
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
;------------------------------------------------------------------
史海拾趣
|
最近使用稳压芯片,朋友推荐了一款低价芯片L385可调稳压芯片,先简要介绍给大家。 特点:输出电压可调从1.24~30V; 工作电流从10微安到20豪安; 1% 和2% 初始 ...… 查看全部问答> |
|
在VS2005中设置DIALOG的属性,将滚动条属性设置为TRUE,这样在界面中出现滚动条样式,但不能实现滚动。 在VS2005中设置DIALOG的属性,将滚动条属性设置为TRUE,这样在界面中出现滚动条样式,但不能实现滚动。 … 查看全部问答> |
|
问题1:开发板里有BSP,SDK,可是实验手册里却要我们装PB5,可是开发板提供的光盘里没有啊,是不是要我们自己去网上下一个PB,自己安装呢? 问题2:EVC4,和SDK有什么关系吗?为什么我在安装EVC4的时候看到它自己带了一个SDK,那为什么手册里说还要 ...… 查看全部问答> |
|
我最近准备做一下简易交通灯,利用的主控芯片是AT89C52,时间上是采用定时0的方式1来定时,采用定时器0中断,所采用的语言是C语言,因为定时器0的方式1最多计算65536次,因此我需要放一变量在中断处理函数里,每次相应一次中断后,就在中断处理 ...… 查看全部问答> |
|
UCB0I2COA中的地址是让主设备寻址到这个从设备的设备地址还是说是让主设备寻址的数据地址,寻址设备地址的在另外寄存器上? 假如说 UCB0I2COA中的是设备地址的话,那么读取的数据是从从设备哪个地址开始的,0X0吗?那样的话怎么读从设备某个特定地 ...… 查看全部问答> |




