Ⅰ 在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]!='