c語言for延時(shí)函數(shù),用for循環(huán)語句設(shè)計(jì)一個(gè)延時(shí)函數(shù)

單片機(jī)C語言編程關(guān)于延時(shí)函數(shù)

單片機(jī)的C語言關(guān)于延時(shí)函數(shù)主要有兩種

成都創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)10年來致力于為客戶提供成都做網(wǎng)站、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了數(shù)千家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。

一種是用for循環(huán),通過單片機(jī)執(zhí)行空指令達(dá)到延時(shí)的目的

如:

for(i=0;i100;i++)

{

;

}

這個(gè)簡單的語句會(huì)執(zhí)行100次空指令

每一次指令的時(shí)間可以大概確定

因此這個(gè)是最簡單的延時(shí)函數(shù)

第二種是通過定時(shí)器的方式來實(shí)現(xiàn)

定時(shí)器是通過對(duì)單片機(jī)的晶振進(jìn)行計(jì)數(shù)

然后在定時(shí)器中斷服務(wù)函數(shù)里面實(shí)現(xiàn)定時(shí)時(shí)間的計(jì)算及設(shè)置

51單片機(jī)的定時(shí)器0中斷服務(wù)函數(shù)為

void

time0()

interrupt

1

{

...

}

關(guān)于C語言for循環(huán)延時(shí)函數(shù)

for循環(huán)實(shí)現(xiàn)C語言精確延時(shí)

(晶振12MHz,一個(gè)機(jī)器周期1us.)

一. 500ms延時(shí)子程序

程序:

void delay500ms(void){

unsigned char i,j,k;

for(i=15;i0;i--)

for(j=202;j0;j--)

for(k=81;k0;k--);

}

產(chǎn)生的匯編:

C:0x0800 7F0F MOV R7,#0x0F

C:0x0802 7ECA MOV R6,#0xCA

C:0x0804 7D51 MOV R5,#0x51

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

計(jì)算分析:

程序共有三層循環(huán)

一層循環(huán)n:R5*2 = 81*2 = 162us DJNZ 2us

二層循環(huán)m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5賦值 1us = 3us

三層循環(huán): R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6賦值 1us = 3us

循環(huán)外: 5us 子程序調(diào)用 2us + 子程序返回 2us + R7賦值 1us = 5us

延時(shí)總時(shí)間 = 三層循環(huán) + 循環(huán)外 = 499995+5 = 500000us =500ms

計(jì)算公式:延時(shí)時(shí)間=[(2*R5+3)*R6+3]*R7+5

二. 200ms延時(shí)子程序

程序:

void delay200ms(void){

unsigned char i,j,k;

for(i=5;i0;i--)

for(j=132;j0;j--)

for(k=150;k0;k--);

}

產(chǎn)生的匯編

C:0x0800 7F05 MOV R7,#0x05

C:0x0802 7E84 MOV R6,#0x84

C:0x0804 7D96 MOV R5,#0x96

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

三. 10ms延時(shí)子程序

程序:

void delay10ms(void){

unsigned char i,j,k;

for(i=5;i0;i--)

for(j=4;j0;j--)

for(k=248;k0;k--);

}

產(chǎn)生的匯編

C:0x0800 7F05 MOV R7,#0x05

C:0x0802 7E04 MOV R6,#0x04

C:0x0804 7DF8 MOV R5,#0xF8

C:0x0806 DDFE DJNZ R5,C:0806

C:0x0808 DEFA DJNZ R6,C:0804

C:0x080A DFF6 DJNZ R7,C:0802

C:0x080C 22 RET

四. 1s延時(shí)子程序

程序:

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

}

產(chǎn)生的匯編

C:0x0800 7F05 MOV R7,#0x05

C:0x0802 7E04 MOV R6,#0x04

C:0x0804 7D74 MOV R5,#0x74

C:0x0806 7CD6 MOV R4,#0xD6

C:0x0808 DCFE DJNZ R4,C:0808

C:0x080A DDFA DJNZ R5,C:0806

C:0x080C DEF6 DJNZ R6,C:0804

C:0x080E DFF2 DJNZ R7,C:0802

C:0x0810 22 RET

在精確延時(shí)的計(jì)算當(dāng)中,最容易讓人忽略的是計(jì)算循環(huán)外的那部分延時(shí),在對(duì)時(shí)間要求不高的場合,這部分對(duì)程序不會(huì)造成影響.

c語言延時(shí)函數(shù)原理解釋

c語言延遲函數(shù)原理:

延遲函數(shù)里執(zhí)行的都是空語句,也就是說通過循環(huán)執(zhí)行空語句來達(dá)到延遲的目的.每執(zhí)行一條語句,即使是空語句都要耗費(fèi)電腦一些處理時(shí)間的,就是因?yàn)檫@個(gè),在延遲函數(shù)里寫一些無關(guān)緊要的東西,用來浪費(fèi)電腦處理時(shí)間,從而達(dá)到延遲目的。

函數(shù)名:

delay

能:

將程序的執(zhí)行暫停一段時(shí)間(毫秒)

(該函數(shù)是TC下特有的函數(shù),VC下應(yīng)使用Sleep()函數(shù))

法:

void

delay(unsigned

milliseconds);

程序例:

/*

Emits

a

440-Hz

tone

for

500

milliseconds

*/

#include

int

main(void)

{

sound(440);

delay(500);

nosound();

return

0;

}

c語言的延遲函數(shù)?編寫

C語言的延遲函數(shù)一般是利用無意義程序運(yùn)行來控制時(shí)間從而達(dá)到延時(shí)的目的

舉個(gè)例子:

for(i=0;ix;i++)

for(j=0;j120;j++);

這是延時(shí)x毫秒的for循環(huán)語句。

值得注意的是記得最后的;一定得記得寫。

網(wǎng)站欄目:c語言for延時(shí)函數(shù),用for循環(huán)語句設(shè)計(jì)一個(gè)延時(shí)函數(shù)
分享地址:http://muchs.cn/article28/hcjojp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃企業(yè)建站、域名注冊(cè)、網(wǎng)站營銷、Google、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)