【51微控制器】延時函式計算問題以及如何準確延時
阿新 • • 發佈:2018-12-30
幾種週期介紹
週期名稱 | 描述 | 時間 |
振盪(時鐘) | 微控制器提供時鐘脈衝訊號的振盪源的週期 | T=1/f |
狀態 | 振盪週期經二分頻後得到的 | 2T |
機器 | 在一個機器週期內,CPU可以完成一個獨立的 操作 | 12T |
指令 | 指CPU完成一條操作所需的全部時間 | 12-12nT |
指令:
1、MUL、DIV:僅有的4週期指令
2、包含DPTR和PC的指令均為2週期指令
3、所有的絕對跳轉和條件轉移指令,均為2週期指令
4、所有包括A暫存器的指令,均為單週期指令
5、位操作指令中,ANL和ORL是2週期指令
6、所有包含立即地址的指令,除INC direct及DEC direct外,均為2週期指令
7、剩下的均為單週期指令。
STC-ISP軟體檢視各操作用時以及延時函式
_nop_函式可以在keil軟體的C51->HLP->C51lib.chm文件中查閱 (授人以魚不如授人以漁)
延時函式計算
示例:
void 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.忽略變數定義,上述延時函式共需時間:921*z*12T
4.帶入T:921*12*T*z 約為 z ms
計算出現誤差的原因
1.軟體模擬時,函式呼叫的時候入棧出棧操作的耗時。
2.指令週期隨指令的不同而不同導致的誤差。
3.中斷的影響。
4.變數的範圍超過,從而與預計時間不一樣。
所以實際上我們應該只能算出估計值,根據最開始週期的資訊來計算延時函式中延時的時長。