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

2022-10-11 11:50:10 字數 5931 閱讀 1086

1樓:晉易詹曉絲

如果在程式中x=10(你寫程式時肯定會給他賦一個值,在這裡假定是10),即在程式的某處會有delay(10)這樣的語句。相當於迴圈了600*x=600*10=6000次。可以根據自己的需要來定。

你說得對,可以寫一個就行。但是有些晶片,你在控制他時,時序要求非常嚴格,如果延時太長或延時太短,都不會執行出結果。如果需要小延時的地方(只需幾個us),只寫一個就可以。

如果需要延時幾ms,只寫一個,可能達不到延時要求。總而言之,要根據你的程式需要,時間長了,學的多了,也就懂了。希望我的回答,能給你提供點幫助

2樓:匿名使用者

void delay1(unsigned int j)while(j);

}這是us延時,有誤差,j的值越大相對誤差越小。不過相信誤差應該在你的可接受範圍內。

void delay1(unsigned int j)while(j);

}這是ms延時,有誤差,j的值越大相對誤差越小。不過相信誤差應該在你的可接受範圍內。

你可以試試,不行我再給你調。

3樓:

void delay_us(int time)while (time>1);

}//************ 毫秒級延時程式*****************

void delay_ms(unsigned int time)//有引數的子程式}

4樓:匿名使用者

/********微秒級(1us)延時程式********/void delay_us(unsigned int time)while (time>1);

}/********毫秒級(1ms)延時程式********/void delay_ms(unsigned int time)} 這種方法是近似的定時,如果想精確定時還是用定時器比較好

5樓:生活營口

void delayms(unsigned int time) //time ms

time--;

6樓:匿名使用者

我只曉得51

精確的用定時器

感覺很好

unsigned int timercouter;

timer0() interrupt 1

void delay10us(unsigned int delaytime)

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

7樓:匿名使用者

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

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

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

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

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

8樓:天雲一號

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

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

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

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

9樓:匿名使用者

這是一個延時函式()

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

10樓:匿名使用者

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

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

11樓:匿名使用者

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

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

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

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

//112}}

呼叫方式如下:

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

12樓:神奇號

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

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

13樓:匿名使用者

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

14樓:匿名使用者

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

51微控制器 delay延時函式的問題

15樓:匿名使用者

這個延時就是x*600,等於延時都是600的倍數,600,1200,1800

一個也可以實現。

具體要看原程式。

16樓:匿名使用者

一個迴圈的dalay的時間太短了。

兩次迴圈要長一些。因為int最大到32768,多了一個迴圈,就可以到 32768*600 這麼長時間,這樣才能看得出區別來。。

17樓:匿名使用者

如果在程式中x=10(你寫程式時肯定會給他賦一個值,在這裡假定是10),即在程式的某處會有delay(10)這樣的語句。相當於迴圈了600*x=600*10=6000次。可以根據自己的需要來定。

你說得對,可以寫一個就行。但是有些晶片,你在控制他時,時序要求非常嚴格,如果延時太長或延時太短,都不會執行出結果。如果需要小延時的地方(只需幾個us),只寫一個就可以。

如果需要延時幾ms,只寫一個,可能達不到延時要求。總而言之,要根據你的程式需要,時間長了,學的多了,也就懂了。希望我的回答,能給你提供點幫助

18樓:大黃人

一個是內迴圈,一個是外迴圈。

19樓:匿名使用者

看你自己延時時間需求了 要延時久點麼就兩個for 這個我相信你可以理解的 再不行你去看for語句到底有什麼功能 容易懂的

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

20樓:濤哥打狙

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,最大延時小於上面。

21樓:踏雪一無痕

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。

高手幫忙解釋一下這種微控制器延時函式void delay() { ; ; } 是什麼意思?詳細一點

22樓:匿名使用者

寫成下面好看點

void delay()

兩個「;」前什麼也沒寫是空指令,空指令就是cpu什麼也不做,但是要消耗一個指令的時間。

這個延時函式每呼叫一次就延時2個指令的時間。具體延時的時間要看你用的微控制器的晶振時間。

23樓:

delay裡面的內容用for迴圈即可,可以修改迴圈次數改變延時時間

51微控制器delay()函式 20

24樓:文件類共創空間

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

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

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

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

25樓:匿名使用者

當然可以。

首先判斷contralcar是否是1

while(conrtalcar(1))

26樓:匿名使用者

delay只是個延時函式,小車的動作需要你自己根據電路去編寫的,

27樓:孫偉傑

最好是用定時器,延時不是很準,如果對時間精確度不高,可以用delay

微控制器c語言函式呼叫delay裡能放引數嗎?

28樓:匿名使用者

1、可以放引數,因為void delay(unsigned char x)     //x為形參

例如:a=3000*b/a;

delay(a);        //帶引數a到x,呼叫延時2、delay函式是一般自己定義的一個延時函式。

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

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

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

29樓:

應該要具體看你的delay程式的吧。如果你的delay 是用來延時的話,那一般的程式是可以加個數字上去發 如 :delay(200)

void delay_ms(unsigned char i)void main(void)

for(j=0;j<4;j++)}}

這是個簡單的跑馬燈程式,呼叫delay的時候就加了引數

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

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

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

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

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

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