熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2022-4-11 23:10
正文摘要:關(guān)于51單片機(jī)LED延時(shí)問(wèn)題: 如圖:STC89C52RC,11.0592晶振,如果用unsigned int對(duì)變量進(jìn)行定義delayms(50000)延時(shí)大約是0.489s,而用long對(duì)變量進(jìn)行定義delayms(100000)延時(shí)大約是4.34s,為什么不是2倍關(guān)系呢,差 ... |
海盜船 發(fā)表于 2022-4-13 17:57 因?yàn)? 你不懂匯編, 也不懂 char int long 的判斷, 對(duì)于 51核 的單片機(jī)來(lái)說(shuō) 根本上的區(qū)別是什么。 所以,你無(wú)法理解 INT 延時(shí) 和 long 延時(shí) 為什么不是兩倍關(guān)系。 如果,一定要弄懂,就去補(bǔ)知識(shí), 如果不愿意去補(bǔ),就把 這個(gè)“為什么” 先放一邊,只要知道,“就是這樣的”。就好了。 你要相對(duì) 準(zhǔn)確的延時(shí),就用unsigned char 來(lái)嵌套,如: void Delay100us(unsigned char x) // x個(gè) 100us @11.0592MHz { unsigned char i; while(--x) { i = 43; while (--i); } } void Delay10ms(unsigned char x) // x 個(gè)10ms @11.0592MHz { while(--x)Delay100us(100); } void Delay1s(unsigned char x) // x 個(gè)1s @11.0592MHz { while(--x)Delay10ms(100); } |
| 謝謝各位指點(diǎn),不過(guò)還是不是很理解,匯編這塊不懂 |
|
long 是浮點(diǎn)數(shù),浮點(diǎn)數(shù)有:底數(shù)(3個(gè)字節(jié))和階碼(一個(gè)字節(jié))組成,類似于科學(xué)記數(shù)法。做加減法時(shí),要先對(duì)階(相當(dāng)于浮點(diǎn)轉(zhuǎn)定點(diǎn)),而后再加減,且是帶符號(hào)計(jì)算,最后再計(jì)算階碼,還原成浮點(diǎn)格式。比定點(diǎn)運(yùn)算復(fù)雜許多倍。 不懂匯編的師兄們,是很難理解這些的。 |
| 因?yàn)槟愕膯纹瑱C(jī)是8位的,如果使用long這種類型,編譯出來(lái)代碼會(huì)很大很大(可以看反匯編),這樣延時(shí)執(zhí)行起來(lái),時(shí)間就長(zhǎng)很多了。 |
| 不可能是2倍關(guān)系的,int是兩個(gè)字節(jié),long是4個(gè)字節(jié),如果轉(zhuǎn)為匯編,那么前者是2個(gè)循環(huán),后者則是4個(gè)循環(huán),因?yàn)?1單片機(jī)是8位機(jī),所以各個(gè)指令的轉(zhuǎn)移判據(jù)最高也是8位。 |
| 參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
|---|---|---|
|
| + 20 | 回帖助人的獎(jiǎng)勵(lì)! |
|
1、對(duì)單片機(jī)的數(shù)據(jù)結(jié)構(gòu)沒有真正明白的原理。 2、不懂匯編。 建議: 將程序進(jìn)行編譯,看編譯后的匯編代碼,或許你就明白了。 提示:硬延時(shí),雖然每次動(dòng)作都是減1或加1的累計(jì)。但對(duì)于不同的數(shù)據(jù)結(jié)構(gòu),加減1的復(fù)雜程序是不同的,即運(yùn)行復(fù)雜程度是不一樣的,所以時(shí)間不同。 |
| 延時(shí)要準(zhǔn), 就要 用多個(gè) char 嵌套, 不能簡(jiǎn)單用 long 或 INT |
|
別看仿真 STC下載器有現(xiàn)成代碼 Keil是傳統(tǒng)8051內(nèi)核,它是按AT系列的8051走的 STC的指令時(shí)間和AT的是不一樣的 至于為什么不是兩倍關(guān)系,你先去了解一下單片機(jī)的編譯原理吧,這是基礎(chǔ) |
Powered by 單片機(jī)教程網(wǎng)