若時鐘晶振的振盪頻率為fosc,則振盪週期 tosc=(1/fosc)。
如:晶振頻率為12mhz,則振盪週期 tosc=(1/12us)。
對於不同的晶元採用的機器週期各不相同,主要分為:12t、6t、4t、1t等等。
如51系列微控制器常見的12t機器週期,每個機器週期占用時間為(12 * 時鐘週期)。
依此類推,6t占用的時間為(6 * 時鐘週期)。
對於語句:
for(a=n;a>0;a--);
其延時的大小計算如下:
delay_time = [(a*2)+3] * 機器週期
delay_time = ([(a*2)+3] + 5) * 機器週期
例如 :晶振為12mhz、時鐘週期為12t的微控制器,下面for迴圈語句:
for(a=50;a>0;a--)
for(b=10;b>0;b--);
其延時為:
delay_time = [(10*2 +3)*50+3]*(1/12)*12 us = 1153us
最後 再加上 5us * 12/12us 程式呼叫延時的時間
其中 1/12 為晶振決定的機器週期,最後面的 12 是指時鐘週期為 12t。
// 部分常用的延時程式
#define u8 unsigned char
/* 小於4us的延時直接使用_nop_();實現
*/void delay_1ms()
void delay_10us()
void delay_1s()
51微控制器彙編延時計算詳細分析
晶振頻率 12m 一 原程式 delay mov r7,200 d1 mov r6,125 d2 djnz r6,d2 djnz r7,d1 ret分析過程 delay mov r7,200 r7 200 執行需1us d1 mov r6,125 r6 125 1us d2 djnz r6,d2 r...
51微控制器延時函式
c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的 在使用時應該使用unsigned char作為延時變數。以某晶振為12mhz的微控制器為例,晶振為12mhz即乙個機器週期為1us。一.500ms延時子程式 程式 voi...
51微控制器延時函式
c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的 在使用時應該使用unsigned char作為延時變數。以某晶振為12mhz的微控制器為例,晶振為12mhz即乙個機器週期為1us。一.500ms延時子程式 程式 voi...