匯編轉(zhuǎn)c語言延遲函數(shù),匯編轉(zhuǎn)c語言延遲函數(shù)怎么做

C語言delay函數(shù)延時(shí)計(jì)算

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)字符變量。

請(qǐng)問下面的C語言延時(shí)函數(shù)是如何計(jì)算延時(shí)時(shí)間的?for循環(huán)中的四個(gè)nop是否可以省略?

一個(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è)指令周期~~

51單片機(jī)C語言程序中延時(shí)函數(shù)delay的原理是什么?

原理:只是執(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

51單片機(jī)C語言中delay函數(shù)是怎么定義和使用的?

定義一個(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)要好。

IAR環(huán)境下 C語言中怎么嵌入?yún)R編寫延時(shí)程序?

(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)

手機(jī)網(wǎng)站建設(shè)