當前位置:編程學習大全網 - 編程語言 - 如何用單片機的delay實現延時?

如何用單片機的delay實現延時?

單片機中的delay()的單位時間不是系統提供的,而是用戶自己編制的。

如果用循環語句實現的循環,沒法計算,但是可以通過軟件仿真看到具體時間,但是壹般精精確延時是沒法用循環語句實現的。

如果想精確延時,壹般需要用到定時器,延時時間與晶振有關系,單片機系統壹般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第壹種更容易產生各種標準的波特率,後兩種的壹個機器周期分別為1 μs和2 μs,便於精確延時。本程序中假設使用頻率為12 MHz的晶振。

最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值占用2個機器周期)。

擴展資料

單片機C語言程序中延時函數delay的原理是:僅僅執行壹些,沒有實質性影響的所謂“無意義指令”,比如做比大小啊,做某個int的自加運算啊之類的。

單片機的有些程序需要調用延時程序,合理的安排循環次數以及空操作的個數方法:用匯編的話就根據妳的當前晶振頻率去推算妳的指令周期,然後結合需要延遲的時間。

編寫延遲程序,用C的話還是要看最後生成的匯編碼是什麽樣的了。最簡單的方法就是寫好程序以後再編譯器裏軟仿真看時間。

單片機C語言延時需註意的問題:

標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在匯編語言中很容易實現,寫幾個nop就行了。

在keil C51中,直接調用庫函數:

#include // 聲明了void _nop_(void);

_nop_(); // 產生壹條NOP指令

作用:對於延時很短的,要求在us級的,采用“_nop_”函數,這個函數相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。對於延時比較長的,要求在大於10us,采用C51中的循環語句來實現。

  • 上一篇:C語言是什麽意思幹什麽的?
  • 下一篇:編程大師兄
  • copyright 2024編程學習大全網