單片機的C語言關(guān)于延時函數(shù)主要有兩種
創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計與策劃設(shè)計,邵原網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:邵原等地區(qū)。邵原做網(wǎng)站價格咨詢:18980820575
一種是用for循環(huán),通過單片機執(zhí)行空指令達(dá)到延時的目的
如:
for(i=0;i100;i++)
{
;
}
這個簡單的語句會執(zhí)行100次空指令
每一次指令的時間可以大概確定
因此這個是最簡單的延時函數(shù)
第二種是通過定時器的方式來實現(xiàn)
定時器是通過對單片機的晶振進(jìn)行計數(shù)
然后在定時器中斷服務(wù)函數(shù)里面實現(xiàn)定時時間的計算及設(shè)置
51單片機的定時器0中斷服務(wù)函數(shù)為
void
time0()
interrupt
1
{
...
}
這個是和你機器的運算速度有關(guān)的
你要計算出這個函數(shù)用了多少時間就要用時間函數(shù),我很久沒用了。
#include "stdlib.h"
void delay()
{
time_t start,end;
start=time(null);
unchar i;
while(z--)
{
for(i=0;i121;i++);
}
end=time(null);
printf("%f",difftime(end,start));
}
//time_t是在頭文件中定義的,可能是個結(jié)構(gòu)體類型里面的成員定義了一些時間的單位,如年、月、日。在這里調(diào)用這個結(jié)構(gòu)體定義2個變量;
//start=time(null);
將其中一個變量賦值。它的值等于當(dāng)前的系統(tǒng)時間
//end=time(null);
在程序結(jié)束的時候再給另一個變量賦值,值等于當(dāng)前的系統(tǒng)時間。
//difftime(end,start)
函數(shù)difftime();是double類型,用來計算運行的時間,用第一個參數(shù)的時間減去第二個參數(shù)的時間,得到的值就是運行用了多少時間。單位為秒
1、delay函數(shù)是一般自己定義的一個延時函數(shù)。
2、C語言定義延時函數(shù)主要通過無意義指令的執(zhí)行來達(dá)到延時的目的。下面給出一個經(jīng)典的延時函數(shù)。
//?定義一個延時xms毫秒的延時函數(shù)
void?delay(unsigned?int?xms)??//?xms代表需要延時的毫秒數(shù)
{
unsigned?int?x,y;
for(x=xms;x0;x--)
for(y=110;y0;y--);
}
延時時間的計算與單片機的晶振頻率有關(guān)。若晶振頻率為12Mhz,那么單片機每震動一次所需要的時間是1/12M s。那么再來看看單片機執(zhí)行一次自減所需要的振動次數(shù)是96次,假如我們對時間要求不是特別精確的話,可以約等于100來計算?,F(xiàn)在通過上面兩個數(shù)據(jù)可以得出:單片機每執(zhí)行一次自減所需要的時間是1/12M *100(s),即1/120000 s,逆向計算一下,每1ms需要自減多少次?120次對吧。所以一個簡單的延時功能就誕生了,我們只需要自減120次,就可以延時1ms,如果我們要延時50ms呢,那就自減50*120=6000次。那么在程序上如何表達(dá)呢?我們可以用兩套for循環(huán)
void delay(int i){
int x,y;
for(x=i;x0;x--){
for(y=120;y0;y--)
}
}
參數(shù) i 代表該函數(shù)延時多少ms
網(wǎng)站標(biāo)題:關(guān)于C語言系統(tǒng)延時函數(shù)的信息
分享地址:http://sd-ha.com/article22/hcoccc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、定制開發(fā)、虛擬主機、域名注冊、網(wǎng)站收錄、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)