51单片机如何将二进制小数转换为十进制

作者&投稿:战亲 (若有异议请与网页底部的电邮联系)
51单片机二进制数转换成十进制数一段精典小程序,谁来帮我分析一下,再下新就是搞不明白为什么!!!!~

不推荐把这个程序弄懂,它只是一个转换程序,知道怎么用就行了,而且在汇编中才用。
想花时间看懂的话,注意看明白 RLC A,这句语言还影响了标志C位,C位带到了下面的ADDC进位了计算。

以1101为例转化为BCD值,RLC A 是把16位2进制向高端移出一位,举例的数为0000000000001101前位全为0不管它,我们从1101开始。
1101第一位是1,1移动到C位经过ADDC A R4 运算 R4=0x01;
1101第二位是1,1移动到c 位经过ADDC A R4 运算 R4=0x03;
1101第三位是0,0移动到c 位经过ADDC A R4 运算 R4=0x06;
1101第四位是1,1移动到C位经过ADDC A R4 运算 R4=0x13;
1101 “=”13

二进制的补码转换方式是“取反加一”。
如果你只是要二进制的数值的话 减一取反不就好了?

如果不想查表,还有个方法,小数=hex/16,那么先放大,然后移位小数点。
小数*10000 = hex*10000/16 = hex*625,得到一个双字节整数,再转为BCD,即为小数部分,注意此时是【4】位小数。

这个方法适用于任意小数的整型计算,只需要注意计算过程的中间结果不要溢出就行了

这问题太简单了……
如果读取DS18B20获得的温度数据是12位的,那这数据的高8位就是温度值的整数部分,低4位就是温度的小数部分。如果你只想要温度的整数值,那就将12位的温度数据右移4位就可以了。
比如温度数据是 0x2A9,所以温度的整数部分就是0x2A=42℃,温度的小数部分是0x9=0.5625℃,所以0x2A9=42.5625℃。

单片机内存运行均为二进制。处理十进制数有以下几个步骤:
1、将输入的十进制转换为二进制;
2、有CPU程序处理,得到相应结果;
3、将输出的二进制结果转换成十进制。
二进制小数从左到右的1表示十进制数2的n(-1,-2,-3,-4...)次幂。
例如:
二进制小数1001转换为十进制如下
2^(-1)+2^(-4)=0.5+0.0625=0.5625

四位小数部分XXXX,对应十进制的小数。
1000,对应0.5;
0100,对应0.25;
0010,对应0.125;
0001,对应0.0625。

0110,那就对应0.375。

逐位判断,把它们对应的值,加起来即可。

51单片机如何将二进制小数转换为十进制

我来答
共2个回答 >

KatherineLoveS

这问题太简单了……如果读取DS18B20获得的温度数据是12位的,那这数据的高8位就是温度值的整数部分,低4位就是温度的小数部分。如果你只想要温度的整数值,那就将12位的温度数据右移4位就可以了。比如温度数据是0x2A9,所以温度的整数部分就是0x2A=42℃,温度的小数部分是0x9=0.5625℃,所以0x2A9=42.5625℃。


PIC单片机C语言编程,二进制如何转换成十六进制。
也就是把一个int型按逐个字符转换成了char型,存在数组中的是字符型,ASC码 这样就能把字符的ASC码直接写入屏显示了。2.把ADC的每一位值抠出,再每位数加上'0':如ADC=123,a=ADC\/100=123\/100=1,A=a+'0',就得到ADC 的最高位字符,就是'1'.b=ADC\/10%10=123\/10%10,就得到ADC 的第二...

单片机中,如何将一个16进制数转为2进制的形式输出 比如a=0x9C,但最 ...
呵呵 这也太简单了吧 俺来告诉你方法:1 将该数据先送入寄存器R4中,如(R4)=0x9C=10011100,2 R4的内容送给(A)3使用带进位的左循环指令 将(A)中内容左移一位送给进位位C,(A)内容送给(R4)保存 4 30H送给(A) 使用 ADDC A,#0 指令 求出要发送的二进制数的第一位数...

各位,如果将一个二进制码从单片机P0口输入,要想通过单片机将这个二进制...
P0^6;sbit P0_7 = P0^7;unsigned char sum = 0;void main(){ sum = P0_0 + P0_1 * 2 + P0_2 * 4 + P0_3 * 8 + P0_4 * 16 + P0_5 * 32 + P0_6 * 64 + P0_7 * 128; \/\/ sum就是二进制读入之后转化成的十进制数 \/\/ 不过sum的范围是0-255} ...

8bit二进制数字如何转换为bcd码?
在单片机里面,如:显示个温度值,这时,要取一个数的个位、十位、百位,可以用\/和 %(求商和求余)来解决。但是,在FPGA里面用求商和求余将会非常消耗资源,这样就必须用到二进制转BCD码了,这里介绍一种简单的加3移位算法。注:B代表二进制,D代表十进制,0x代表十六进制,BCD为BCD码,下同。1...

在单片机中,ANL和ORL在数与数之间是怎么计算的??
比如说07H(0000 0111)和A1H(1010 0001)进行位与运算,就一位一位地与:0000 0111 1010 0001 --- 0000 0001 就变成了01H。代码可以写成:A=07H ANL A, #A1H 运行出来A里面就是01H。向左转|向右转 2、ORL 位或运算,就是二进制数字一位一位进行或运算: 0+1=1, 1+1=1...比如说...

