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

2021-05-18 06:08:15 字數 3251 閱讀 8582

1樓:人生灬舞曲

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

2樓:做而論道

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

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

只能實驗,觀察結果。

3樓:匿名使用者

一般來說!這個程式的延時多少要看你的時鐘晶片的大小!

一般的回如果你用的是12m的晶振的話!答

void delay_ms(unsigned int nms) //ms延時精確的到ms

這個是我除錯過的!能精確到1ms的!

如果是11.0592m的話!

void delay_ms(unsigned int nms) //ms延時精確的到ms

如果是其他的,你就需要自己利用keil自己的**進行測試了!

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

4樓:濤哥打狙

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

5樓:踏雪一無痕

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。

6樓:半拉蘋果

stc89c52, 12m delay(1) 延時大約為14us delay(1000)大約14ms

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,是呼叫函式時,傳遞過來的變數,此值越大,延遲的時間就越長。

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

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

微控制器c語言程式設計的程式問題,一個微控制器c語言程式設計的程式問題!

define keyr p0 define keyc p0 這兩項後面去掉加分號!else p0 0x2f else p0 0x37 這些else多餘,一個if對應一個else define keyr p0 define keyc p0 char key 7 6 應該是全域性變數,應寫在主函式之前!...

bit用法 微控制器C語言,51微控制器C語言裡面,定義bit的方法,有哪些,請舉例,謝謝!

bit timerout 0 這裡的bit本質上和char int一樣的 功能一樣,型別不一樣 char是8位,int是16位,bit是1位。每個位元組是8位,就可以包含8個bit,bit只有兩個值,1和0.bit timerout 0 bit keypress 就是定義兩個長度為1位的變數。bit...