C語言的延時問題 延時時間怎麼算

2025-07-08 22:50:10 字數 3724 閱讀 3264

1樓:網友

一般cpu主頻確定了之後,每秒中執行的指令數也就確定了,而迴圈延時是做自減運算,這個運算在一般情況下是單指令週期完成的,那麼根據你迴圈要做多少次減法乘以每條指令執行週期得到延時的約值,其他呼叫函式引數入棧、賦值、判斷這些一般是固定值,可以先不考慮計算在內了。

c語言delay延時時間怎麼算?

2樓:陳豐登曉星

這得看你的cpu執行一條指令得多久,像微控制器89c51一般一條1us

然後再乘以迴圈次數就行了。

在c語言程式中,延時函式的時間是怎麼算的?

3樓:植子昂戶嘉

所謂的延時程式,就是讓程式進入一段無效迴圈,達到延時目的有乙個延時參數列的。

下面是乙個10ms延時子程式(12mhz)void

delay10ms(void)

4樓:閻吉敏郎諾

這個是和你機器的運算速度有關的。

你要計算出這個函式用了多少時間就要用時間函式,我很久沒用了。

#include

voiddelay()

end=time(null);

printf("%f",difftime(end,start));

/time_t是在標頭檔案中定義的,可能是個結構體型別裡面的成員定義了一些時間的單位,如年、月、日。在這裡呼叫這個結構體定義2個變數;

start=time(null);

在程式結束的時候再給另乙個變數賦值,值等於當前的系統時間。

difftime(end,start)函式difftime();是double型別,用來計算執行的時間,用第乙個引數的時間減去第二個引數的時間,得到的值就是執行用了多少時間。單位為秒。

c語言延時函式delay,怎麼算延時??

5樓:向日葵

下面是delay 函延遲函式里執行的都是空語句,也就是說通過迴圈執行空語句來達到延遲的目的。每執行一條語句,即使是空語句都要耗費電腦一些處理時間的,就是因為這個,在延遲函式里寫一些無關緊要的東西,用來浪費電腦處理時間,從而達到延遲目的。數原型:

