微控制器中用寫delay函式做延時和用定時器做延時有什麼區別

2021-05-28 03:24:59 字數 5672 閱讀 6045

1樓:匿名使用者

利用迴圈處理的方式實現的延時,並不精確。

1、當中斷髮生時,cpu被打斷先執行中斷服務。導致執行時間變長。

2、使用高階語言時,編譯的結果受優化等級等多方面因素干擾,難以計算。

3、在有mmu和cache的mcu中,指令的執行速度還會受到快取的影響。

利用定時器延時:

1、因為定時器累加與cpu無關,即使中斷,仍然會保持計數。不受上述問題影響

2、缺點需要佔用定時器資源。

3、功耗也會高一些

2樓:

定時器的做法是在你的程式裡還有其他事要做的情況下去設定的。也就是說設定了定時器後就可以去做其他事情了,delay就是不做事光用消耗的,消耗一定的時間後再去做其他事

微控制器定時與延時的區別 5

3樓:牽著你的手

定時,是指在做一件事情過程中,後臺有個計時器,預定時間到後觸發另一項工作。

延時,是指在做一件事情過程中,保持一種工作狀態的時間。

利用迴圈處理的方式實現的延時,並不精確。

1、當中斷髮生時,cpu被打斷先執行中斷服務。導致執行時間變長。

2、使用高階語言時,編譯的結果受優化等級等多方面因素干擾,難以計算。

3、在有mmu和cache的mcu中,指令的執行速度還會受到快取的影響。

利用定時器延時:

1、因為定時器累加與cpu無關,即使中斷,仍然會保持計數。不受上述問題影響

2、缺點需要佔用定時器資源。

3、功耗也會高一些。

4樓:

定時用的硬體定時器控制,延時,用的是延時子程式,就是軟體程式設計

5樓:紫嘯清風

定時會進入中斷,中斷有中斷子程式,定時的使用必須設定ie暫存器,trx=1即可定時,進入子程式後定時必須重灌計數值,而延時,可認為就是一段空指令來浪費時間,延時也可把你的程式放到中斷定時子程式中達到延時效果!

請問定時和延時的區別?

6樓:踏著冬雪來

定時是設定了時間。到了設定時間自動接通或關閉裝置。而延時是電路接通後到經過一定時間斷開或到了一定時間接通。延時一般用在電機啟動電路如星角啟動電路。

7樓:佚真

這個跟我一專業,定時是設定具體時間,瞬時啟動,延時是啟動時自動延長啟動時間

延時子程式定時和定時器定時的區別

8樓:匿名使用者

延時可以用這兩種方法來實現

1.用延時子程式

就是讓微控制器反覆值行一段程式,以實現延時的目的。這段子程式可以是一些跟其它程式沒任何關係的運算,只要數好指令條數以及迴圈次數就能跟據指令週期算出時間。

微控制器: _nop_和delay(1)延時時間是多久?和晶振頻率的關係是什麼?

9樓:修者世界

_nop_的延時

時間是一個機器週期,與晶振的關係是:osc/12/1000000微秒比如12m晶振,=12*1000000/12/1000000=1usdelay(1)則不知道是多少延時時間了,這與你的子程式本身有關。比如:

delay(unsigned char a)那麼delay(1)則是在12m晶振的情況下延時約為1毫秒。

10樓:lq右邊

_nop_只是一條語句,就是空操作,佔用一條指令週期,晶振週期的12倍就是這個時間了,delay(1)的話這就沒法說了,得看你的delay函式怎麼定義了,因為函式裡邊定義的延時不一樣

51微控制器軟體延時和定時器的區別

11樓:mrs鹿大大

區別就是用微控制器軟體定時,cpu迴圈執行一小段延時程式,浪費cpu的精力,用定時器定時,cpu就可以幹別的。

如果是程式延時的話,時間消耗在(延時程式+剩下的**);計時器中斷則相當於把延時程式交給定時器,此時cpu可以幹別的事情,提高了效率。就類似於電腦打遊戲時把圖形處理任務交給顯示卡,cpu的壓力就小。

微控制器進中斷後執行中斷裡的程式,比如你進定時中斷,執行完後退出中斷後做其他事,但定時還在計數,這樣計數和做其他事情兩不誤。

你的程式中本來就沒做其他事情,你的led移動就是等待中斷計數到10才操作的,led動作的先決條件就是中斷計數結束。

擴充套件資料

1、軟體迴圈延時:採用迴圈語句,如for,while等,進行長時間的空操作,或者空語句。

優點:程式理解簡易,入手快,新手必備**。

缺點:時間精度不高,且佔用微控制器大量時間資源,引發其它子函式的不流暢(卡滯、遲鈍),導致系統實時反應能力下降。

2、定時延時:採用定時器定時,如t0,t1;

