delay函數(shù)是一般自己定義的一個延時函數(shù)。

我們提供的服務(wù)有:網(wǎng)站設(shè)計制作、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、石棉ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的石棉網(wǎng)站制作公司
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--);
}
定義一個延時xms毫秒的延時函數(shù)
void delay(unsigned int xms) // xms代表需要延時的毫秒數(shù)
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延時值-1.75)*12/Ms-15]/4
擴展資料
1、在C51中進行精確的延時子程序設(shè)計時,盡量不要或少在延時子程序中定義局部變量,所有的延時子程序中變量通過有參函數(shù)傳遞。
2、在延時子程序設(shè)計時,采用do…while,結(jié)構(gòu)做循環(huán)體要比for結(jié)構(gòu)做循環(huán)體好。
3、在延時子程序設(shè)計時,要進行循環(huán)體嵌套時,采用先內(nèi)循環(huán),再減減比先減減,再內(nèi)循環(huán)要好。
延時時間的計算與單片機的晶振頻率有關(guān)。若晶振頻率為12Mhz,那么單片機每震動一次所需要的時間是1/12M s。那么再來看看單片機執(zhí)行一次自減所需要的振動次數(shù)是96次,假如我們對時間要求不是特別精確的話,可以約等于100來計算。現(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
1、下面幾個是單片機的延時程序(包括asm和C程序,都是我在學(xué)單片機的過程中用到的),在單片機延時程序中應(yīng)考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網(wǎng)上查找程序時如果涉及到精確延時則應(yīng)該注意晶振的頻率是多大。
2、軟件延時:(asm)
晶振12MHZ,延時1秒
程序如下:
DELAY:MOV
72H,#100
LOOP3:MOV
71H,#100
LOOP1:MOV
70H,#47
LOOP0:DJNZ
70H,LOOP0
NOP
DJNZ
71H,LOOP1
MOV
70H,#46
LOOP2:DJNZ
70H,LOOP2
NOP
DJNZ
72H,LOOP3
MOV
70H,#48
LOOP4:DJNZ
70H,LOOP4
定時器延時:
晶振12MHZ,延時1s,定時器0工作方式為方式1
DELAY1:MOV
R7,#0AH
;;晶振12MHZ,延時0.5秒
AJMP
DELAY
DELAY2:MOV
R7,#14H
;;晶振12MHZ,延時1秒
DELAY:CLR
EX0
MOV
TMOD,#01H
;設(shè)置定時器的工作方式為方式1
MOV
TL0,#0B0H
;給定時器設(shè)置計數(shù)初始值
MOV
TH0,#3CH
SETB
TR0
;開啟定時器
HERE:JBC
TF0,NEXT1
SJMP
HERE
NEXT1:MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
R7,HERE
CLR
TR0
;定時器要軟件清零
SETB
EX0
RET
3、C語言延時程序:
10ms延時子程序(12MHZ)
void
delay10ms(void)
{
unsigned
char
i,j,k;
for(i=5;i0;i--)
for(j=4;j0;j--)
for(k=248;k0;k--);
}
1s延時子程序(12MHZ)
void
delay1s(void)
{
unsigned
char
h,i,j,k;
for(h=5;h0;h--)
for(i=4;i0;i--)
for(j=116;j0;j--)
for(k=214;k0;k--);
}
200ms延時子程序(12MHZ)
void
delay200ms(void)
{
unsigned
char
i,j,k;
for(i=5;i0;i--)
for(j=132;j0;j--)
for(k=150;k0;k--);
}
500ms延時子程序程序:
(12MHZ)
void
delay500ms(void)
{
unsigned
char
i,j,k;
for(i=15;i0;i--)
for(j=202;j0;j--)
for(k=81;k0;k--);
}
原理:只是執(zhí)行一些所謂的“無實際意義的指令”,如縮放或執(zhí)行一個int自加,簡單地說,就像高中數(shù)學(xué)中的“乘法原理”一樣,很容易迅速增加上面提到的“無意義指令”的數(shù)量
關(guān)于大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數(shù)情況下,程序員是經(jīng)驗值。
當(dāng)然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數(shù)量的機器周期,你當(dāng)然可以根據(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
這個延時關(guān)鍵看使用的晶振多大,比如12M晶振for(j=0;j120;j++);大概延時1毫秒,11.0592M晶振那么for(j=0;j110;j++);延時1毫秒,你這里的for(j=0;j100;j++);延時1毫秒的話,晶振應(yīng)該是10M,不太常見喲,特別是在單片機方面。
當(dāng)前文章:51c語言延遲函數(shù) 51延時函數(shù)
網(wǎng)頁地址:http://chinadenli.net/article32/hpespc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、商城網(wǎng)站、微信小程序、虛擬主機、網(wǎng)站內(nèi)鏈、響應(yīng)式網(wǎng)站
聲明:本網(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)