delay函數(shù)是一般自己定義的一個延時函數(shù)。
創(chuàng)新互聯(lián)專注于中大型企業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計和網(wǎng)站改版、網(wǎng)站營銷服務,追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上1000家,服務滿意度達97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!
c語言定義延時函數(shù)主要通過無意義指令的執(zhí)行來達到延時的目的。下面給出一個經(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次。那么在程序上如何表達呢?我們可以用兩套for循環(huán)
void delay(int i){
int x,y;
for(x=i;x0;x--){
for(y=120;y0;y--)
}
}
參數(shù) i 代表該函數(shù)延時多少ms
原理:只是執(zhí)行一些所謂的“無實際意義的指令”,如縮放或執(zhí)行一個int自加,簡單地說,就像高中數(shù)學中的“乘法原理”一樣,很容易迅速增加上面提到的“無意義指令”的數(shù)量
關(guān)于大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數(shù)情況下,程序員是經(jīng)驗值。
當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數(shù)量的機器周期,你當然可以根據(jù)所有指令使用的總時間來計算特定延遲的總時間。
擴展資料:
定義延遲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語言關(guān)于延時函數(shù)主要有兩種
一種是用for循環(huán),通過單片機執(zhí)行空指令達到延時的目的
如:
for(i=0;i100;i++)
{
;
}
這個簡單的語句會執(zhí)行100次空指令
每一次指令的時間可以大概確定
因此這個是最簡單的延時函數(shù)
第二種是通過定時器的方式來實現(xiàn)
定時器是通過對單片機的晶振進行計數(shù)
然后在定時器中斷服務函數(shù)里面實現(xiàn)定時時間的計算及設(shè)置
51單片機的定時器0中斷服務函數(shù)為
void
time0()
interrupt
1
{
...
}