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),然後執行
注:T表示機器週期
通過編譯軟體先將C語言翻譯成組合語言,我們可以對照指令執行時間,手動計算出延時程式所執行的機器週期數,當然麻煩一些了。
*******************************************************************************************************************
詳情請諮詢: http://shop108408772.taobao.com/
*****************************************************************************************************************