在單片機中的浮點數編程

2021-01-21 電子產品世界
問題背景:

在使用8BIT單片機進行開發,不支持浮點數運算。但是開發必須用到sin,cos,arctan等浮點數函數。

本文引用地址:http://www.eepw.com.cn/article/201611/318614.htm

苦想了兩天,才發現,自己要當一回「計算機」。

單片機不支持浮點數,可是編程卻一定要用到小數。這時,只好自定義「定點小數」了。

所需的浮點數範圍有兩個區域-1~1,-60~60。精度就按小數點後2、3位了。

如果在高級語言中,我想定義的數組是

double arctantable[95]=

{

0.0174551,0.0349208, 0.0524078, 0.0699268, 0.0874887, 0.105104, 0.122785, 0.140541, 0.158384, 0.176327,

0.19438, 0.212557, 0.230868, 0.249328, 0.267949, 0.286745, 0.305731, 0.32492, 0.344328, 0.36397,

0.383864, 0.404026, 0.424475, 0.445229, 0.466308, 0.487733, 0.509525, 0.531709, 0.554309, 0.57735,

0.600861, 0.624869, 0.649408, 0.674509, 0.700208, 0.726543, 0.753554, 0.781286, 0.809784, 0.8391,

0.869287, 0.900404, 0.932515, 0.965689, 1, 1.03553, 1.07237, 1.11061, 1.15037, 1.19175,

1.2349,1.27994, 1.32704, 1.37638, 1.42815, 1.48256, 1.53986, 1.60033, 1.66428, 1.73205,

1.80405, 1.88073, 1.96261, 2.0503,2.14451, 2.24604, 2.35585, 2.47509, 2.60509, 2.74748,

2.90421, 3.07768, 3.27085, 3.48741, 3.73205, 4.01078, 4.33148, 4.70463, 5.14455, 5.67128,

6.31375, 7.11537, 8.14434, 9.51436, 11.43, 14.3007, 19.0811, 28.6362, 57.2899,

-57.2897, -0.0174551, 0.0174551, 57.2897, -57.2897,-0.0174551

};

在單片機中,我可不能這樣定義。會報錯的。

觀察數據後,我們發現整數部分要6bit,符號位要1bit,小數部分(0.99)110 0011(7bit),故一個浮點數,用2byte來表示,高8bit是符號位和整數部分,低8bit是小數部分。

0.0174551(0.02)在單片機中,可以表示為0x0002;

0.0349208,可表示為0x0003;

-57.2897,可表示為0xb91d;等等……

