久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

用單片機(jī)C語言精確延時(定時)的方法

作者:51hei   來源:原創(chuàng)   點擊數(shù):  更新時間:2009年09月29日   【字體:

  最近在忙著單片機(jī)的項目,偶爾停下來小結(jié)了一下最近的收獲,還是有不少可貴的收益的。

  本人在閑暇的時候?qū)纹瑱C(jī)C語言下的各類延時程序做了下總結(jié)。由于單片機(jī)C語言下利用軟件延時不容易做到精確的定時,所以很多人在編寫延時子程序的時候不能好好的把握延時的具體時間。C語言下,延時程序主要有以下幾種:

一:

void delay(unsigned char k)
{

 unsigned char i,k;  //定義變量
 for(i=0;i<k;i++);      //for循環(huán)語句

}

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

 CLR A   ;指令1
 MOV R7,A ;指令2  
LOOP:
   INC R7  ;指令3
   CJNE  R7,k,LOOP    ;指令4

這里,指令1,指令2和指令3各消耗1個機(jī)器周期,指令4消耗兩個機(jī)器周期(可查此表得知:http://m.zg4o1577.cn/mcuteach/1312.html),而在12M的晶振下一個機(jī)器周期是1us,在這個過程中,指令1和指令2分別執(zhí)行1次,即消耗1+1us,而指令3和指令4分別執(zhí)行了k次,那么這樣加起來,這個延時子程序所消耗的具體時間就是t=1+1+(1+2)*k=3k+2us。

呵呵,這樣說來,如果我們定義的k為100的話,這個延時子程序的精確時間就是302us。  

二:

void delay(unsigned char i)
{
while(--i)
{;}
} 

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

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

三:

下面的將形參換為整形int,這樣的話,反匯編所執(zhí)行的語句完全不同,用個具體的數(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)過10H(16)次循環(huán)減為0:
t1=10H*(1+1+2+1+1+2)
2.R6經(jīng)過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,總消耗時間:
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吧
如果定義一個unsigned int i,那么延時計算公式為T=2+(i%256)*7+(i/256)*256*7+i/256+255*7

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

如果你懶得計算我還給大家推薦一個簡單的方法:就是用keil的軟件仿真功能來仿真出C語句執(zhí)行的時間,具體方法可以看這里:http://m.zg4o1577.cn/bbs/dpj-4711-1.html

昨天熬夜整理的,從這個程序中可以看出單片機(jī)C語言和匯編語言的一些區(qū)別,希望對大家有幫助!

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 欧美激情在线观看 | 少妇高潮久久久久久潘金莲 | 欧美一级艳片视频免费观看 | 手机在线看片1024 | 婷婷六月色 | 成人午夜视频在线观看 | 欧美精品三区 | 一级毛片在线免费观看 | 久久久精彩视频 | 手机成人在线视频 | 青青草视频在线观看 | 国产在线播放av | 成人自拍视频在线观看 | 亚洲看片 | 91av免费| av网站观看 | 黄色片www | 日韩五十路 | 亚洲成人免费网站 | 成人国产精品视频 | 欧美高清在线 | 欧美日韩黄 | 日韩黄色一级 | 一二三四区在线观看 | 青青草在线免费视频 | 欧美日韩四区 | 久久久久久网 | 日韩色在线| 三a毛片 | 精品一区二区国产 | 91调教视频| 日本a v在线播放 | 亚洲精品xxx | 日韩精品视频免费在线观看 | 亚洲福利视频一区 | 久久久久久网站 | 成人性色生活片 | 四虎四虎| 韩国三级中文字幕hd久久精品 | 91调教打屁股xxxx网站 | 欧美日韩成人在线观看 |