原型:void delay(unsigned int ndelay){unsigned int i,j,k;

for ( i=0;i

功能:短暫延時。

6樓:網友

就是用晶振頻率算cpu指令週期,再算delay迴圈中有幾條**,需要多少個指令週期。除一下可以算個大概。具體你可以結合硬體資料來算。

但是用delay函式來延遲不止和cpu指令週期有關,還和你是否使用了作業系統用了哪種作業系統有關。總之受影響的因素很多,做不到特別精確的。

7樓:做而論道

c語言是高階語言,可以執行在不同的硬體系統、及作業系統之下。

它的執行時間,沒有固定的公式,只能在系統中執行,測試出結果。

8樓:網友

兩個for迴圈巢狀 執行k++;

計算機運算需要一定的時間,迴圈的次數越多消耗的時間越多。

但具體的時間不一定的,每臺電腦的效能不一樣,執行速度也不同的。

9樓:網友

每條指令執行都需一定的時間(具體多少可查晶元手冊),假如 ndelay=1024的話,則這段程式要執行到ndelay=0才退出for迴圈,這段用去的時間,就相當於延時了。

c語言delay函式延時計算

10樓:小夏在深圳

c語言delay函式延時計算源**如下:

#include ""

void delay()

time_t start,end;

start=time(null);

unchar i;

while(z--)

for(i=0;i<121;i++)

end=time(null);

printf("%f",difftime(end,start));

11樓:網友

你 的程式有問題額。

void daly()

你可去看看微控制器的時鐘訊號產生電路中的有關。

節拍:指振盪脈衝週期。

狀態:振盪脈衝盡過2分頻後,就是微控制器時鐘訊號的週期,定義為狀態,乙個狀態等於兩個節拍。

機器週期:微控制器採用定時控制方式,有固定的機器週期,乙個機器週期等於6個狀態,機器週期=6個狀態=12個節拍。

當振盪脈衝頻率為12mhz時,乙個機器週期為1微秒,振盪脈衝頻率為6mhz,乙個機器週期為2微秒。

資料型別中unsigned char為無符號字元型值域是在0~~~255範圍裡。

在上面我設的是60次的迴圈,且晶振是約在12mhz,那麼可以看出我們的算值是用60x1微秒,即可得到我們所要的延時值啊。

12樓:德繡梓

這個問題,我最近也是相當的困惑啊,希望會的朋友幫忙解答一下啊。

c語言延時程式中,延時時間是如何計算出來的. (假如我想延時1s該如何計算?cpu晶振頻率11。

13樓:歪歪爾奇

你這個是匹配波特率所用的晶振,機器週期只是約等於1us。首先你要延時多長時間,us級別的必須使用匯編,c誤差很大,10-100us級別的可以用c控制,單必須考慮c出棧入棧時間。ms以上的用時間除以機器週期(除以你則個1us是不行的,誤差大)。

另外,看著你好像用的是keil,keil裡邊單步除錯裡邊不是有時間嗎,你可以看一下算算cpu空跑的次數,很簡單。

14樓:網友

在c檔案中通過使用帶_nop_( 語句的函式實現,定義一系列不同的延時函式,如delay10us( )delay25us( )delay40us( )等存放在乙個自定義的c檔案中,需要時在主程式中直接呼叫。如延時10 μs的延時函式可編寫如下:

void delay10us( )

delay10us( )函式中共用了6個_nop_( 語句,每個語句執行時間為1 μs。主函式呼叫delay10us( )時,先執行乙個lcall指令(2 μs),然後執行6個_nop_( 語句(6 μs),最後執行了乙個ret指令(2 μs),所以執行上述函式時共需要10 μs。 可以把這一函式當作基本延時函式,在其他函式中呼叫,即巢狀呼叫\[4\],以實現較長時間的延時;但需要注意,如在delay40us( )中直接呼叫4次delay10us( )函式,得到的延時時間將是42 μs,而不是40 μs。

這是因為執行delay40us( )時,先執行了一次lcall指令(2 μs),然後開始執行第乙個delay10us( )執行完最後乙個delay10us( )時,直接返回到主程式。依此類推,如果是兩層巢狀呼叫,如在delay80us( )中兩次呼叫delay40us( )則也要先執行一次lcall指令(2 μs),然後執行兩次delay40us( )函式(84 μs),所以,實際延時時間為86 μs。簡言之,只有最內層的函式執行ret指令。

該指令直接返回到上級函式或主函式。如在delay80μs( )中直接呼叫8次delay10us( )此時的延時時間為82 μs。通過修改基本延時函式和適當的組合呼叫,上述方法可以實現不同時間的延時。

在c語言中如何讓程式延遲一定時間在運算下一步..比如延時1秒在進行下一步計算...新人發問...求大大

15樓:張洪

sleep();裡面的數字單位是毫秒。

斷電延時和斷開延時時間繼電器的區別是什麼

不一樣,兩個概念。斷電延時和斷開延時的區別 斷電延時指的是定時器的線圈斷電以後,定時器的觸點 包括常開和常閉 會延遲一段時間動作,這個 斷電 針對的是線圈,物件是線圈。斷開延時分兩種情況 1 在通電延時中 通電針對的是線圈 斷開延時說的是定時器線圈得電以後,常閉觸點會延遲一段時間再斷開 斷開針對的是...

數碼管動態掃描的延時時間設為多少人眼才不會感覺到閃爍,具體的

人眼的視覺暫留時間大概在二十四分之一秒左右 所以一般電視電影至少是24幀以上,回才會看起答來是連續的動作 延時的時間設定小於40ms即可。延時太短會加重cpu的負擔,所以具體數值要自己權衡。寫延時函式有兩個方法 1.如果有用到實時作業系統 rtos 可以用os的api,比如 sleep 20 2.沒...

c語言 這題怎麼算,C語言計算問題

應該是3,1,0,0 的運算順序是自右至左,所以應該是c的值先賦給b,b在賦值給a,所以a 3 表示想等,優先順序比 高,所以先判斷b是否等於c等於為1不等於為0,在賦給a。因為前面已經將c的值賦給了b,所以c與b相等,因此a被賦值為1 的優先順序最高 比 還有高 所以先算括號裡面的,現將c的值賦給...