相關焦點

  • 單片機浮點數的實用快速除法介紹
    作為單片機程式設計師來說,在編寫程序時經常要檢驗程序中的浮點數運算結果是否正確,但手中又沒有合適的檢驗工具,非常麻煩。而一般單片機是沒有浮點數運算指令的,必須自行編制相應軟體。
  • 單片機浮點數的運算原理及表達方式
    打開APP 單片機浮點數的運算原理及表達方式 發表於 2019-04-18 15:38:39 單片機一般浮點數均採用士MxC的形式來表示
  • 在編程中,為什麼要把小數叫做浮點數?
    小數為什麼會被成為浮點數?有不少程式設計師雖然能夠很熟練的使用某種程式語言,但是對於小數為什麼會被稱為浮點數卻是不太理解。小數為何會被叫做浮點數?雖然這些程式設計師對於小數被稱作浮點數的問題並不理解,但是這並不影響程式設計師編程,或者可以說這種問題對於一個程式設計師的編程能力絲毫沒有影響。
  • 適用於高精度單片機小數計算的方法介紹
    在單片機的BCD增量算式,線性化處理等過程中,都會遇到一個共同的問題,那就是小數的運算。在單片機當中,對於小數的表現方法一般只有兩種,一種是浮點數一種是定點數。本文就將對單片機中的浮點數進行概述並對其彙編程序設計進行介紹。
  • 單片機的外部結構-引腳功能
    對Flash存儲器編程時,用於施加Vpp編程電壓。  看到這您對AT89S51引腳的功能應該有了一定的了解了,引腳在編程和校驗時的時序我們在這裡就不做詳細的探討,通常情況下我們也沒有必要去撐握它,除非你想自己開發編程器。
  • MCS-51單片機試題及答案
    10.若累加器A中的數據為01110010B,則PSW中的P=_________.  二、單項選擇題(在每小題的四個備選答案中,選出一個正確答案,並將正確答案的序號填在題幹的括號內。每小題1分,共10分)  1.MCS—51單片機的復位信號是( )有效。
  • 基於MXT8051單片機的發動機車載監控系統研究
    當改進工藝、增壓中冷、結構優化等傳統方法不足以滿足新標準時,基於微控制器的電子智能優化控制將成為新的曙光。  根據成熟的發動機控制理論,當發動機工作在較高轉速時,要求氣缸內的工作介質較早起燃才能實現較高的工作效率,而當工作在較高負載時,則需要每個工作循環燃燒更多的燃料吸入更多的氣體,可是一旦轉為從降低排放的角度來考慮的話,情況則完全相反,如果從產品可靠性出發,則又是一另番景象,從事發動機性能優化的工程師們在努力尋找某些參數的平衡點,基於發動機工作原理的複雜性,會發現可編程微控制器在這個領域有著極為廣闊的應用空間
  • 學校裡學不到的C語言教程之6:可怕的浮點數
    就這樣的工作環境下,有一天這位重量級的前輩突然坐到我身邊來開始講解編程中應該注意的事項。我當然不會想這是因為我自己的實力站住了腳跟,他們不得不接納這位新人 :) 不論怎樣,他們都不希望我搞砸了我負責的那部分大家都遭殃。所以他告訴我的知識點都是很真誠的,這其中我印象最深的就是浮點數的問題,坦率地說無論我對他們的看法如何,沒有他告訴我,恐怕其中的問題我要兩三年後才會知道。
  • 基於單片機的多功能電子萬年曆設計(一)
    系統的硬體設計與電路原理  電路設計框圖  系統硬體概述  本電路是由AT89S52單片機為控制核心,具有在線編程功能、低功耗、能在3V的超低壓工作。時鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,工作電壓為2.5V~5.5V。
  • 關於浮點數的細節問題
    1.計算機中浮點數的構成分為三個部分:符號位,指數位和小數位。符號位決定了這個浮點數的正負,指數位和小數位決定了這個浮點數的大小。2.IEEE為了讓浮點數可以表示所有的情況,所以把浮點數分為四種情況:規格化、非規格化、無窮大和NaN規格化是為了表示浮點數的一般情況。非規格化是為了表示0和非常接近0的浮點數。
  • 單片機最小系統組成電路及其作用
    例如P3.0和 P3.1又叫做RXD和TXD,它們有串口的作用,可以用來給單片機下載程序,也可以用來和電腦進行數據的收發,即串口通信。除32個IO口外,還有八個管腳:其中29~31號腳一般用得不多,暫不做介紹;40腳VCC、20腳GND、9號腳RST以及18、19號腳XTAL1、XTAL2很快就會在下面的單片機最小系統中進行詳細講解。什麼是單片機最小系統呢?
  • 第19 p,了解Python中的數據類型,了解整數與浮點數
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第19篇文章,第二階段的課程:Python基礎知識:Python中的數據類型介紹及整數、浮點數的講解。學習本課程,建議先看一遍:【計算機基礎知識】課程。
  • python浮點數表示專題及常見問題 - CSDN
    浮點數用來存儲計算機中的小數,與現實世界中的十進位小數不同的是,浮點數通過二進位的形式來表示一個小數。在深入了解浮點數的實現之前,先來看幾個 Python 浮點數計算有意思的例子:0.1 == 0.10000000000000000000001True0.1+0.1+0.1 == 0.3FalseIEEE 浮點數表示法這些看起來違反常識的「錯誤」並非 Python 的錯,而是由浮點數的規則所決定的,即使放到其它語言中結果也是這樣的
  • php浮點數和字符串
    有關浮點數的細節1:浮點數不應直接進行大小比較!先看一個現象:可見:浮點數直接進行比較是「不可靠的」。原因是:浮點數在內存中的二進位形式(最底層的形式),是不精確的,比如:那如果需要(其實這很常見)進行浮點數比較,該怎麼辦?考慮現實應用所需的精度要求的基礎上,來講他們轉換為整數後進行比較!
  • 單片機復位電路原理是什麼 單片機復位電路有哪些?
    那麼問題來了,單片機為什麼需要復位電路呢?單片機復位電路原理是什麼呢?單片機復位電路有哪些種呢?本文將一一為您解答~~~本文引用地址:http://www.eepw.com.cn/article/269787.htm一、單片機復位電路原理- -簡介復位電路,與計算機的清零按鍵類似,卻又存在不同。
  • 原來程式語言是這麼算的……
    但是,在光怪陸離的計算世界中,運算方式卻大相逕庭。我最近開始用 JavaScript 進行編碼,在閱讀數據類型時,我注意到 0.1 + 0.2 不等於 0.3 的奇怪行為。我向 Stack Overflow 尋求幫助,在上面找到了一些有用的帖子。如下圖所示:Stack Overflow 界面圖像。經過大量的研究和數學運算後,我得出結論,這不是錯誤。
  • 面向對象編程從小白到王者系列-04編程裡神奇的變量
    我們在前面已經通過自己的動手來搞定了一個個關卡,現在我們遇到的是編程當中一個讓人難以理解的知識點變量。變量這個名詞一下子聽到以後可能不太容易理解,那接下來我們就一起理解一下。其實這就是我們在生活中最常見的變量了。為什麼所料帶是生活中的變量呢?那籃子、盤、碗等容器類型的生活用品不是變量嗎,如果你能想到這個那就厲害了,這就是變量的分類了。下面我們先來看看變量的書面定義:變量是計算機語言中能儲存計算結果或能表示值的抽象概念。
  • 基於單片機的鐵路巡檢儀設計_基於單片機的心率測試儀 - CSDN
    基於51單片機的宿舍火警報警系統基於單片機的智能報警系統設計基於51單片機的報警系統實現網上轉載:本系統具備發送簡訊、接收簡訊,撥打電話、接聽電話等功能。
  • 單片機直流電機的pwm調速與控制設計
    圖中的Q1~Q4是功率三極體,其中Q1和Q2組成一個橋臂,其中Q3和Q4組成一個橋臂。每個功率三極體旁邊有一個續流二極體。當Q1和Q4打開時,直流電機的控制電流從A流向B,此時直流電機正轉;當Q2和Q3打開時,直流電機的控制電流從B流向A,此時直流電機反轉。這樣,通過Q1~Q4的控制就可以控制直流電機的轉向了。
  • CPU與單片機的復位電路的作用及基本復位方式
    在上電或復位過程中,控制CPU的復位狀態:這段時間內讓CPU保持復位狀態,而不是一上電或剛復位完畢就工作,防止CPU發出錯誤的指令、執行錯誤操作,也可以提高電磁兼容性能。