1. 程式人生 > >C51常用延時程式

C51常用延時程式

在一些場合下,我們需要對微控制器進行延時,我之前學的是彙編,沒有感覺到延時很難控制。使用C語言寫程式後感覺到程式好寫了,可以一塊一塊寫,但是對相對精確的延時卻比較頭痛。使用微控制器的定時器延時很精確,在時間長的情況下使用,這涉及到定時器初值的載入,定時器開啟,和通過軟體查詢定時器溢位,對於短暫延時麻煩了寫。本篇僅僅就使用小程式延時進行說明

1>短暫延時思路一

unsigned char i;

***************************************************************************************************************

for(i=0;i<n;i++)//本句   延時時間  n*3+2個機器週期。

可以通過keil編譯器設定斷點,設定好晶振頻率,通過除錯判斷該句實際執行時間!使用後斷點時間減去該斷點時間就是本句執行時間。

****************************************************************************************************************

詳情請諮詢:                                                 http://shop108408772.taobao.com/

****************************************************************************************************************

2>短暫延時思路二

void Delay10us( ) {     //這是延時10個機器週期的函式
_NOP_( );
_NOP_( );
_NOP_( );
_NOP_( );
_NOP_( );
_NOP_( );
}

Delay10us( )函式中共用了6_NOP_( )語句,每個語句執行時間為1T。主函式呼叫Delay10us( )時,先執行一個LCALL指令(2 T),然後執行

6_NOP_( )語句(6 T),最後執行了一個RET指令(2 T),所以執行上述函式時共需要10 T

注:T表示機器週期

通過編譯軟體先將C語言翻譯成組合語言,我們可以對照指令執行時間,手動計算出延時程式所執行的機器週期數,當然麻煩一些了。

*******************************************************************************************************************

詳情請諮詢:                                                 http://shop108408772.taobao.com/

*****************************************************************************************************************