1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 26473|回復(fù): 26
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)延時(shí)程序到底怎么算的啊?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:242547 發(fā)表于 2018-5-10 22:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
百度的1s的
void delayms()        
// 單片機(jī)延時(shí)子程序   對(duì)應(yīng)12M晶振
{                                                
        unsigned int ms=1000;
        while(ms--)                                //每一次循環(huán)1ms
        {
                for(i = 0; i < 120; i++);
        }
}這個(gè)每次循環(huán)為什么是1ms?每次不是120*2個(gè)機(jī)器周期*1us=0.24ms嗎?


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 2#
ID:327731 發(fā)表于 2018-5-11 17:46 來(lái)自觸屏版 | 只看該作者
如果有條件,用示波器打一下,執(zhí)行這個(gè)程序前把一個(gè)IO口拉低,進(jìn)入函數(shù)把這個(gè)IO口拉高,退出函數(shù)時(shí)將IO口拉低,測(cè)量電平時(shí)間,就可以為實(shí)際運(yùn)行時(shí)間。如果沒(méi)條件,就用軟件仿真,晶振頻率設(shè)對(duì),然后記錄函數(shù)執(zhí)行前的時(shí)間和執(zhí)行后的時(shí)間,算一下就可以了!如果說(shuō)要問(wèn)怎么來(lái)的,翻譯成為機(jī)器代碼后再看吧,這個(gè)for大概有一次賦值,120次比較,120次自增,一次賦值2個(gè)機(jī)器周期,一次判斷4個(gè)機(jī)器周期,一次自增一個(gè)機(jī)器周期,一個(gè)機(jī)器周期占用時(shí)間1us,你算一下?

評(píng)分

參與人數(shù) 2黑幣 +28 收起 理由
Double4X + 8 很給力!
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:277550 發(fā)表于 2018-5-11 00:28 | 只看該作者
不同類(lèi)型的單片機(jī),差別很大的。。。如果是使用STC單片機(jī),那麼在其下載工具中,有軟件延時(shí)生成工具。

評(píng)分

參與人數(shù) 2黑幣 +25 收起 理由
Double4X + 5 很給力!
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:327277 發(fā)表于 2018-5-11 01:25 | 只看該作者
你算的是正確的
回復(fù)

使用道具 舉報(bào)

5#
ID:327277 發(fā)表于 2018-5-11 01:27 | 只看該作者
百度錯(cuò)了他少了一個(gè)循環(huán)
回復(fù)

使用道具 舉報(bào)

6#
ID:327277 發(fā)表于 2018-5-11 01:28 | 只看該作者
這樣算出來(lái)的只有0.24ms
回復(fù)

使用道具 舉報(bào)

7#
ID:327290 發(fā)表于 2018-5-11 02:44 | 只看該作者
我覺(jué)得你算得是對(duì)的
回復(fù)

使用道具 舉報(bào)

8#
ID:326301 發(fā)表于 2018-5-11 11:09 | 只看該作者
執(zhí)行語(yǔ)句也是需要時(shí)間的,你可以直接編譯看下這個(gè)延時(shí)函數(shù)到底需要多少時(shí)間,keil里有這個(gè)功能,這個(gè)延時(shí)函數(shù)大概是0.97 0.98左右

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

9#
ID:293977 發(fā)表于 2018-5-11 17:07 | 只看該作者
這個(gè)東西一般都是用軟件算的,而且while、for等這些指令執(zhí)行一次要花不止一個(gè)指令周期,具體要花幾個(gè)指令周期要把它弄成匯編才看得出來(lái)。我只記得for語(yǔ)句好像執(zhí)行一次是3個(gè)指令周期,while不清楚。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

10#
ID:111634 發(fā)表于 2018-5-11 21:36 | 只看該作者
用c編寫(xiě)的延時(shí)函數(shù)一般無(wú)法計(jì)算,與編譯器和變量類(lèi)型都有關(guān),但可在keil運(yùn)行后查看寄存器窗口中,系統(tǒng)特殊寄存器組“Sys”中有一項(xiàng)“sec”和“states”,可查看程序執(zhí)行時(shí)間和運(yùn)行周期數(shù)。例如,執(zhí)行到延時(shí)子程序時(shí),記錄進(jìn)入該子程序的sec值,然后按過(guò)程單步鍵,快速執(zhí)行該子程序完畢,再讀取sec值,兩者之差,即為該子程序執(zhí)行時(shí)間。也可根據(jù)周期數(shù)states與圖2-8中設(shè)置的晶振頻率計(jì)算程序運(yùn)行時(shí)間。(摘自張志良編著的:《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,程序(雙解c和匯編)語(yǔ)句條條有注解,便于閱讀理解,便于自學(xué),可從零基礎(chǔ)c語(yǔ)言開(kāi)始學(xué)習(xí)。)。
回復(fù)

使用道具 舉報(bào)

11#
ID:327527 發(fā)表于 2018-5-11 23:48 | 只看該作者
你算的沒(méi)錯(cuò)
回復(fù)

使用道具 舉報(bào)

12#
ID:328086 發(fā)表于 2018-5-12 10:36 | 只看該作者
給樓主提供一個(gè)毫秒級(jí)延時(shí)程序
void delay(uint x) //延時(shí)X毫秒
{
uint y,z;
for(z=x;z>0;z--)
for(y=110;y>0;y--);
}

