久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 如何把float類型的變量發送到串口調試助手,float在單片機中的存儲方式. [打印本頁]

作者: piaolin    時間: 2015-10-29 11:52
標題: 如何把float類型的變量發送到串口調試助手,float在單片機中的存儲方式.

有位小伙伴問,怎么把float類型的變量發送到串口調試助手?在這里給大家統一說一下。
什么時候用float類型的變量?
單片機計算數據,當用到小數的時候,我們一般就定義一個float類型的變量。
float類型占用幾個字節?
我們知道,char占用1個字節,int占用2個字節。那么float類型的變量占用幾個字節呢?答案是4個。
float類型變量存儲遵循IEEE 754標準,關于IEEE754標準,你可以去百度,不過你看了也會頭大,不一定能看懂。看懂看不懂,都不重要了。
那么,比如,3.141這個數在單片機中存儲的4個字節分別是多少呢?
你可以借助一個軟件(浮點數十六進制轉換器)來看,
如下所示:
浮點數:30141
十六進制:單精度float:40490625



如果你不想用這個軟件,可以把4個字節發送到串口調試助手來看。不過,float類型的變量是不能進行位移運算的。所以,假如你定義了一個x變量,當你寫語句UART_Send(xxx>>24);UART_Send(xxx>>16);UART_Send(xxx>>8);UART_Send(xxx);的時候,編譯器會報錯。而當你用int把float強制轉換后,就會只剩下整數部分,實際上,4個字節的內容已經改變。
正確方法:
用c語言關鍵字union來解決。
union xxx
{
char c[4];
float f;
}y;
定義一個“共用體”xxx,y作為“共用體變量”,里面再定義一個char類型的變量數組c[4]和float類型的變量f。
根據union的定義,里面的變量占用同一個內存地址。所以,c[4]和f的內存地址是一樣的,說的再通俗一點,就是c[4]的4個數實際上就是f的四個字節。
接著前面提出的問題。把3.141給了f,即f=3.141,那么,你就可以把c[4]數組的4個字節發送到串口調試助手了。
y.f=3.141;
UART_Send(y.c[0]);
UART_Send(y.c[1]);
UART_Send(y.c[2]);
UART_Send(y.c[3]);


作者: moyuqilin    時間: 2016-2-2 15:30
我把這個4字節發出去以后,串口助手接受,收到的是字節,怎么做才能讓串口助手也能顯示小數呢
作者: hanwenli123    時間: 2019-5-21 16:50
moyuqilin 發表于 2016-2-2 15:30
我把這個4字節發出去以后,串口助手接受,收到的是字節,怎么做才能讓串口助手也能顯示小數呢

把flaot型數據如1.23,分別取出第個數據位,包括小數點,依次放到數據a[0]-a[3]中,發送到串口,串口調試助手的十六顯示的勾去掉,就顯示小數了。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一级片免费在线观看 | 成人免费在线观看 | 美女视频黄色片 | 亚洲超碰在线观看 | 国产精品久久久久久久久久三级 | 亚洲 精品 综合 精品 自拍 | 亚洲精品乱码久久久久久久久 | 国产二区三区 | 日本视频中文字幕 | 日韩精品一区二区三区中文在线 | 国产一区二区在线免费观看 | 四虎永久免费地址 | 日日噜噜噜夜夜爽爽狠狠视频, | 欧美大片一区二区 | 99爱国产 | 久草在线在线精品观看 | 91原创视频 | 狠狠色香婷婷久久亚洲精品 | 91影视 | 国产成人久久精品一区二区三区 | 91精品国产综合久久婷婷香蕉 | 亚洲视频一区二区 | 日韩精品在线观看视频 | 亚洲国产一区二区三区 | 影音先锋中文字幕在线观看 | 色就是色欧美 | 亚洲免费视频一区二区 | 欧美一区永久视频免费观看 | 国产精品一二三区 | 天天草天天干天天 | 国产一二区视频 | 欧美一级免费 | 久久看看 | 国产一区二区三区 | 午夜天堂精品久久久久 | 精品视频在线观看 | 欧美一级片免费看 | 麻豆av一区二区三区久久 | 欧美精品一区二区三区一线天视频 | 91麻豆精品国产91久久久资源速度 | 欧美日韩不卡 |