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

2022-02-19 05:30:21 字數 5375 閱讀 1820

1樓:匿名使用者

用定時器(可以衍生出定時中斷和標記迴圈查詢法),還有直接用軟體語句硬性延時(這個需要實際測試和調校過才比較準)。但不管是哪一種,其最終**還是要依據微控制器工作頻率,具體的需要解釋太多,你還是看看對應微控制器的datasheet的各模組說明吧

2樓:匿名使用者

可以用for迴圈延時~但是精度不夠.最好用定時器中斷.比如用定時器1中斷延時50ms的話,可以設定th1=(65536-50000)/256; tl2=(65536-50000)%256;具體找本微控制器參考書上,基本都有~

3樓:匿名使用者

寫一個延遲子程式,然後需要延遲的時候呼叫。可以用for迴圈。

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

4樓:匿名使用者

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

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

使用:void delay10us(uchar ms)i=[(延時值-1.75)*12/ms-15]/41、在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 "reg51.h" //標頭檔案包含//巨集定義

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

//112}}

呼叫方式如下:

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樓:人生灬舞曲

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

13樓:做而論道

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

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

只能實驗,觀察結果。

微控制器c語言程式設計關於延時函式

14樓:匿名使用者

你是用的uvision吧?我用的uvision4,把程式編好執行,然後進行除錯(在此要設定兩個斷點就是一個在delay延時函式之前,一個斷點設在延時之後),然後你會在左邊register欄會看見一個   sec:0.

00014182  這個就是軟體執行到斷點處所用時間,然後再執行一次(這次就是執行完延時函式所用時間)。你把兩次的時間做差值就是延時函式延時時間。再附圖兩張。

15樓:匿名使用者

微控制器的c語言關於延時函式主要有兩種

一種是用for迴圈,通過微控制器執行空指令達到延時的目的如:for(i=0;i<100;i++)

這個簡單的語句會執行100次空指令

每一次指令的時間可以大概確定

因此這個是最簡單的延時函式

第二種是通過定時器的方式來實現

定時器是通過對微控制器的晶振進行計數

然後在定時器中斷服務函式裡面實現定時時間的計算及設定51微控制器的定時器0中斷服務函式為

void time0() interrupt 1

16樓:匿名使用者

這種延時一般都是不精準的額~~~~~

void delay(uint n)

}n毫秒延時。。。。在51微控制器中,精準的就用中斷來延時..

17樓:修者世界

大概value/120毫秒吧。

18樓:做而論道

實驗一下,即可知道。

沒有計算公式。

51微控制器c語言延時函式 void delay 1ms(unsigned int ms){un

19樓:杜哥是個小天才

c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的**,在使用時應該使用unsigned char作為延時變數。 以某晶振為12mhz的微控制器為例,晶振為12mhz即一個機器週期為1us。

void delay_ms(unsigned int ms_number) // ms延時函式 (at89c51 @ 11.0592mhz) }

void delay()

void delay_ms(unsigned int ms)

}拓展資料

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

20樓:匿名使用者

這個延時關鍵看使用的晶振多大,比如12m晶振for(j=0;j<120;j++);大概延時1毫秒,11.0592m晶振那麼for(j=0;j<110;j++);延時1毫秒,你這裡的for(j=0;j<100;j++);延時1毫秒的話,晶振應該是10m,不太常見喲,特別是在微控制器方面。

21樓:展華威

void delay(unsigned int x) //延時 x ms

延時1ms 即為使x=1;

這程式延時約1ms(x=1時用keil測出來約 0.96831272ms,近似1ms),用c語言很難做到準確的1ms。注意晶振為11.

0592mhz的時候用~ 晶振為12mhz時 把 i=120 近似值1ms

22樓:奮鬥勇士

這是根據for迴圈的執行時間來達到延時的效果,當然不同的微控制器晶片 執行速度不同,產生的效果也不一樣

23樓:聖鸞

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

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

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

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

//112}}

呼叫方式如下:

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

求一個1ms的微控制器c語言延時程式

24樓:夜貓叫楓子

void delay(char x)

學過標準c就知道了,char 和 int 是可以相互轉換的,char的取值範圍是-128~+127

unsigned char 的是0~255可以用unsigned int啊,我一般都是用char的,用unsigned int的話佔的位元組比較多,執行速度也沒char那麼快,計算機會麻煩點,建議使用char

25樓:蘭色的閃電

void delay(char x) }}

} char 是字元型沒錯,同時也是一個8位的資料型。所以可以給資料呀。

26樓:因貝**作

採用中斷準確,軟體延時不靠譜

你不要用c眼光,微控制器的char資料長度

27樓:

void delay(uint ms) // 毫秒級延時(at89c52 @ 11.0592mhz)

//112}}

28樓:小白裡的小白

delay(unsigned int x)

微控制器C51C程式問題,求翻譯成微控制器程式語言

現在都用c語言 編寫微控制器程式,c語言就是程式語言,而且是高階語言,易懂易讀,是單片版機程式設計的最好的語言權了。而你說的翻譯,是要翻譯成組合語言程式吧。如果你看不懂c語言程式,只學了組合語言,這種現象還很多,因很多學校還在講組合語言 其實非常落後 那你用keil 編譯這個程式時,選中生成彙編 就...

微控制器大神請進,51微控制器彙編程式,程式可發至

1 p1口做輸出口,編寫程式,使p1口接的8個發光二極體l1 l8按16進位制加一方式點亮發光二極體。程式如下 org 0540h ha1s mov a,00h a初值為0 ha1s1 jb p3.3,ha1s1 如果p3.3為1則等待 有脈衝變0一次 mov r2,20h r2賦值為20 lcal...

微控制器程式解釋,微控制器程式解釋

222222222222222222222222222222222222 cnta equ 30h 定義cnta為暫存器30h count equ 31h 定義count為暫存器31h org 00h 程式開始 ljmp start 開始程式入口 org 0bh 定時器t0中斷程式入口地址,不過最好...