1. 程式人生 > >【51微控制器】延時函式計算問題以及如何準確延時

【51微控制器】延時函式計算問題以及如何準確延時

幾種週期介紹

週期名稱 描述 時間
振盪(時鐘) 微控制器提供時鐘脈衝訊號的振盪源的週期 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.變數的範圍超過,從而與預計時間不一樣。

所以實際上我們應該只能算出估計值,根據最開始週期的資訊來計算延時函式中延時的時長。