1樓:匿名使用者
這是個延時子程式,延時1000個時鐘週期,至於到底延時多長時間,要取決於微控制器的晶振頻率。
2樓:正經小豆
就是延時函式,具體延時多長時間,是由delay函式裡面具體內定決定的。這個延時功能就相當於是處於待機狀態。
3樓:瘋狂的羅素
是使用者自定義的延時子程式,一般是延時1000毫秒,就是一秒。肯定在整個程式的某個部分能找到,如果找不到,可能在標頭檔案裡面定義了。這個不是系統函式庫的函式。
4樓:匿名使用者
看你void delay();函式怎麼寫的,如果延時是1ms,那delay(1000)就是1秒。
如果是5ms,那delay(1000)就是 5秒
這1000只是個引數。
微控制器c語言延時程式的計算,是什麼樣的演算法,請求高手。
5樓:濤哥打狙
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,最大延時小於上面。
6樓:踏雪一無痕
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。
7樓:半拉蘋果
stc89c52, 12m delay(1) 延時大約為14us delay(1000)大約14ms
51微控制器c語言中delay函式是怎麼定義和使用的?
8樓:匿名使用者
定義一個延時xms毫秒的延時函式
void delay(unsigned int xms)// xms代表需要延時的毫秒數
使用:void delay10us(uchar ms)i=[(延時值-1.75)*12/ms-15]/41、在c51中進行精確的延時子程式設計時,儘量不要或少在延時子程式中定義區域性變數,所有的延時子程式中變數通過有參函式傳遞。
2、在延時子程式設計時,採用do…while,結構做迴圈體要比for結構做迴圈體好。
3、在延時子程式設計時,要進行迴圈體巢狀時,採用先內迴圈,再減減比先減減,再內迴圈要好。
9樓:天雲一號
delay函式是一般自己定義的一個延時函式。
c語言定義延時函式主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函式。
// 定義一個延時xms毫秒的延時函式
void delay(unsigned int xms) // xms代表需要延時的毫秒數
10樓:匿名使用者
這是一個延時函式()
裡的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
11樓:匿名使用者
5 51微控制器c語言中delay函式是怎麼定義和使用的?
voiddelay(unsignedinta){unsignedinti;while(--a!=0)
12樓:匿名使用者
c的話其實時間沒有辦法完全定性地計算的
如果非得精確的話只能使用定時器了,或者彙編的也行不過時間要求精度不是很高的話使用下面的**就行了當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:
#include "reg51.h" //標頭檔案包含//巨集定義
#define uint unsigned int#define uchar unsigned charvoid delay(uint ms) // 毫秒級延時(at89c52 @ 11.0592mhz)
//112}}
呼叫方式如下:
delay(400); //開機延時400ms夠詳細了吧?!
13樓:神奇號
假如說執行for(i = 0; i < 600; i++); 要1s,那a決定了執行1s的次數,這個延時就是a秒,懂了嗎?
不過12m晶振的話,大家一般是for(i = 0; i < 114; i++); 執行這句要1ms
14樓:匿名使用者
這是個延遲函式,delay 括號中的表示式是定義的無符號的整形變數,它是形參,你只要知道它是定義一個變數既可,它的值由main 函式傳遞過來,a的值有了,就進入了while 迴圈。不知你是否學過c語言,如果沒有,就看看while 迴圈。
15樓:匿名使用者
delay後面的()當中的a,是呼叫函式時,傳遞過來的變數,此值越大,延遲的時間就越長。
求助:微控制器c語言中延時程式怎樣計算?
16樓:人生灬舞曲
軟體除錯出來的時間 也就是延時函式呼叫到呼叫結束所用的時間 通過看彙編指令計算得出 彙編指令又和機器週期掛鉤 機器週期是通過晶振頻率計算出的 晶振頻率是人為選擇的 看你自己
17樓:做而論道
軟體的延時時間,取決於晶振頻率。
c 語言的執行時間,並沒有計算公式。
只能實驗,觀察結果。
18樓:匿名使用者
一般來說!這個程式的延時多少要看你的時鐘晶片的大小!
一般的回如果你用的是12m的晶振的話!答
void delay_ms(unsigned int nms) //ms延時精確的到ms
這個是我除錯過的!能精確到1ms的!
如果是11.0592m的話!
void delay_ms(unsigned int nms) //ms延時精確的到ms
如果是其他的,你就需要自己利用keil自己的**進行測試了!
微控制器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 應該是全域性變數,應寫在主函式之前!...
求助微控制器c語言程式問題,求助 微控制器C語言程式問題
第一個是在主程式中設定的定時計數器中斷相關引數設定,tmod 0x10 設定定時計數器的工作方式為方式1 16為計數器 也就是計數範圍為 0 65536 th1 65536 200 256 tl1 65536 200 256 設定計數器的初值為 200.ea 1 開總中斷,et1 1 開定時計數器1...
求助微控制器c語言中延時程式怎樣計算
軟體除錯出來的時間 也就是延時函式呼叫到呼叫結束所用的時間 通過看彙編指令計算得出 彙編指令又和機器週期掛鉤 機器週期是通過晶振頻率計算出的 晶振頻率是人為選擇的 看你自己 軟體的延時時間,取決於晶振頻率。c 語言的執行時間,並沒有計算公式。只能實驗,觀察結果。一般來說!這個程式的延時多少要看你的時...