導航:首頁 > 操作系統 > 51單片機怎麼打浮點

51單片機怎麼打浮點

發布時間:2023-03-18 19:53:27

Ⅰ 在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]!='')
{
switch(gcode[i])
{
chark=0;
case'X':
for(;gcode[++i]!='';)
{
X_Array[k]=gcode[i];
k++;
}
break;
//case'Y':
//{…………}
//case'稿歲知z':
//{…………}
default:
break;
}
i++;
}
/***************字元數變浮點數******************/
while(j<3)
{
switch(j)
{
case0:
X_Float=X_Array[j]-'0';//個位
break;
case1:
break; //小數點
case2:
X_Float+=(X_Array[j]-'0')/10;//小數點後一位
break;
}
j++;
}
while(1);
}
閱讀全文

與51單片機怎麼打浮點相關的資料

熱點內容
一加7pro文件夾data 瀏覽:424
程序員淋雨 瀏覽:947
python輸出數字序列中的空格 瀏覽:78
怎麼將pdf文件大小 瀏覽:734
氧原子相對分子量演算法 瀏覽:988
加密機為什麼是安全的 瀏覽:451
單片機拼音輸入法 瀏覽:789
蘋果筆記本t2加密晶元怎麼打開 瀏覽:796
安卓如何把手機投屏至電視 瀏覽:739
方舟編譯器現在可提速哪些軟體 瀏覽:60
微信加密為什麼是黑屏 瀏覽:473
android去電狀態 瀏覽:604
蘋果13如何加密視頻 瀏覽:815
linuxweblogic緩存 瀏覽:69
雲伺服器不同地域 瀏覽:946
python鬧鍾怎麼打 瀏覽:686
虛擬主機伺服器有什麼區別 瀏覽:833
演算法與程序的奧秘章節檢測 瀏覽:378
找pdf 瀏覽:530
與伺服器連接斷開如何處理 瀏覽:833