51单片机怎样处理偏移二进制编码?
以8位二进制数来说明。看看插图,即可知道如何处理了。看出来了吗?只要把符号位取反,就大功告成了。这是多么简单的事!

芯片(单片机)是怎么认识程序转化来的二进制,0是低电平,1是高电平使...
手机不再是单纯的手机,它是有情感的智能机器人,而它的芯片被别人控制,我们不仅仅要学会和人相处,更要学会和手机处理好关系,它一不高兴,就有办法给我们设置阻碍,天下之大,能人倍出,望老天爷快速研究出新的东西来智胜它吧,不想被手机控制,望转发!保护自己自己的隐私是每个公民的权利!

KEIL怎样表示二进制!51.单片机
用KEIL写51的汇编程序,可以用二进制数字后加“B”表示,比如0x2A = 00101010B 而KEIL的C编译器不支持写二进制数,所以KEIL的C程序不能直接用二进制数表示。但如果你自定义一个#define B00101010 0x2A 这句话,那下面的程序就可以直接使用B00101010来表示了。把这个些写进一个头文件里,用的...

数学\/计算机\/单片机:这个算法是如何实现8位二进制数高低位交换的呢...
首先《,》是左移,右移运算符01011001<<4=10010000,同理01011001>>4=00000101,|是按位或操作符,则10010000|00000101=10010101。实现了8位二进制数高低位交换

在单片机c语言中如何将8位二进制数保留两位小数??
那么当前的电压就是0xo0ff*5000\/4096 (mv)=311mv=0.311v,至于怎么显示,那要看你的数码管位数以及要显示的数据范围。可以用定小数点显示,也可以用动态小数点显示。思路都是把当前小数换成需要的整数,保留固定的有效数字。然后去显示小数点。思路就是这样。希望能帮到你。

拜泉县15548649592: 51单片机如何将二进制小数转换为十进制 -
曾维惠博: 如果不想查表,还有个方法,小数=hex/16,那么先放大,然后移位小数点.小数*10000 = hex*10000/16 = hex*625,得到一个双字节整数,再转为BCD,即为小数部分,注意此时是【4】位小数.这个方法适用于任意小数的整型计算,只需要注意计算过程的中间结果不要溢出就行了

拜泉县15548649592: 51单片机实现二进制转换成十进制的程序 -
曾维惠博: DA转换,如果是八位精度就是一个字节咯.假使存于30h.mov a,30h mov b,#100 div ab mov 31h,a mov a,b mov b,#10 div ab mov 32h,a mov 33h,b ret 这样,十进制的百十个位分别存在31h,32h,33h中

拜泉县15548649592: 将一个8位二进制数转换为10进制的单片机程序,越简单越好 -
曾维惠博: ;51单片机汇编语言 ;入口20h一个8位二进制数 ;出口21h22h4位10进制bcd码 bcd:mov 21h,#00h mov 22h,#00h jnb 20h.7,bcd1 mov 22h,#01h mov 21h,#28h bcd1:jnb 20h.6,bcd2 mov a,#64h acall add bcd2:jnb 20h.5,bcd3 mov a,#32h acall add ...

拜泉县15548649592: 51单片机用C语言怎么样把八位二进制转换成十进制 -
曾维惠博: //*********************************************************************/ // 函数名称:void Htod(ulong L) // 将int型二进制数 L 转换为单字节BCD码,将对应的ASCii码存入显示区 Buf // 转换原理:除十取余 // 入口参数:L是int型变量 d 是位数 // 返回参数:无...

拜泉县15548649592: 51单片机中的 2进制补码如何转换成10进制,包括小数(C语言),各位求解!!谢谢 -
曾维惠博: 二进制的补码转换方式是“取反加一”. 如果你只是要二进制的数值的话 减一取反不就好了?

拜泉县15548649592: 请给一个详细的51单片机16位2进制转化为10进制数程序例子, -
曾维惠博: uint a,uint b,uint c;//a为(16位二进制变量),c位十进制变量 b=a/16; //b=a的十位数(求商) c=a%16; //c=a的个位数(求余) c=b*10+c; //c=(b*10)+c 清楚了吗

拜泉县15548649592: 怎么把单片机端口二进制状态转换为十进制 -
曾维惠博: 如果是转换为BCD码的话,很简单,如下:MOV A,P0 MOV B,#100 DIV AB MOV R2,A XCH A,B MOV B,#10 DIV AB MOV R3,A MOV R4,B RET

拜泉县15548649592: 单片机怎样把十六位二进制转为十进制(用c语言) -
曾维惠博: 16位二进制数范围0-65536,转换成十进制数位j:(TH*256+TL)/10000得万位数字,(TH*256+TL)%10000/1000得千位数字……………………

拜泉县15548649592: 单片机c51编程,将带小数的二进制转换为十进制,如0000 0000 101.0 1010 转换为十进制,小数,整数分开放 -
曾维惠博: 用c 编一个算了,汇编麻烦一点.如要汇编再向我要吧. #include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int sbit key=p3^2;//**********************************函数声明********************************************// ...

拜泉县15548649592: 51单片机二进制数转换成十进制数一段精典小程序,谁来帮我分析一下,再下新就是搞不明白为什么!!!!
曾维惠博: 不推荐把这个程序弄懂,它只是一个转换程序,知道怎么用就行了,而且在汇编中才用.想花时间看懂的话,注意看明白 RLC A,这句语言还影响了标志C位,C位带到了下面的ADDC进位了计算. 以1101为例转化为BCD值,RLC A 是把16位2...

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