⑴ 單片機模擬供水系統 知道其傳遞函數是一階慣性加延時 怎麼把傳遞函數變成數學公式在單片機中編程
傳遞函數一般表示為H=(??)的形式,把它變為y(n)=x(n)y(n-1)....形式的差分方程,這個形式的數學表達式就比較容易用程序寫出來了,可以用數組來記錄查分方程中要用到的x(n)和y(n-?)
⑵ 51單片機,c語言寫程序,什麼數學運算都可以嗎加減乘除,對數,指數,三角函數,平方,根號,立方,
KEIL C51 有個數學函數庫(和C語言的 數學函數庫類似)
指數,三角函數,平方,開方,立方都有的。具體可以看 相關的資料。
數學函數庫 需要看頭文件MATH.H
例如:
1.指數函數 float exp(float x)
2.對數函數 float log(float x) ,float log10(float x)
3.平方根:float sqrt(float x)
3.三角函數 :
float cos(float x),float sin(float x),float tan(float x)
float acos(float x),float asin(float x),float atan(float x),float atan2(float y, float x)
float cosh(float x),float sinh(float x),float tanh(float x)
等很多了,具體去看相關的資料吧
希望我的回答對你有所幫助,很高興和你一起討論單片機編程技術。
⑶ 如何用單片機C語言進行三角函數運算最好給出代碼!
使用數學頭文件math.h,裡面有你需要的三角函數,不過要注意使用的角度都是以弧度為單位的。
⑷ 單片機用C編程時定時器部分的 TH0=(65536-50000)/256;TL0=(65536-50000)%256;是什麼意思
今天剛剛在自學定時器這塊,終於搞懂了@.@!
方式1為16位的定時器/計數器,對定時器T0來說是分成兩個寄存器:TH0為高八位,TL0為低八位,組成了16位的定時器,當低位TL0計滿就向高位TH0移一個數,然後清零。
以12Mhz的晶振來說,機器周期是1us,計滿TH0、TL0就需要216-1個數,再來一個數就「溢出」產生中斷,一次溢出也就是65536us,約等於65.5ms,如果要定時50ms的話就要給他們裝一個預裝值(初值),總值-需要值=預裝值.
也就是65536-50000=15536,預裝後,定時器從預裝值開始加值,定時器溢出中斷後,會重新從預裝值開始加值加到50ms就再產生中斷,從而達到了定時的目的。如果要定時1s就可以讓定時器中斷1000ms/50ms=20次。
另外一點,TH0和TL0中應該裝入的總數是15536,然後把15536對256求模:15536/256=60裝入TH0中,把15536對256求余:15536%256=176裝入TL0中,因為這是兩個八位28*28的容器。那麼為什麼要介入256呢?其實並不難理解,做一下10——16進制的換算就知道了,256(D)=0100(H),這里01就是高8位的數據,00就是低8位的數據,通俗點說,15536(D)里有多少個256,就相當於高8位有多少數值,就是除的關系了,商存入高8位寄存器後餘下的數存入低8位即可.所以就有了:
TH0=(65535-50000)/256
TL0=(65535-50000)%256
如果是直接賦值TH=B8;TL=00,是編程者算過後填寫進去的:
TH0=0xB8;
TL0=0x00;
具體是如何計算的呢?
65536-x=B800(16進制)= 47104(D)
x= 18432us=18.43ms=0.018s
(以上根據2位很厲害很厲害大師的帖子匯總出來的)