找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

有段單片機(jī)延時代碼,請大神指導(dǎo)是如何計算時間的?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:824397 發(fā)表于 2021-8-31 16:41 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
各位大神:小弟初接觸單片機(jī),以下一段代碼,其中的i:及j: 及K:是怎么算出來的?求計算方法,或求專門的計算軟件,謝謝。


void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        i = 5;
        j = 52;
        k = 195;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



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

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2021-8-31 16:50 | 只看該作者
可用STC_ISP自動生成代碼


評分

參與人數(shù) 1黑幣 +20 收起 理由
szbadd + 20

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:624769 發(fā)表于 2021-8-31 19:04 | 只看該作者
沒有計算方法,C語言你就不要考慮了,除非你懂匯編。
然后查詢該單片機(jī)的手冊,查到DJNZ的機(jī)器周期,MOV的機(jī)器周期,然后根據(jù)晶振速率,算出需要多少個機(jī)器周期,然后算出用多少個DJNZ, 要精準(zhǔn)的話,還要算上 MOV時間, RET時間, 和 CALL的時間。
回復(fù)

使用道具 舉報

地板
ID:624769 發(fā)表于 2021-8-31 19:08 | 只看該作者
STC的單片機(jī),你可以用他的下載器自帶的工具生成,其他的單片機(jī),你能你把在KEIL上,加載該MCU的信息后,寫一個大概的延時,然后DEBUG跑一下看看多少時間,在調(diào)整調(diào)整到你需要的時間。
回復(fù)

使用道具 舉報

5#
ID:883242 發(fā)表于 2021-8-31 20:08 | 只看該作者
這個不是算出來的,而是測出來的。
回復(fù)

使用道具 舉報

6#
ID:401564 發(fā)表于 2021-8-31 20:49 | 只看該作者
不同的單片機(jī)環(huán)境有不同的辦法
如果是8051,在STC下載器那有現(xiàn)成的,選擇好單片機(jī)型號和晶振,復(fù)制就可以了
PIC就有專門的uS,mS延時函數(shù),程序開始的時候設(shè)定好晶振頻率,直接調(diào)用函數(shù)就行,這比較省事
回復(fù)

使用道具 舉報

7#
ID:624769 發(fā)表于 2021-8-31 20:53 | 只看該作者
Hephaestus 發(fā)表于 2021-8-31 20:08
這個不是算出來的,而是測出來的。

你還真說錯了,這個就是算出來的。根據(jù)不同型號的芯片,while 語句所對應(yīng)的匯編代碼 DJNZ的周期數(shù),然后計算出來的數(shù)值。
回復(fù)

使用道具 舉報

8#
ID:86450 發(fā)表于 2021-8-31 21:19 | 只看該作者
一般我是測出來
回復(fù)

使用道具 舉報

9#
ID:824397 發(fā)表于 2021-8-31 21:32 | 只看該作者
lkc8210 發(fā)表于 2021-8-31 16:50
可用STC_ISP自動生成代碼

大神,我明白,原來是這樣算出來的,太感謝了,
回復(fù)

使用道具 舉報

10#
ID:824397 發(fā)表于 2021-8-31 21:33 | 只看該作者
188610329 發(fā)表于 2021-8-31 19:04
沒有計算方法,C語言你就不要考慮了,除非你懂匯編。
然后查詢該單片機(jī)的手冊,查到DJNZ的機(jī)器周期,MOV的 ...

謝謝你的回復(fù),論壇有你更精采
回復(fù)

使用道具 舉報

11#
ID:824397 發(fā)表于 2021-8-31 21:34 | 只看該作者
188610329 發(fā)表于 2021-8-31 19:08
STC的單片機(jī),你可以用他的下載器自帶的工具生成,其他的單片機(jī),你能你把在KEIL上,加載該MCU的信息后,寫 ...

是的,謝謝你的回復(fù),論壇有你更精采
回復(fù)

使用道具 舉報

12#
ID:824397 發(fā)表于 2021-8-31 21:34 | 只看該作者
Hephaestus 發(fā)表于 2021-8-31 20:08
這個不是算出來的,而是測出來的。

謝謝你,已解決
回復(fù)

使用道具 舉報

13#
ID:824397 發(fā)表于 2021-8-31 21:35 | 只看該作者
Y_G_G 發(fā)表于 2021-8-31 20:49
不同的單片機(jī)環(huán)境有不同的辦法
如果是8051,在STC下載器那有現(xiàn)成的,選擇好單片機(jī)型號和晶振,復(fù)制就可以了
...

嗯,你這個計算出來沒有K值,謝謝你
回復(fù)

使用道具 舉報

14#
ID:824397 發(fā)表于 2021-8-31 21:36 | 只看該作者
188610329 發(fā)表于 2021-8-31 20:53
你還真說錯了,這個就是算出來的。根據(jù)不同型號的芯片,while 語句所對應(yīng)的匯編代碼 DJNZ的周期數(shù),然后 ...

謝謝你的參與
回復(fù)

使用道具 舉報

15#
ID:824397 發(fā)表于 2021-8-31 21:39 | 只看該作者
已解決,謝謝各位
回復(fù)

使用道具 舉報

16#
ID:390416 發(fā)表于 2021-9-1 08:19 | 只看該作者
真正搞工程項目設(shè)計的,壓根就不去計算這種參數(shù)的。理由如下:
1、假設(shè)在同一個硬件上做測試,單片機(jī)CPU指令周期是一致的。那么 變量i、K,存放在data跟存放在XDATA,讀寫速度能一樣?精確計算有意義嗎?
2、假設(shè)都存放在data,延遲1ms只需要char類型的變量即可完成,但是,延遲100ms必須16位變量,那么執(zhí)行時間還能照著公式去套算?
3、假設(shè)上述條件都一樣,計算好的延遲時間是1ms并且誤差1%,打開中斷之后,延遲時間變成了5毫秒了。誤差500%了,精確計算有意義嗎?
4、假設(shè)上述條件不影響延遲時間,那么,編譯器呢?誰敢說編譯器不同的優(yōu)化等級不影響delay的延遲時間?
5、還有硬件不同的情況,就需要重新計算了。比如晶振頻率不同,CPU內(nèi)核速度不同,STC8H單片機(jī)就比STC15快了很多了比89系列快了十幾倍了。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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