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

2021-09-25 00:10:53 字數 1085 閱讀 8594

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

t指令=(1——4)t機器=6t時鐘=12t振盪

軟體實現

軟體實現是指微控制器連續多次執行同一條空語句。c語言中通常用帶有_nop_( )的語句實現,如delay10us()、delay25us()等子函式實現。

void delay10us()
delay10us()函式中執行6次_nop_()語句,主函式呼叫該子函式時,先執行乙個lcall指令(2us),然後執行6次_nop_( )語句(6us),最後執行ret指令(2us),所以共需要10us。`

delay40us()
在delay40us()中直接呼叫4次delay10us()函式,得到的延時時間為42us,執行過程如下:執行迴圈時先執行一次lcall指令(2us),內部每次為10us,共為42us,執行完最後乙個子迴圈之後,直接返回主程式。

delay80us()
上面的程式總延時時間為86us。只有最內層函式執行ret指令,該指令直接返回上級函式或主函式。如果delay80us()中執行8次delay10us()函式,則總延時時間為82us。

定時器實現

微控制器系統一般常選用11.0592mhz、12mhz、6mhz的晶振,第一種更容易產生各種標準的波特率。若定時器工作為方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重灌定時初值的時間(重灌定時器初值占用2個機器週期)。

實際應用中,採用中斷方式,使用t/c延時從程式的執行效率和穩定性來考慮最佳。c51編寫的中斷服務程式編譯後會自動增加push acc、push psw、 pop psw、pop acc語句,執行時占用4個機器週期,如果程式中還有計數值+1 的語句,則又會占用1個機器週期,計算定時器初值時需要從初值中將這些時間減去達到最小誤差的目的。

51微控制器延時函式

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

51微控制器延時函式

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

STC系列51微控制器延時程式彙總

答應大家得福利來啦,這一期我就給大家分享一下stc系列51微控制器得延時程式彙總。11.0592mhz晶振 延時1ms 1 y1指令集 適用於sct89c系列,stc90c系列 stc89le系列 stc90le系列 void delay1ms while i 2 y3指令集 適用於stc12c系列...