單片機(jī)的C語言關(guān)于延時函數(shù)主要有兩種
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出婁星免費做網(wǎng)站回饋大家。
一種是用for循環(huán),通過單片機(jī)執(zhí)行空指令達(dá)到延時的目的
如:
for(i=0;i100;i++)
{
;
}
這個簡單的語句會執(zhí)行100次空指令
每一次指令的時間可以大概確定
因此這個是最簡單的延時函數(shù)
第二種是通過定時器的方式來實現(xiàn)
定時器是通過對單片機(jī)的晶振進(jìn)行計數(shù)
然后在定時器中斷服務(wù)函數(shù)里面實現(xiàn)定時時間的計算及設(shè)置
51單片機(jī)的定時器0中斷服務(wù)函數(shù)為
void
time0()
interrupt
1
{
...
}
原理:只是執(zhí)行一些所謂的“無實際意義的指令”,如縮放或執(zhí)行一個int自加,簡單地說,就像高中數(shù)學(xué)中的“乘法原理”一樣,很容易迅速增加上面提到的“無意義指令”的數(shù)量
關(guān)于大小的值:如果是在C語言中,該值不僅與水晶振動、單片機(jī)本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數(shù)情況下,程序員是經(jīng)驗值。
當(dāng)然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數(shù)量的機(jī)器周期,你當(dāng)然可以根據(jù)所有指令使用的總時間來計算特定延遲的總時間。
擴(kuò)展資料:
定義延遲XMS毫秒的延遲函數(shù)
Voiddelay(unsignedintXMS)//XMS表示需要延遲的毫秒數(shù)
{
無符號intx,y;
For(x=XMS;X0;X-)
For(y=110;Y”0;Y-);
}
使用:
VoidDelay10us(ucharMs)
{
Uchar數(shù)據(jù)我;
(;女士“0;------Ms)
對于(I = 26)我 0;我-);
}
I=[(延遲值-1.75)*12/ms-15]/4
C語言delay函數(shù)延時計算源代碼如下:
#include "stdlib.h"
void delay()
{
time_t start,end;
start=time(null);
unchar i;
while(z--)
{
for(i=0;ilt;121;i++);
}
end=time(null);
printf("%f",difftime(end,start));
}
擴(kuò)展資料
1、對于要求精確延時時間更長,這時就要采用循環(huán)嵌套的方法來實現(xiàn),因此,循環(huán)嵌套的方法常用于達(dá)到ms級的延時。
對于循環(huán)語句同樣可以采用for,do…while,while結(jié)構(gòu)來完成,每個循環(huán)體內(nèi)的變量仍然采用無符號字符變量。
延時時間的計算與單片機(jī)的晶振頻率有關(guān)。若晶振頻率為12Mhz,那么單片機(jī)每震動一次所需要的時間是1/12M s。那么再來看看單片機(jī)執(zhí)行一次自減所需要的振動次數(shù)是96次,假如我們對時間要求不是特別精確的話,可以約等于100來計算?,F(xiàn)在通過上面兩個數(shù)據(jù)可以得出:單片機(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
下面是delay
函數(shù)原型:
原型:
void
Delay(unsigned
int
nDelay)
{
unsigned
int
i,j,k;
for
(
i=0;inDelay;i++
)
for
(
j=0;j6144;j++
)
k++;
}
用法:#include
system.h
功能:短暫延時
說明:延時msec*4毫秒所以,delay的延遲時間是和你的cpu時鐘周期相關(guān)的
C語言的延遲函數(shù)一般是利用無意義程序運行來控制時間從而達(dá)到延時的目的
舉個例子:
for(i=0;ix;i++)
for(j=0;j120;j++);
這是延時x毫秒的for循環(huán)語句。
值得注意的是記得最后的;一定得記得寫。