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

QQ登錄

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

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

單片機(jī)延時(shí)函數(shù)疑問(wèn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1065550 發(fā)表于 2023-4-17 13:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1.void delay(uint x)           //延時(shí)函數(shù)
{
     uint i,j;
         for(i=x;i>0;i--)
            for(j=0;j<110;j++);  
}
2.void Delay(unsigned int k)                //@11.0592MHz
{
        unsigned char i, j;

for(;k>0;k--)
        i = 2;
        j = 103;
                do
                {
         while (--j);
        } while (--i);
}
想問(wèn)問(wèn)for循環(huán)和do循環(huán)有什么區(qū)別,下面一個(gè)是stc里面的延時(shí)函數(shù)。
同時(shí)問(wèn)問(wèn)為什么第二個(gè)能延時(shí)1ms?i和j都代表什么?

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

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2023-4-17 15:26 | 只看該作者
具體到你的代碼,for和while循環(huán)沒(méi)有區(qū)別。i和j代表延遲時(shí)間。
回復(fù)

使用道具 舉報(bào)

板凳
ID:584814 發(fā)表于 2023-4-17 16:06 | 只看該作者
實(shí)際上這些所謂的延時(shí)就是讓系統(tǒng)空轉(zhuǎn),由于不同的芯片在不同的主頻下速度不同,如果要非常精確的延時(shí)你懂的(通常用外接晶振+示波器輔助)。
兩者最直觀(guān)的區(qū)別是:for循環(huán)是先判斷后執(zhí)行,do循環(huán)是先執(zhí)行后判斷。
回復(fù)

使用道具 舉報(bào)

地板
ID:1065550 發(fā)表于 2023-4-18 13:04 | 只看該作者
man1234567 發(fā)表于 2023-4-17 16:06
實(shí)際上這些所謂的延時(shí)就是讓系統(tǒng)空轉(zhuǎn),由于不同的芯片在不同的主頻下速度不同,如果要非常精確的延時(shí)你懂的 ...

明白了
回復(fù)

使用道具 舉報(bào)

5#
ID:1065550 發(fā)表于 2023-4-18 13:07 | 只看該作者
Hephaestus 發(fā)表于 2023-4-17 15:26
具體到你的代碼,for和while循環(huán)沒(méi)有區(qū)別。i和j代表延遲時(shí)間。

那他這個(gè)i和j怎么算出來(lái)延時(shí)1ms的呢?
回復(fù)

使用道具 舉報(bào)

6#
ID:883242 發(fā)表于 2023-4-18 13:24 | 只看該作者
Mang0 發(fā)表于 2023-4-18 13:07
那他這個(gè)i和j怎么算出來(lái)延時(shí)1ms的呢?

不用算,實(shí)測(cè)就行了。
回復(fù)

使用道具 舉報(bào)

7#
ID:291668 發(fā)表于 2023-4-18 13:46 | 只看該作者
仿真的時(shí)候看一下下邊運(yùn)行時(shí)間,執(zhí)行每條語(yǔ)句應(yīng)該有時(shí)間顯示,從而估算變量的數(shù)值
回復(fù)

使用道具 舉報(bào)

8#
ID:155507 發(fā)表于 2023-4-18 14:33 | 只看該作者
毫秒級(jí)延時(shí)直接用定時(shí)器
看性能需要,性能高要求的用中斷吧,別讓他傻等,本來(lái)51性能就不好,傻等的話(huà)更沒(méi)效率了
還有硬件不同的情況,就需要重新實(shí)測(cè)了。比如晶振頻率不同,CPU內(nèi)核速度不同,STC8H單片機(jī)就比STC15快了很多了比89系列快了十幾倍了。
回復(fù)

使用道具 舉報(bào)

9#
ID:1045628 發(fā)表于 2023-4-18 14:53 | 只看該作者
強(qiáng)制延時(shí)不可靠,不同單片機(jī)頻率不一樣這個(gè)i,j的值就會(huì)不一樣,一般可以用示波器測(cè)量翻轉(zhuǎn)的IO口來(lái)測(cè)出i,j的值,還有一個(gè)風(fēng)險(xiǎn)點(diǎn),強(qiáng)制延時(shí)可能會(huì)被中斷干擾,精確延時(shí)應(yīng)該用定時(shí)器進(jìn)行延時(shí)
回復(fù)

使用道具 舉報(bào)

10#
ID:401564 發(fā)表于 2023-4-18 22:09 | 只看該作者
1,長(zhǎng)延時(shí)不要用軟件來(lái)進(jìn)行延時(shí),要學(xué)會(huì)用定時(shí)器
2,如果是簡(jiǎn)單程序,不想折騰,可以直接復(fù)制STC下載器的代碼,那個(gè)很準(zhǔn)確的
3,就算是一樣品牌的單片機(jī),就像STC,不同型號(hào)單片機(jī)之間,一樣的C代碼,延時(shí)的時(shí)間都是不一樣的
4,C語(yǔ)言的循環(huán)和實(shí)際的延時(shí)時(shí)間沒(méi)有什么對(duì)等的關(guān)系,不存在"怎么計(jì)算延時(shí)"這一說(shuō)法,除非是單片機(jī)公司專(zhuān)用的編譯環(huán)境提供的延時(shí)函數(shù),像PIC這樣的,它就有專(zhuān)用的延時(shí)函數(shù)
回復(fù)

使用道具 舉報(bào)

11#
ID:633522 發(fā)表于 2023-4-19 01:21 來(lái)自手機(jī) | 只看該作者
并沒(méi)有什么區(qū)別
回復(fù)

使用道具 舉報(bào)

12#
ID:10193 發(fā)表于 2023-4-19 08:59 | 只看該作者
機(jī)器周期、指令周期、時(shí)鐘周期這些了解一下,你就明白了
回復(fù)

使用道具 舉報(bào)

13#
ID:587810 發(fā)表于 2023-4-19 10:35 | 只看該作者
for是知道循環(huán)次數(shù)的情況下使用,while是不知道循環(huán)次數(shù)的情況下用,for是執(zhí)行完循環(huán)繼續(xù)執(zhí)行其他指令,while是不滿(mǎn)足循環(huán)條件才退出執(zhí)行,如果滿(mǎn)足循環(huán)條件則一直執(zhí)行循環(huán)
回復(fù)

使用道具 舉報(bào)

14#
ID:1065550 發(fā)表于 2023-4-19 15:19 | 只看該作者
謝謝各位的解答,統(tǒng)一表達(dá)一下謝意
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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