C語言delay函數(shù)延時(shí)計(jì)算源代碼如下:
創(chuàng)新互聯(lián)建站專注于忻城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。忻城網(wǎng)站建設(shè)公司,為忻城等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
#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、對(duì)于要求精確延時(shí)時(shí)間更長(zhǎng),這時(shí)就要采用循環(huán)嵌套的方法來實(shí)現(xiàn),因此,循環(huán)嵌套的方法常用于達(dá)到ms級(jí)的延時(shí)。
對(duì)于循環(huán)語句同樣可以采用for,do…while,while結(jié)構(gòu)來完成,每個(gè)循環(huán)體內(nèi)的變量仍然采用無符號(hào)字符變量。
一個(gè)nop為1個(gè)指令周期,通過nop指令可以產(chǎn)生一定的延遲,但是對(duì)于快速的CPU來說效果不明顯,因此可以多寫幾個(gè),便可以多延遲幾個(gè)時(shí)鐘(具體應(yīng)該說是一個(gè)指令占用了3個(gè)時(shí)鐘脈沖);所以,一個(gè)for循環(huán)會(huì)執(zhí)行4*250個(gè)指令周期,那么總共延時(shí)4*250*ms個(gè)指令周期~~
原理:只是執(zhí)行一些所謂的“無實(shí)際意義的指令”,如縮放或執(zhí)行一個(gè)int自加,簡(jiǎn)單地說,就像高中數(shù)學(xué)中的“乘法原理”一樣,很容易迅速增加上面提到的“無意義指令”的數(shù)量
關(guān)于大小的值:如果是在C語言中,該值不僅與水晶振動(dòng)、單片機(jī)本身的速度,但也與C的編譯器,所以,雖然這個(gè)值可以精確計(jì)算,但大多數(shù)情況下,程序員是經(jīng)驗(yàn)值。
當(dāng)然,如果你在匯編中編程,情況就不同了,因?yàn)槊織l指令使用一定數(shù)量的機(jī)器周期,你當(dāng)然可以根據(jù)所有指令使用的總時(shí)間來計(jì)算特定延遲的總時(shí)間。
擴(kuò)展資料:
定義延遲XMS毫秒的延遲函數(shù)
Voiddelay(unsignedintXMS)//XMS表示需要延遲的毫秒數(shù)
{
無符號(hào)intx,y;
For(x=XMS;X0;X-)
For(y=110;Y”0;Y-);
}
使用:
VoidDelay10us(ucharMs)
{
Uchar數(shù)據(jù)我;
(;女士“0;------Ms)
對(duì)于(I = 26)我 0;我-);
}
I=[(延遲值-1.75)*12/ms-15]/4
定義一個(gè)延時(shí)xms毫秒的延時(shí)函數(shù)
void delay(unsigned int xms) // xms代表需要延時(shí)的毫秒數(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=[(延時(shí)值-1.75)*12/Ms-15]/4
擴(kuò)展資料
1、在C51中進(jìn)行精確的延時(shí)子程序設(shè)計(jì)時(shí),盡量不要或少在延時(shí)子程序中定義局部變量,所有的延時(shí)子程序中變量通過有參函數(shù)傳遞。
2、在延時(shí)子程序設(shè)計(jì)時(shí),采用do…while,結(jié)構(gòu)做循環(huán)體要比for結(jié)構(gòu)做循環(huán)體好。
3、在延時(shí)子程序設(shè)計(jì)時(shí),要進(jìn)行循環(huán)體嵌套時(shí),采用先內(nèi)循環(huán),再減減比先減減,再內(nèi)循環(huán)要好。
(1)、C51語言中調(diào)用匯編語言程序;
C51語言調(diào)用匯編語言程序要注意以下幾點(diǎn):
1:在文件欄選中File Group和C51程序原文件,在配置文件選項(xiàng)中激活“產(chǎn)生匯編(SRC)文件,“編譯(SRC)文件”和“創(chuàng)建工程(目標(biāo))時(shí)包含”三個(gè)選項(xiàng)。
2:根據(jù)選擇的編譯模式,把相應(yīng)的庫(kù)文件(如SMALL模式,庫(kù)文件為KEIL\C51\LIB\C51S.LIB)加入工程中。
3:在C51語言中必須聲明需要調(diào)用的函數(shù)為外部函數(shù)。extern void DELAY(void);
4:在匯編語言程序中必須聲明被調(diào)用子程序?yàn)楣沧映绦?,在被調(diào)用的文件中還需要聲明此文件是可從新定位的。
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY
實(shí)例如下:
C51語言文件:
#include "reg51.h"
extern void DELAY(void);
extern void DEL(void);
void main(void)
{
P1=0x00;
DELAY();
DEL();
P1=0xff;
}
匯編語言文件:
PUBLIC DELAY,DEL
DELAYY SEGMENT CODE
RSEG DELAYY
DELAY: MOV R2,#3H
DJNZ R2,$
RET
DEL: MOV R3,#03H
DJNZ R3,$
RET
END
(2)、C51語言中嵌入?yún)R編程序;
在C51語言中嵌套使用匯編語言編寫程序要注意以下的幾個(gè)問題:
1:在文件欄選中File Group和C51程序原文件,在配置文件選項(xiàng)中激活“產(chǎn)生匯編(SRC)文件,“編譯(SRC)文件”和“創(chuàng)建工程(目標(biāo))時(shí)包含”三個(gè)選項(xiàng)。
2:根據(jù)選擇的編譯模式,把相應(yīng)的庫(kù)文件(如SMALL模式,庫(kù)文件為KEIL\C51\LIB\C51S.LIB)加入工程中。
3:用#pragma asm,和#pragma endasm語句包含嵌入的匯編語言程序。
實(shí)例如下:
#include "reg51.h"
void delay(void);
void main(void)
{
void delay(void);
P1=0x00;
#pragma asm
MOV R3,#08H
DJNZ R3,$
#pragma endasm
P1=0xff;
}
void delay(void)
{
#pragma asm
MOV R4,#08H
DJNZ R4,$
#pragma endasm
}
網(wǎng)站標(biāo)題:匯編轉(zhuǎn)c語言延遲函數(shù),匯編轉(zhuǎn)c語言延遲函數(shù)怎么做
網(wǎng)站URL:http://muchs.cn/article46/hcjhhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、ChatGPT、網(wǎng)頁(yè)設(shè)計(jì)公司、面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)