【51單片機】延時函數(shù)計算問題以及如何準確延時
幾種周期介紹
周期名稱 | 描述 | 時間 |
振蕩(時鐘) | 單片機提供時鐘脈沖信號的振蕩源的周期 | T=1/f |
狀態(tài) | 振蕩周期經(jīng)二分頻后得到的 | 2T |
機器 | 在一個機器周期內(nèi),CPU可以完成一個獨立的 操作 | 12T |
指令 | 指CPU完成一條操作所需的全部時間 | 12-12nT |
指令:
1、MUL、DIV:僅有的4周期指令
2、包含DPTR和PC的指令均為2周期指令
3、所有的絕對跳轉(zhuǎn)和條件轉(zhuǎn)移指令,均為2周期指令
4、所有包括A寄存器的指令,均為單周期指令
5、位操作指令中,ANL和ORL是2周期指令
6、所有包含立即地址的指令,除INC direct及DEC direct外,均為2周期指令
7、剩下的均為單周期指令。
STC-ISP軟件查看各操作用時以及延時函數(shù)
_nop_函數(shù)可以在keil軟件的C51->HLP->C51lib.chm文檔中查閱 (授人以魚不如授人以漁)
延時函數(shù)計算
示例:
[cpp] view plain copyvoid delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=0;j<921;j++);
}
分析:
1.先計算你單片機的振蕩(時鐘)周期 T= 1/晶振(11.0592MHZ)
2.一次i--操作為12T
3.忽略變量定義,上述延時函數(shù)共需時間:921*z*12T
4.帶入T:921*12*T*z 約為 z ms
計算出現(xiàn)誤差的原因
1.軟件仿真時,函數(shù)調(diào)用的時候入棧出棧操作的耗時。
2.指令周期隨指令的不同而不同導(dǎo)致的誤差。
3.中斷的影響。
4.變量的范圍超過,從而與預(yù)計時間不一樣。
所以實際上我們應(yīng)該只能算出估計值,根據(jù)最開始周期的信息來計算延時函數(shù)中延時的時長。
編輯:admin 最后修改時間:2018-05-18