最新單片機(jī)c語(yǔ)言延時(shí)程序?qū)嵱?/h1>
格式:DOC 上傳日期:2023-05-02 22:20:22

最新單片機(jī)c語(yǔ)言延時(shí)程序?qū)嵱?/div>
時(shí)間:2023-05-02 22:20:22     小編:zdfb

無(wú)論是身處學(xué)校還是步入社會(huì),大家都嘗試過(guò)寫(xiě)作吧,借助寫(xiě)作也可以提高我們的語(yǔ)言組織能力。范文書(shū)寫(xiě)有哪些要求呢?我們?cè)鯓硬拍軐?xiě)好一篇范文呢?下面是小編為大家收集的優(yōu)秀范文,供大家參考借鑒,希望可以幫助到有需要的朋友。

單片機(jī)c語(yǔ)言延時(shí)程序篇一

c語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。那么用單片機(jī)c語(yǔ)言精確延時(shí)(定時(shí))的方法都是怎樣的呢?以下僅供參考!

由于單片機(jī)c語(yǔ)言下利用軟件延時(shí)不容易做到精確的定時(shí),所以很多人在編寫(xiě)延時(shí)子程序的時(shí)候不能好好的把握延時(shí)的具體時(shí)間。c語(yǔ)言下,延時(shí)程序主要有以下幾種:

void delay(unsigned char k)

{

unsigned char i,k; //定義變量

for(i=0;i<k;i++); //for循環(huán)語(yǔ)句

}

該程序在keil環(huán)境下,會(huì)先將c語(yǔ)言轉(zhuǎn)化成匯編語(yǔ)言,那么我們就可以根據(jù)匯編語(yǔ)言來(lái)計(jì)算出精確的`時(shí)間,轉(zhuǎn)化具體步驟如下:

clr a ;指令1

mov r7,a ;指令2

loop:

inc r7 ;指令3

cjne r7,k,loop ;指令4

這里,指令1,指令2和指令3各消耗1個(gè)機(jī)器周期,指令4消耗兩個(gè)機(jī)器周期(可查文末附錄表),而在12m的晶振下一個(gè)機(jī)器周期是1us,在這個(gè)過(guò)程中,指令1和指令2分別執(zhí)行1次,即消耗1+1us,而指令3和指令4分別執(zhí)行了k次,那么這樣加起來(lái),這個(gè)延時(shí)子程序所消耗的具體時(shí)間就是t=1+1+(1+2)*k=3k+2us。

呵呵,這樣說(shuō)來(lái),如果我們定義的k為100的話,這個(gè)延時(shí)子程序的精確時(shí)間就是302us。

void delay(unsigned char i)

{

while(--i)

{;}

}

同樣的道理,將其反匯編,可以看到,只有一條語(yǔ)句:djnz i,$;

該語(yǔ)句消耗2us,一共執(zhí)行i次,所以總共消耗時(shí)間t=i*2us。

下面的將形參換為整形int,這樣的話,反匯編所執(zhí)行的語(yǔ)句完全不同,用個(gè)具體的數(shù)字做例子:

void delay()

{

unsigned int i=10000;

while(--i)

;

}

反匯編后:

4: unsigned int i=10000;

c:0x0003 7f10 mov r7,#0x10

c:0x0005 7e27 mov r6,#0x27

5: while(--i)

6: ;

c:0x0007 ef mov a,r7

c:0x0008 1f dec r7

c:0x0009 7001 jnz c:000c

c:0x000b 1e dec r6

c:0x000c 14 dec a

c:0x000d 4e orl a,r6

c:0x000e 70f7 jnz c:0007

1.r7經(jīng)過(guò)10h(16)次循環(huán)減為0:

t1=10h*(1+1+2+1+1+2)

2.r6經(jīng)過(guò)27h*256次循環(huán)減為0:

t2=27h*256*(1+1+2+1+1+2)+27h*1

3.最后r7的是變?yōu)?55,因此還要多出255次的循環(huán):

t3=255*(1+1+2+1+1+2)

4.加上之前消耗的2us,總消耗時(shí)間:

t=2+10h*(1+1+2+1+1+2)+27h*256*(1+1+2+1+1+2)+27h*1+255*(1+1+2+1+1+2)

=2+16*7+39*256*7+39*1+255*7

=71826us

大約為72ms吧

如果定義一個(gè)unsigned int i,那么延時(shí)計(jì)算公式為t=2+(i%256)*7+(i/256)*256*7+i/256+255*7

關(guān)于其他類型的延時(shí)程序都可以按照這個(gè)方法對(duì)時(shí)間進(jìn)行較為精確的計(jì)算。

s("content_relate");

【用單片機(jī)c語(yǔ)言精確延時(shí)(定時(shí))的方法】相關(guān)文章:

單片機(jī)c語(yǔ)言的好處

11-26

如何優(yōu)化c語(yǔ)言(單片機(jī))

10-04

如何提高單片機(jī)c語(yǔ)言代碼效率

12-04

c語(yǔ)言輸出菱形的方法

11-24

c語(yǔ)言的reduce方法應(yīng)用

11-20

c語(yǔ)言的冒泡排序方法

10-04

c語(yǔ)言高效編程的方法

11-25

c語(yǔ)言的記憶方法指導(dǎo)

11-10

c語(yǔ)言數(shù)組方法

10-06

【本文地址:http://aiweibaby.com/zuowen/2797654.html】

全文閱讀已結(jié)束,如果需要下載本文請(qǐng)點(diǎn)擊

下載此文檔