void delay_ms(uint n)   //延時(shí)n毫秒
{
   uchar i;
   while(n--)
   {
     for(i=0;i<120;i++);
}
}
回復(fù)

使用道具 舉報(bào)

13#
ID:317135 發(fā)表于 2018-5-28 15:44 | 只看該作者
你算得是對(duì)的
回復(fù)

使用道具 舉報(bào)

14#
ID:339882 發(fā)表于 2018-5-28 16:39 | 只看該作者
for循環(huán)嵌套,通過(guò)程序計(jì)算數(shù)據(jù)時(shí)間來(lái)進(jìn)行延時(shí)
回復(fù)

使用道具 舉報(bào)

15#
ID:338173 發(fā)表于 2018-5-28 21:30 | 只看該作者
兄dei,以我學(xué)習(xí)stc51 ,12,15系列單片機(jī)的經(jīng)驗(yàn)來(lái)說(shuō),軟件延時(shí)很扯!除非你匯編學(xué)得好。建議用_nop_()延時(shí)或者定時(shí)器計(jì)時(shí),要不寫(xiě)IIC驅(qū)動(dòng),單總線驅(qū)動(dòng),你會(huì)煩死。!
回復(fù)

使用道具 舉報(bào)

16#
ID:537232 發(fā)表于 2019-5-17 09:36 | 只看該作者
芝麻團(tuán)子 發(fā)表于 2018-5-11 17:46
如果有條件,用示波器打一下,執(zhí)行這個(gè)程序前把一個(gè)IO口拉低,進(jìn)入函數(shù)把這個(gè)IO口拉高,退出函數(shù)時(shí)將IO口拉 ...

為什么題主算的還要乘2呢?
回復(fù)

使用道具 舉報(bào)

17#
ID:540563 發(fā)表于 2019-5-17 11:43 | 只看該作者
delay延時(shí)的基本原理是:讓單片機(jī)什么也不干,一直空轉(zhuǎn),延時(shí)的時(shí)間等于空轉(zhuǎn)的周期數(shù),具體的時(shí)間要看你的單片機(jī)的晶振頻率的高低。
回復(fù)

使用道具 舉報(bào)

18#
ID:424408 發(fā)表于 2019-5-17 12:53 | 只看該作者
生成一個(gè)匯編文件,計(jì)算匯編指令周期 這樣更精準(zhǔn)哦
回復(fù)

使用道具 舉報(bào)

19#
ID:446841 發(fā)表于 2019-5-17 14:59 來(lái)自觸屏版 | 只看該作者
這個(gè)時(shí)間是用軟件慢慢調(diào)試出來(lái)的  你確定你程序每一行所用的時(shí)間是相同的   
回復(fù)

使用道具 舉報(bào)

20#
ID:530977 發(fā)表于 2019-5-17 20:53 | 只看該作者
void delay()unsigned
回復(fù)

使用道具 舉報(bào)

21#
ID:93224 發(fā)表于 2019-5-17 23:35 | 只看該作者
執(zhí)行空指令
回復(fù)

使用道具 舉報(bào)

22#
ID:541189 發(fā)表于 2019-5-18 10:20 來(lái)自觸屏版 | 只看該作者
芝麻團(tuán)子 發(fā)表于 2018-5-11 17:46
如果有條件,用示波器打一下,執(zhí)行這個(gè)程序前把一個(gè)IO口拉低,進(jìn)入函數(shù)把這個(gè)IO口拉高,退出函數(shù)時(shí)將IO口拉 ...

高手,領(lǐng)教了
回復(fù)

使用道具 舉報(bào)

23#
ID:393193 發(fā)表于 2019-5-20 22:11 | 只看該作者
可以參考一下本論壇一位大神發(fā)過(guò)的文章:http://m.raoushi.com/mcu/4163.html
回復(fù)

使用道具 舉報(bào)

24#
ID:495323 發(fā)表于 2019-10-6 00:35 來(lái)自觸屏版 | 只看該作者
lzr513 發(fā)表于 2018-5-12 10:36
給樓主提供一個(gè)毫秒級(jí)延時(shí)程序
void delay(uint x) //延時(shí)X毫秒
{

要看具體的晶振,一條匯編語(yǔ)句一般執(zhí)行時(shí)間是一個(gè)機(jī)器周期,一個(gè)機(jī)器周期是晶振的倒數(shù)。一條語(yǔ)句要運(yùn)行多長(zhǎng)時(shí)間要看這條語(yǔ)句有多少條反匯編語(yǔ)句。
回復(fù)

使用道具 舉報(bào)

25#
ID:612180 發(fā)表于 2019-10-7 14:36 | 只看該作者
如果單片機(jī)的晶振周期不一樣,那么時(shí)間也就不一樣,從而單片機(jī)的處理程序時(shí)間也就不同,所以要對(duì)照單片機(jī)的晶振頻率,從而計(jì)算時(shí)間。
回復(fù)

使用道具 舉報(bào)

26#
ID:609989 發(fā)表于 2019-10-8 17:23 | 只看該作者
晶振:11.0592
1ms
void dealyms(int x)
    {
           int i,y;
         for(i=0;i<x;i++)
                    for(y=0;y<112;y++);
    }
回復(fù)

使用道具 舉報(bào)

27#
ID:222006 發(fā)表于 2019-10-8 19:04 | 只看該作者
算法沒(méi)問(wèn)題,但是你要知道單片機(jī)的執(zhí)行時(shí)間不單單只執(zhí)行while里面的延時(shí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表