Ⅰ 在51单片机的汇编环境里能处理浮点数吗
51处理浮点数是毕敬非常慢的,建议腊猜轻轮数型易不要用,非要用小数的话,那可以用整数替代啊,可以标记为小数就行了。c可以做到汇编也可以。你可以到网上查一下有没有相应的例子。
Ⅱ 51单片机编程如何把一个字符串里的数字提取出来并转化成浮点数
你这个字符串的形式是怎么样的?先字母后数字?还是随机的?如果单纯只是字母后就数据的话就直接判断字符的ASCII码,从数字的地方开始截取,把数字和小数点放到另一个数组里,用double atof(const char *nptr)函数转为浮点类型即可,如果你初始给的字符串是随机的那好像麻烦很多。。。
Ⅲ 51单片机怎么实现浮点运算
要先按装浮点库C51FPS.LIB,按装路径为:将 C51FPS.LIB 文件复制到 C:\Keil\C51\LIB\ 文件夹下面。
而后在程序中用浮点型变量float或double进行运算即可。
Ⅳ 51单片机能不能计算浮点数,支不支持浮点运算有人说能,有人说不能。
不能直接硬件计算浮点(就是所谓的FPU),只能通过程序库(调用函数)模拟完成,非常耗时!
Ⅳ C51单片机浮点数运算
因为没有电路,所以程序我就没法给你写,给你个思路.
第一,不知道你的a和b是什么类型的,如果是定义成浮点型,那么,可以这样写:
float f_Div = a/b;
如果两个有一个是整形的,那么,把整型强制转换成浮点型:
float f_Div = (float)a/(float)b;
注意,那个f_Div变量必须是float型,才能有小数产生
第二,你要进行显示,肯定要把各个位都取出来,这里面肯定有一个取模运算,就是"%",
对于浮点型,不运行取模运算的,所以,你必须把浮点型转换成整型,但是,不能强制转换,
比如: unsigned int I_Div = (unsigned int)f_Div;这是不可以的,你的小数部分就没有了.
所以,你必须要放大一定的倍数,根据你的要求,你是要保留三位,那么,这里还有个问题,你的
小数点之前有几位,决定了你小数点后面保留几位.
比如,你得到的结果是 1.2345,那么,你就保留1.23
如果你得到的结果是 12.345,那么,就保留12.3
如果你得到的结果是 123.45,你就只能保留123了
如果得到的结果是 0.123,你就只能保留 0.12
所以可以看出,你的浮点型结果整数部分有多少位,决定了你的小数能保留多少位,所以还要进行如下运算:
unsigned int i_Div = unsigned int)f_Div;;
unsigned char Dot_Bit = 0; //---这个变量用来表示在第几位上显示小数点,因为
//---通过下面的操作,已经把小数变成整数了
if(I_Div >= 100) //---表示前面有3个整数部分位
{
; //---那就没什么可操作的,unsigned int i_Div = unsigned int)f_Div;;就符合要求
}
else if (I_DIV >= 10) //---表示整数部分有2位
{
I_DIV = f_Div *10;
Dot_Bit = 1; //---在右数第2个地方显示小数点,也就是十位后显示小数点
}
else
{
I_DIV = f_Div *10;
Dot_Bit = 2; //---在右数第2个地方显示小数点,也就是最前面那位后面显示
}
void Display(void)
{
unsigned char Hundred = I_Div/100;
unsigned char TenBit = (I_Div/%00)/10;
unsigned char TenBit = I_Div%10;
....... //然后就开始显示了
}
Ⅵ 51单片机用汇编语言怎么处理浮点数比如做除法之后的得数,这个得数之后要再进行计算。
把小数乘以一定的值转换为整数,完成运算后再除以那凯信个值还原原来的数,就是这样。
直接用汇编写浮点盯并轮数的运算,难度太大了,这样的话用蔽卜C语言写好一些。
Ⅶ 求 51单片机浮点运算子程序 C51编程
你应该了解一下所用的C编译程序有没有带浮点库。如能选用一个带浮点库耐宴的C编译程序,就行了。
否则,你要自己编写浮点子程序的话,最好也不应该用C语言编,而应该用汇编来编,最后连接时再和你的C语言的主程序连接在一起。
因为,如过你的浮点子程序都是直接用C语言写的,那效率就太低了。在51单片机这样的环境下,恐怕大多数的应用,都会嫌它太笨重,不合要求。
你说你过去用汇编语言“直接调用子程序”,请问那些子程序是自己编的呢?还是某个开发系统提供的标准子程序?
如果是你自己编的,那么,你只要了解一下C51中函数的出口入口的寄存器规则,将你的子程序改一下,使他符合这些规则,即可。
如果那些子程序是别人提供的标准子程序,那么您可以了解一下,那些子程序的入口、出口条件是否和C语言的要求兼容,如果兼容,那就可以直接连接了。
【补充一点看法】
从您的问题补充来看,您的应用中对精度的要求铅亩桐不高,完全可以采用定点的Q格式,不用浮点运算。最合理。
假如用浮点,即使浮点子程序都是汇编编的,效率也会比定点的槐坦Q格式差很远(一、两个数量级)。如果子程序本身再用C语言来编,那就更不知差到什么程度了。
Ⅷ 用51单片机通过串口在PC机的超级终端上显示浮点数float类型的,该怎么写,本人菜鸟,谢谢了
先把float数据转化成字符格式,在用串口发送到PC即可!
Ⅸ 51单片机 单精度浮点数 float 怎样输出
float a;
int b
b=a*10; //乘10化整
s1=b/100; /迹差/十位
s2=b/10%10 +10; //滚州改个大判位,加小数点
s3=b%10; //小数
Ⅹ 51单片机如何编程将uchar code gcode[]="G1 X0.2 Y0.2 Z6.3 F200.37 E55.3";中X,Y,Z值提出变成浮点数
/*楼主可以这样试雀御一下,首先字符串就是字符数组的末尾加一个‘ ’,我们可以通过数字下标操作,键消来提取里面的数据,通过判断 ‘X’ ‘Y’ ‘Z’,进而找到后面的数据,由于X数据后面都有一个 空格,那就可以通过X与空格来截取其中的字符数据,再通过字符转数字,再转成浮点数
*/
#include<reg51.h>
charcodegcode[]="G1X5.3Y0.2Z6.3F200.37E55.3";
charX_Array[3];//存X后面的字符
floatX_Float=0;//X浮点数
voidmain(void)
{
chari=0;//gcode[i]
charj=0;//X_Array[j]
/***************取字符******************/
while(gcode[i]!='