回覆列表
  • 1 # 使用者8719241321800

    1.軟體延時

    利用多個指令的執行來延時,累加每個指令的執行時間,來計算出延時的總時間。一般寫成一個延時函式。

    如,以下是10ms軟體延時。

    delay_10ms() {

    int c = 1000; // 調整常數,以達到要求的延時,但很難!

    while(c != 0) {

    c--;

    }

    }

    以上函式被呼叫一次,就延時10ms,多次呼叫可以達到任意更大的時間要求。

    !但是,在延時時,就其它什麼事也做不了了,就是乾等啊!

    2.硬體延時

    利用定時器/計數器晶片,或用微控制器內部的定時器/計數器,實際上,它就是對晶振的分頻(分頻係數可程式設計設定),得到一個精確的低頻的週期訊號,用這個週期訊號(比如10ms)去觸發中斷,每10ms呼叫一次定時中斷服務程式。在定時中斷服務程式中加入計數變數,就可以得到任意的定時了。

    在10ms沒有到時,微控制器可以執行其它程式,10ms到時再自動進去中斷服務程式以處理定時任務,不會像軟體延時阻塞了。

    3.作業系統中,都有個硬體延時,和定時中斷,可以看ucos ii中的原始碼,節拍時鐘,和組合語言實現的定時中斷。

    4.硬體延時,要佔用一個定時器/計數器硬體資源。

  • 2 # 使用者5635123734932

    void delay(uint z)

    {

    uint x,y;

    for(x=z;x>0;x--)

    for(y=123;y>0;y--);

    }

    要延遲的地方直接寫

    delay(資料);

    比如,delay(5);

  • 中秋節和大豐收的關聯?
  • 長歌行詩意?