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

QQ登錄

只需一步,快速開始

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

C語言時(shí)鐘頻率MAIN_Fosc == 12000000L 表示的是什么意思呀,求助各位大神

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:894870 發(fā)表于 2021-4-3 21:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
void  delay_ms(uchar ms)
{
#if MAIN_Fosc == 12000000L
    unsigned char i, j;
    do
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        }
        while (--i);
    }
    while(--ms);


問題:MAIN_Fosc == 12000000L  表示的是什么意思呀,是12MHz???[size=10.6667px]后面的程序是自動(dòng)生成的還是自己寫出來的呀??


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

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-4-3 22:13 | 只看該作者
表示 這些參數(shù)只適合12000000晶振。不過,你研究這種死等延遲是沒有意義的。

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

所以,不要去精確的計(jì)算delay 延遲了多少時(shí)間,畢竟單片機(jī)的運(yùn)行情況有很多變數(shù)。學(xué)會(huì)提高CPU的代碼執(zhí)行效率,是很有必要的!
“什么是單片機(jī)?咱玩的就是時(shí)間!”
回復(fù)

使用道具 舉報(bào)

板凳
ID:584814 發(fā)表于 2021-4-4 10:48 | 只看該作者
#if MAIN_Fosc == 12000000L
就是說滿足這個(gè)條件以下語句生效直到下一個(gè)如#ENDIF的止
按這個(gè)程序的寫法程序開頭一般會(huì)定義MAIN_Fosc的值并且備注有多個(gè)以選擇不同值以選擇相關(guān)代碼
12000000L一般指12M主頻(晶振)在延時(shí)中如樓上所說也就是供參考的東東而且延時(shí)一般在上下限內(nèi)就OK
回復(fù)

使用道具 舉報(bào)

地板
ID:302703 發(fā)表于 2021-4-4 15:27 | 只看該作者
MAIN_Fosc == 12000000L是判斷當(dāng)前系統(tǒng)時(shí)鐘主頻是不是12M主頻(晶振),L表示12000000是一個(gè)無符號(hào)long整形數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

5#
ID:894870 發(fā)表于 2021-4-4 21:38 | 只看該作者
人人學(xué)會(huì)單片機(jī) 發(fā)表于 2021-4-3 22:13
表示 這些參數(shù)只適合12000000晶振。不過,你研究這種死等延遲是沒有意義的。

真正搞工程項(xiàng)目設(shè)計(jì)的,壓 ...

謝謝呀
回復(fù)

使用道具 舉報(bào)

6#
ID:894870 發(fā)表于 2021-4-4 21:40 | 只看該作者
醉逍遙 發(fā)表于 2021-4-4 15:27
MAIN_Fosc == 12000000L是判斷當(dāng)前系統(tǒng)時(shí)鐘主頻是不是12M主頻(晶振),L表示12000000是一個(gè)無符號(hào)long整形數(shù) ...

懂了,謝謝
回復(fù)

使用道具 舉報(bào)

7#
ID:894870 發(fā)表于 2021-4-4 21:42 | 只看該作者
man1234567 發(fā)表于 2021-4-4 10:48
#if MAIN_Fosc == 12000000L
就是說滿足這個(gè)條件以下語句生效直到下一個(gè)如#ENDIF的止
按這個(gè)程序的寫法程 ...

好的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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