微控制器基礎學習 延時程式

2021-07-03 13:53:46 字數 799 閱讀 2841

拿到微控制器第乙個程式肯定是驅動led燈,這裡便要用到延時函式。

標準的c語言沒有空語句,要靠迴圈語句來實現延遲。下面是我看了別人的講解後,自己寫的一段**。

void delay_ms()

這是乙個延時500ms的程式,精確度很高,只是太單一。計算分析:

程式共有三層迴圈

一層迴圈n:r5*2 = 81*2 = 162us djnz 2us

二層迴圈m:r6*(n+3) = 202*165 = 33330us djnz 2us + r5賦值 1us = 3us

三層迴圈: r7*(m+3) = 15*33333 = 499995us djnz 2us + r6賦值 1us = 3us

迴圈外: 5us 子程式呼叫 2us + 子程式返回 2us + r7賦值 1us = 5us

延時總時間 = 三層迴圈 + 迴圈外 = 499995+5 = 500000us =500ms

計算公式:延時時間=[(2*r5+3)*r6+3]*r7+5

void delay_ms (unsigned long ms)

} 這段程式是我在51822的乙個例程裡看到的,我自己是這麼分析的,該**程式以ms為單位,

a=2585;執行這個

迴圈的時間為1ms,要取多少ms延時就迴圈多少次。

看了兩天微控制器延時,微控制器延時分為硬體延時和軟體延時,一般硬體延時主要依靠計數器和定時器。但因為計數器和定時器一般作他用,所以最常見的就是軟體延時。軟體延時主要是根據指令執行空指令的時間來獲得延時。要想獲得更精確的延時,還是用計數器和定時器吧。

延時就學到這裡。繼續下一章。

微控制器延時函式

精確的微控制器常用延時函式 c 誤差0us 12m 並未驗證 1 延時0.5ms void delay0.5ms void 誤差0us 2 延時1ms void delay1ms void 誤差0us 3 延時2ms void delay2ms void 誤差0us 4 延時3ms void del...

51微控制器延時程式的理解

微控制器的基本時序與 組合語言 中講的一致,分為振盪週期,時鐘週期 狀態週期 機器週期,指令週期。晶振相當於提供給微控制器乙個基礎時鐘單元,在這個基礎上進行一系列電子元器件的動作。微控制器常見的晶振有12mhz,11.0592mhz,6mhz。t指令 1 4 t機器 6t時鐘 12t振盪 軟體實現 ...

51微控制器延時函式

c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的 在使用時應該使用unsigned char作為延時變數。以某晶振為12mhz的微控制器為例,晶振為12mhz即乙個機器週期為1us。一.500ms延時子程式 程式 voi...