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