優點:時間精度高,提高系統程式執行的高效性,不影響子函式的正常執行。

缺點:需佔用1個定時器資源(可以複用),需良好程式構架支援,入手難。

個人建議:一旦學會定時器,就不應該再使用「迴圈延時」函式,採用定時器才是正道。如果對延時精度要求不高,建議使用結構體組成多個延時體。

12樓:匿名使用者

微控制器進中斷後執行中斷裡的程式,比如你進定時中斷,執行完後退出中斷後做其他事,但定時還在計數,這樣計數和做其他事情兩不誤。

你的程式中本來就沒做其他事情,你的led移動就是等待中斷計數到10才操作的,led動作的先決條件就是中斷計數結束

13樓:做而論道

用軟體定時,cpu 迴圈執行一小段延時程式。

浪費 cpu 的精力。

用定時器定時,cpu 就可以幹別的。

14樓:寂寞小鳥

如果是程式延時的話,時間消耗在(延時程式+剩下的**);計時器中斷則相當於把延時程式交給定時器,此時cpu可以幹別的事情,提高了效率。就類似於電腦打遊戲時把圖形處理任務交給顯示卡,cpu的壓力就小了。

15樓:匿名使用者

進入中斷後執行i++後就出來了。然後在主函式while(1)中執行。此時while(1)執行很多次,然後再進入中斷,直到進10次才左移。

如果用延時,燈閃一次while(1)才允許一次。你程式少沒感覺,如何你該一下沒用8s控制一個燈閃,10s控制寧一個燈閃.延時就不太好做。

微控制器中定時器的作用,跟延時函式有什麼區別?求形象易明的概念

16樓:匿名使用者

相同是都能實現延時,不同是延時函式要佔用系統資源,延時時不能幹別的工作

定時器不佔用cpu資源,不影響別的程式執行。

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

17樓:匿名使用者

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

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

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

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

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

18樓:天雲一號

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

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

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

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

19樓:匿名使用者

這是一個延時函式()

裡的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

20樓:匿名使用者

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

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

21樓:匿名使用者

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

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

#include "reg51.h" //標頭檔案包含//巨集定義

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

//112}}

呼叫方式如下:

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

22樓:神奇號

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

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

23樓:匿名使用者

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

24樓:匿名使用者

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

採用定時中斷定時和普通定時器定時有什麼區別

25樓:胡大元

用定時器中斷,微控制器中斷處理時間大於定時器定時時間會怎樣?

如果是不同的中斷型別是可以根據優先順序巢狀,如果是同一中斷型別(如題),

有三種結果:1、馬上進入新的中斷處理(中斷巢狀) 2、等待中斷處理完再進入新的中斷處理 3、出錯。

微控制器中斷處理時間大於定時器定時時間,在下次中斷時間到時,因為中斷是同一型別、同一優先順序,所以不會馬上進入新的中斷處理。

而是在本次中斷處理結束後,微控制器又馬上進入新的定時器中斷函式,主函式中的語句可能會沒有機會執行下去,會影響後面中斷的實時性。所以答案為2。

如果為了避免中斷巢狀(同一優先順序不會發生),在中斷處理中人為的在進入中斷時關中斷,處理完中斷後開中斷,會影響後面中斷的實時性。

最安全的處理方式:中斷處理時間越短越好,有什麼事放外面處理。中斷的初衷是為了提高系統實時性,中斷處理太長,會影響同級的中斷響應,其它中斷談何實時。

附:解決高速大量資料的中斷處理難題

1.在中斷中,只接收。或加上簡單判斷。 2、在主程式中處理。

微控制器中用寫delay函式做延時和用定時器做延時有什麼區別

利用迴圈處理抄的方式實現的延襲 時,並不精確。1 當中斷髮生時,cpu被打斷先執行中斷服務。導致執行時間變長。2 使用高階語言時,編譯的結果受優化等級等多方面因素干擾,難以計算。3 在有mmu和cache的mcu中,指令的執行速度還會受到快取的影響。利用定時器延時 1 因為定時器累加與cpu無關,即...

請求微控制器delay延時函式,51微控制器C語言中delay函式是怎麼定義和使用的?

如果在程式中x 10 你寫程式時肯定會給他賦一個值,在這裡假定是10 即在程式的某處會有delay 10 這樣的語句。相當於迴圈了600 x 600 10 6000次。可以根據自己的需要來定。你說得對,可以寫一個就行。但是有些晶片,你在控制他時,時序要求非常嚴格,如果延時太長或延時太短,都不會執行出...

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

定義一個延時xms毫秒的延時函式 void delay unsigned int xms xms代表需要延時的毫秒數 使用 void delay10us uchar ms i 延時值 1.75 12 ms 15 41 在c51中進行精確的延時子程式設計時,儘量不要或少在延時子程式中定義區域性變數,所...