標(biāo)題: MCU C語(yǔ)言延時(shí)函數(shù){while(i--);}當(dāng)i=1時(shí)為什麼等于10us? [打印本頁(yè)]

作者: nanyexin    時(shí)間: 2021-4-29 23:16
標(biāo)題: MCU C語(yǔ)言延時(shí)函數(shù){while(i--);}當(dāng)i=1時(shí)為什麼等于10us?
晶振12M,  void delay(u16i)
{while(i--);}當(dāng)i=1時(shí)為什麼等於10us?
作者: nanyexin    時(shí)間: 2021-4-29 23:17
說(shuō)錯(cuò)了,晶振是12M,不是15M.
作者: vvv80    時(shí)間: 2021-4-29 23:40
這個(gè)和晶振的頻率有關(guān)系
作者: kmsj    時(shí)間: 2021-4-29 23:56
什么單片機(jī)?編譯級(jí)別是什么?任何延時(shí)函數(shù)不同單片機(jī)的不同晶體不同編譯級(jí)別的時(shí)間都不一樣,想知道為什么只有看對(duì)應(yīng)的匯編代碼就清楚了。
作者: 欣欣    時(shí)間: 2021-4-30 00:33
使用不同的芯片會(huì)用到不同的指令集,同一條指令運(yùn)行所需的時(shí)鐘周期也是不一樣的,即便源代碼完全一樣生成的hex文件也一樣的情況下,使用不同的單片機(jī)芯片使用完全相同的延時(shí)函數(shù),具體的延時(shí)時(shí)間也會(huì)有差別的。以STC單片機(jī)為例,他的指令集就分Y1,Y3,Y5,Y6四種,我們常用的STC89C52RC采用的就是Y1指令集,而STC8F1K08采用的就是Y6指令集。以同樣的一條指令NOP為例 STC89C52RC需要12個(gè)時(shí)鐘周期  而STC8F1K08只需要1個(gè)時(shí)鐘周期,這四種指令集速度是不一樣的。所以樓主問(wèn)的當(dāng)i=1時(shí)為什麼等于10us? 真的沒(méi)法說(shuō),因?yàn)椴恢滥阒傅氖鞘裁葱吞?hào)的單片機(jī)。你必須說(shuō)出你的型號(hào),才好針對(duì)具體問(wèn)題具體分析。
以下附圖說(shuō)明各個(gè)指令集所需時(shí)鐘周期(詳情請(qǐng)看STC-ISP軟件,截圖只是其中一部分,說(shuō)明相同指令在不同指令集下所需時(shí)鐘周期是不一樣的)




STC89C52RC采用的是Y1指令集,他的延時(shí)函數(shù) i=1是延時(shí)7us  真找不到你說(shuō)的 10us的,這里還多執(zhí)行了一個(gè)i=1呢,想一想什么芯片比STC89C52RC
還慢呢?想不出來(lái)啊!


作者: ss18118    時(shí)間: 2021-4-30 06:05

           while(i--);
C:0x0090    EF       MOV      A,R7
C:0x0091    1F       DEC      R7
C:0x0092    AC06     MOV      R4,0x06
C:0x0094    7001     JNZ      C:0097
C:0x0096    1E       DEC      R6
C:0x0097    4C       ORL      A,R4
C:0x0098    70F6     JNZ      delay(C:0090)

因?yàn)槟愕膯纹瑱C(jī)是12T的,也就是說(shuō)12個(gè)時(shí)間周期才運(yùn)行一個(gè)機(jī)器周期,
而一到三個(gè)機(jī)器周期為運(yùn)行一個(gè)匯報(bào)代碼,(詳情請(qǐng)看單片機(jī)精靈)
延時(shí)函數(shù)由7個(gè)匯編代碼組成(9us),加上跳轉(zhuǎn)函數(shù)是8個(gè)(1us)

作者: wufa1986    時(shí)間: 2021-4-30 08:01
因?yàn)槟阌玫膯纹瑱C(jī)太弱了,調(diào)用函數(shù)2us,while需要2us,,i--要1us,退出返回需要2us
作者: Alicute     時(shí)間: 2021-4-30 10:53
keil里面設(shè)置好晶振頻率,debug一下,看看時(shí)間就知道了。延時(shí)的長(zhǎng)短和你的單片機(jī)芯片選取有關(guān)。
作者: nanyexin    時(shí)間: 2021-4-30 13:12
kmsj 發(fā)表于 2021-4-29 23:56
什么單片機(jī)?編譯級(jí)別是什么?任何延時(shí)函數(shù)不同單片機(jī)的不同晶體不同編譯級(jí)別的時(shí)間都不一樣,想知道為什么 ...

STC89C52RC




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1