1樓:娛樂小八卦啊
微控制器中的delay()的單位時間不是系統提供的,而是使用者自己編制的。
如果用迴圈語句實現的迴圈,沒法計算,但是可以通過軟體**看到具體時間,但是一般精精確延時是沒法用迴圈語句實現的。
如果想精確延時,一般需要用到定時器,延時時間與晶振有關係,微控制器系統一般常選用11.059 2 mhz、12 mhz或6 mhz晶振。第一種更容易產生各種標準的波特率,後兩種的一個機器週期分別為1 μs和2 μs,便於精確延時。
本程式中假設使用頻率為12 mhz的晶振。
最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重灌定時初值的時間(重灌定時器初值佔用2個機器週期)。
擴充套件資料
微控制器c語言程式中延時函式delay的原理是:僅僅執行一些,沒有實質性影響的所謂「無意義指令」,比如做比大小啊,做某個int的自加運算啊之類的。
微控制器的有些程式需要呼叫延時程式,合理的安排迴圈次數以及空操作的個數方法:用匯編的話就根據你的當前晶振頻率去推算你的指令週期,然後結合需要延遲的時間。
編寫延遲程式,用c的話還是要看最後生成的彙編碼是什麼樣的了。最簡單的方法就是寫好程式以後再編譯器裡軟**看時間。
微控制器c語言延時需注意的問題:
標準的c語言中沒有空語句。但在微控制器的c語言程式設計中,經常需要用幾個空指令產生短延時的效果。這在組合語言中很容易實現,寫幾個nop就行了。
在keil c51中,直接呼叫庫函式:
#include // 宣告瞭void _nop_(void);
_nop_(); // 產生一條nop指令
作用:對於延時很短的,要求在us級的,採用「_nop_」函式,這個函式相當彙編nop指令,延時幾微秒。nop指令為單週期指令,可由晶振頻率算出延時時間,對於12m晶振,延時1us。
對於延時比較長的,要求在大於10us,採用c51中的迴圈語句來實現。
2樓:匿名使用者
這個delay()不是keil提供的,而是使用者自己編制的,一般都是編成delay(1)延時1ms,你說的us是在晶振12m時一個指令週期(機器週期)的時間。
3樓:匿名使用者
單位時間取決於使用者對delay()函式的設計。通常在寫程式的時候便於閱讀,我們會寫delay_ms()表示單位時間是ms的延時,delay_10ms()表示單位時間是10ms的延時...
4樓:匿名使用者
你可以認為最小的單位是us,根據你的延時函式的寫法可組合成ms,s
5樓:匿名使用者
這個具體要看使用的晶振的頻率以及delay內部的**,可以大致算下來。
6樓:匿名使用者
這要看你自己把delay函式寫的延時是多久了
7樓:雨叡
那得看delay裡面的for語句
52微控制器c語言中delay是什麼意思?怎麼用?
8樓:生活如歌
一般延時1ms的程式是:
void delay(uint x)
}那麼當你在別的函式中用到delay(10000);就是延時10000ms,也就是10s
9樓:匿名使用者
delay是延時的意思,delay(n)是延時n個時間單位,至於一個時間單位是多少,這需要你的delay函式決定的,
10樓:匿名使用者
舉個例子吧
void delay(uint z)
微控制器一個時鐘週期就執行一個指令,如上面的for迴圈中,將會執行z次自減計算後跳出,即當你呼叫該函式後,執行這個函式至少要耗掉z個時鐘週期,即起到了延時的作用。至於具體時間是多長,與你微控制器、時鐘訊號有關。希望能幫到你。
11樓:是經費和
delay是延時的意思
請問在微控制器c語言程式設計中,用delay延遲的話,1秒程式是什麼?微控制器晶振為12mhz 20
12樓:匿名使用者
一條指令需要由12個振盪週期(既晶振振盪週期)組成,即晶振頻率12分頻,也就是執行一條指令的最高頻率1mhz,則對應週期為1us。延時程式執行一次迴圈的時間為1us,則延遲1s需要迴圈1000*1000次。所以你這樣寫是做不到延遲1s的,可以讓a=1000,再第二個for迴圈1000次。
13樓:匿名使用者
這個還得跟微控制器有關係的,比如用的是cisc的微控制器和risc的演算法就不太一樣,你首先要確定一個指令週期的時間,比如pic的微控制器,一個指令週期一般為t=1/(晶振頻率/4),然後再系統無中斷程式的情況下,那你上面的 a = 1/(t*110)
14樓:
在keil裡**的話,在配置裡把晶振調成12mhz,然後在呼叫delay函式的地方設定一個斷點,開始除錯程式,執行到斷點處,注意程式左邊有一個記錄當前暫存器和一些狀態的視窗,其中,裡面有一個是專門記錄當前執行了多少時間的變數,記下當前時間t1,然後按f10(不進入子函式)除錯,再記錄當前時間t2,則延時=t2-t1。多試幾個a,差不多調到1s就夠了。我一般都這麼調。
你要想明白其中原理,想自己算的話,你就看看delay的彙編**段自己算吧。
15樓:匿名使用者
用keil** 除錯一下 如果要求精確就用中斷
51微控制器c語言中delay函式是怎麼定義和使用的?
16樓:匿名使用者
定義一個延時xms毫秒的延時函式
void delay(unsigned int xms)// xms代表需要延時的毫秒數
使用:void delay10us(uchar ms)i=[(延時值-1.75)*12/ms-15]/41、在c51中進行精確的延時子程式設計時,儘量不要或少在延時子程式中定義區域性變數,所有的延時子程式中變數通過有參函式傳遞。
2、在延時子程式設計時,採用do…while,結構做迴圈體要比for結構做迴圈體好。
3、在延時子程式設計時,要進行迴圈體巢狀時,採用先內迴圈,再減減比先減減,再內迴圈要好。
17樓:天雲一號
delay函式是一般自己定義的一個延時函式。
c語言定義延時函式主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函式。
// 定義一個延時xms毫秒的延時函式
void delay(unsigned int xms) // xms代表需要延時的毫秒數
18樓:匿名使用者
這是一個延時函式()
裡的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
19樓:匿名使用者
5 51微控制器c語言中delay函式是怎麼定義和使用的?
voiddelay(unsignedinta){unsignedinti;while(--a!=0)
20樓:匿名使用者
c的話其實時間沒有辦法完全定性地計算的
如果非得精確的話只能使用定時器了,或者彙編的也行不過時間要求精度不是很高的話使用下面的**就行了當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:
#include "reg51.h" //標頭檔案包含//巨集定義
#define uint unsigned int#define uchar unsigned charvoid delay(uint ms) // 毫秒級延時(at89c52 @ 11.0592mhz)
//112}}
呼叫方式如下:
delay(400); //開機延時400ms夠詳細了吧?!
21樓:神奇號
假如說執行for(i = 0; i < 600; i++); 要1s,那a決定了執行1s的次數,這個延時就是a秒,懂了嗎?
不過12m晶振的話,大家一般是for(i = 0; i < 114; i++); 執行這句要1ms
22樓:匿名使用者
這是個延遲函式,delay 括號中的表示式是定義的無符號的整形變數,它是形參,你只要知道它是定義一個變數既可,它的值由main 函式傳遞過來,a的值有了,就進入了while 迴圈。不知你是否學過c語言,如果沒有,就看看while 迴圈。
23樓:匿名使用者
delay後面的()當中的a,是呼叫函式時,傳遞過來的變數,此值越大,延遲的時間就越長。
微控制器c語言中delay()函式的標頭檔案是什麼?
24樓:會飛的小兔子
delay函式是一個自己bai定義的du
延時函式,c語言定義延時函式主要zhi通過無意義指dao令的執回行來達到延時的目,並沒
答有一個軟體自帶標頭檔案專門有delay這個函式的。
微控制器c語言中delay()的使用:
voiddelay10us(ucharms)i=[(延時值-1.75)*12/ms-15]/4擴充套件資料把delay(10000)改為100000voidmain()
delay(100000);
printf("%c",str[i]);
}getch();}
25樓:天雲一號
delay( )函式並不是
來標準庫函自數,是程式設計人員自定義的一個函式(通常是延時函式),所以其並不包含在其他標頭檔案中。
下面給出51微控制器中一個常見的延時函式。
// 延時z毫秒的延時函式
void delay(unsigned int z)
26樓:匿名使用者
沒有一個軟體自帶標頭檔案是專門有delay這種函式的,delay就是延時,一般都是在自定義的標頭檔案裡,或者直接在主函式所在的檔案定義
27樓:匿名使用者
delay 一般是自己寫的軟體延遲函式!
28樓:李威威
51微控制器是自己寫延遲函式
請問在微控制器C語言程式設計中,用delay延遲的話,1秒程式是什麼?微控制器晶振為12MHZ
一條指令需要由12個振盪週期 既晶振振盪週期 組成,即晶振頻率12分頻,也就是執行一條指令的最高頻率1mhz,則對應週期為1us。延時程式執行一次迴圈的時間為1us,則延遲1s需要迴圈1000 1000次。所以你這樣寫是做不到延遲1s的,可以讓a 1000,再第二個for迴圈1000次。 這個還得跟...
微控制器PWM的概念是什麼,微控制器中的PWM是指什麼
分兩點討論 1.pwm 脈衝寬度調製 pwm 是英文 pulse width modulation 的縮寫,簡稱脈寬調製,是利用微處理器的數字輸出來對類比電路進行控制的一種非常有效的技術,廣泛應用在從測量 通訊到功率控制與變換的許多領域中。2.微控制器中的pwm 指的是此微控制器有部分i o口具有輸...
微控制器中查詢和中斷的本質區別,微控制器中查詢和中斷的本質區別?
說一下個人的理解,什麼時候用中斷,一般的微控制器中斷響應時間也就是一個或兩個機器週期這樣,所以如果我們要處理的東西要求時間很嚴格,那就要在中斷服務程式裡來出來,比如常用的傳送或接收非同步通訊資料,傳送接收遙控訊號,等等.這個時候就要用中斷來做.什麼時候用查詢 一般一些處理事件要求時間不是很嚴格的情況...