如何用微控制器C語言計算呼叫子函式的時間

時間 2023-03-10 04:05:04

1樓:上海中公優就業

用定時器;#include

clock_t begin;

//開始記錄時間。

begin=time();

//你要測試時間的程式。

begin=time()-begin;//獲得測試程式執行的時間。

printf("%ld",begin/clocks_per_sec);/按照s,秒為單位輸出時間。

2樓:亙心

#include

clock_t begin;

//開始記錄時間。

begin=time();

//你要測試時間的程式。

begin=time()-begin;//獲得測試程式執行的時間。

printf("%ld",begin/clocks_per_sec);/按照s,秒為單位輸出時間。

3樓:匿名使用者

單任務的「os」,想做到不容易,最好是通過外部的計時器,如某個io的電平變化來監測。

。。。如果一定要內部做到,微秒級以下的 很難。。。達到毫秒的,還容易點。

51微控制器c語言中delay函式是怎麼定義和使用的?

4樓:匿名使用者

定義一個延時xms毫秒的延時函式。

void delay(unsigned int xms)//xms代表需要延時的毫秒數。

使用:void delay10us(uchar ms)i=[(延時值在c51中進行精確的延時子程式設計時,儘量不要或少在延時子程式中定義區域性變數,所有的延時子程式中變數通過有參函式傳遞。

2、在延時子程式設計時,採用do…while,結構做迴圈體要比for結構做迴圈體好。

3、在延時子程式設計時,要進行迴圈體巢狀時,採用先內迴圈,再減減比先減減,再內迴圈要好。

5樓:天雲一號

delay函式是一般自己定義的一個延時函式。

c語言定義延時函式主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函式。

// 定義一個延時xms毫秒的延時函式。

void delay(unsigned int xms) /xms代表需要延時的毫秒數。

6樓:匿名使用者

這是一個延時函式()

裡的unsigned int a是一個形參,為int型變數最 大值為32767;{}裡的unsigned int i和()裡的一樣 只是變數的名稱不同,為i;while就是迴圈語句 如果他後面的()裡的量不為零就執行他{}裡的內容,一旦為零就跳出該語句。for(i=0;i<600;i++)就是把i定為零,如果i在for裡小於600就跳到第三步i++(也就是i自增1);然後i=1但他還是小於600,接著就到第三步。。。599次之後i=600,600就不小於600,這時就跳出for。

while後的()如果為零就跳出while

7樓:匿名使用者

5 51微控制器c語言中delay函式是怎麼定義和使用的?

voiddelay(unsignedinta){unsignedinti;while(--a!=0)

8樓:匿名使用者

c的話其實時間沒有辦法完全定性地計算的。

如果非得精確的話只能使用定時器了,或者彙編的也行不過時間要求精度不是很高的話使用下面的**就行了當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:

#include ""標頭檔案包含//巨集定義。

#define uint unsigned int#define uchar unsigned charvoid delay(uint ms) /毫秒級延時(at89c52 @

呼叫方式如下:

delay(400); 開機延時400ms夠詳細了吧?!

9樓:神奇號

假如說執行for(i = 0; i < 600; i++)要1s,那a決定了執行1s的次數,這個延時就是a秒,懂了嗎?

不過12m晶振的話,大家一般是for(i = 0; i < 114; i++)執行這句要1ms

10樓:匿名使用者

這是個延遲函式,delay 括號中的表示式是定義的無符號的整形變數,它是形參,你只要知道它是定義一個變數既可,它的值由main 函式傳遞過來,a的值有了,就進入了while 迴圈。不知你是否學過c語言,如果沒有,就看看while 迴圈。

11樓:匿名使用者

delay後面的()當中的a,是呼叫函式時,傳遞過來的變數,此值越大,延遲的時間就越長。

微控制器c語言程式執行時間

12樓:

這個要看微控制器的執行效率了,現在以1t的就是晶振多少就執行多少條指令,如果是普通的就是12t的是把晶振除以12再執行一條指令。

13樓:匿名使用者

c語言裡面標頭檔案裡 如clock_t ap; ap = clock();到要算時間的地方 ap = ap-clock())1000; printf("%d", ap); 這樣就知道執行時間了啊。

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

14樓:植子昂戶嘉

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

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

delay10ms(void)

15樓:閻吉敏郎諾

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

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

#include

voiddelay()

end=time(null);

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

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

//start=time(null);

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

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

51微控制器 用c語言 中_n0p_ 函式 寫一個延時 幾百微秒 的子函式 求教

c程式設計時,51微控制器怎麼用定時器寫一個延時1ms的子函式

16樓:cindere鞡

51微控制器的定時器工作方式有4中,其中3種需要在中斷函式中重灌初值,而且c51明確規定中斷版函式不能傳入參權數也不能返回引數,那麼這樣一來就只能用不用重灌初值的工作方式2了,我給出了工作方式2的初始化函式:

void init(unsigned int x)這樣將x作為定時器的初值傳入,當tl0計數完成時,th0會自動將值賦給tl0,th0不變,當然你自己來定義鍵盤函式或者什麼函式來決定x的值。

17樓:

假如復使用12mhz晶振。

定時器初。制始化:

void init(void )

主程式;main(void)

}void inter_t0(void) /1ms中斷一次。

18樓:南柯一夢之小

好辦用c51,方式一。

void delay(unsigned int t) /t的單位取微秒。

求助:微控制器c語言中延時程式怎樣計算?

19樓:人生灬舞曲

軟體除錯出來的時間 也就是延時函式呼叫到呼叫結束所用的時間 通過看彙編指令計算得出 彙編指令又和機器週期掛鉤 機器週期是通過晶振頻率計算出的 晶振頻率是人為選擇的 看你自己。

20樓:做而論道

軟體的延時時間,取決於晶振頻率。

c 語言的執行時間,並沒有計算公式。

只能實驗,觀察結果。

問個關於51微控制器呼叫函式的時間問題(c語言) 20

21樓:匿名使用者

既然想到了用定時器 怎麼不繼續往下想呢 想要時間儘量精確 定時器是首選。

22樓:

定時器開總中斷ea=1;

定時器中斷 et0=1或et1=1;

開啟定時器tr0\1=1;

寫定時器中斷函式。

23樓:匿名使用者

下面的是我用定時器0做的延時函式,你看看,可以精確到10ms,如果你還想精確,調定時器的初值就可以。最高精度是1ms.

void inittimer0(void) reentrant //initialize t0 for timer

// timer0 interrupt

void timer0_isr(void) interrupt 1 //timer0 interrupt

// delay time

void delaytime(int16u sec, int16u msec) reentrant //time delay function

24樓:溫馨鬼腳七

用定時器肯定可以精確地控制時間啊。

25樓:哨案亞該

定時器是可以的,,不過要用到至少兩個執行緒才可能比較好。

微控制器c語言延時程式的計算,是什麼樣的演算法,請求高手。

26樓:濤哥打狙

1、一條指令執行的時間是1/12m=1us(

算作一微秒);delay(1000);就需要減1000次,就應該是專1000*1us=1ms。

2、每減一次需判斷是屬否到0;翻譯為組合語言後應該是cjne指令,一個cjne指令用2個週期,1000個cjne就是2000週期,共用2ms。

3、呼叫函式時有賦值,應為是8位機,int為16位,賦值就要用兩個週期,每減一次需判斷低八位是否減到零,又會翻譯為cjne指令,這個就不好算了,大概也要1~2ms,看你傳遞的引數而定,引數越大用時越大。

delay(1000);就應該用1+2+2=5ms。

void delay(unsigned char cnt)用時和上面演算法差不多,只是它傳遞的引數為8為的,值為0~255,最大延時小於上面。

27樓:踏雪一無痕

void delay(unsigned char cnt)和void delay(unsigned int cnt)意義上是bai一樣的。

延時程式的延。

du時過程,zhi是。

while(--cnt);

程式執行過程中dao消耗的時間。

回如何計。答算時間。

這要根據你微控制器上的晶振頻率。

51系列微控制器1個機器週期等於12個時鐘週期,12mhz晶振的話一個機器週期=1/12mhz*12=1us

delay(1000),delay(1000)即--cnt這條指令執行1000次,消耗1000個機器週期,即1ms。在這個程式上執行消耗1ms時間,相當於延時1ms。

微控制器C語言程式設計,微控制器C語言程式設計題

按你的程式的結構,不做大的變動,又能理解的方法 四個程式合併成一個,當然就只能有一個主程式了,一個while 1 了,凡是while 1 以上的程式只保留一個就行了。四個程式的while 1 以下的都合併寫在一個while 1 下面,分為四段。有四個按鍵,判斷按鍵被按下的程式會寫吧?那判斷每個按鍵的...

微控制器C語言程式設計,51微控制器C語言程式設計

使用兩個定時器或一個定時器中使用兩個計數都能滿足你的要求。建議使用一個定時器和一個計數器即可,如計數器為i,則if i 測溫定時 0 溫度測量 if i 步進電機定時 0 步進電機控制 注 此時要求兩個控制模組的定時步長是一致,比如都是1ms 設定一個比較小的定時間隔,例如1ms,用靜態變數累加,比...

求助微控制器c語言程式問題,求助 微控制器C語言程式問題

第一個是在主程式中設定的定時計數器中斷相關引數設定,tmod 0x10 設定定時計數器的工作方式為方式1 16為計數器 也就是計數範圍為 0 65536 th1 65536 200 256 tl1 65536 200 256 設定計數器的初值為 200.ea 1 開總中斷,et1 1 開定時計數器1...