典型微控制器延時程式集

2022-10-06 00:36:02 字數 1052 閱讀 6538

摘要實際的微控制器應用系統開發過程中,由於程式功能的需要,經常編寫各種延時程式,延時時間從數微秒到數秒不等,對於許多c51開發者特別是初學者編制非常精確的延時程式有一定難度。本文從實際應用出發,討論幾種實用的編制精確延時程式和計算程式執行時間的方法,並給出各種方法使用的詳細步驟,以便讀者能夠很好地掌握理解。

關鍵詞 keil c51 精確延時程式執行時間

引言  微控制器因具有體積小、功能強、成本低以及便於實現分布式控制而有非常廣泛的應用領域[1]。微控制器開發者在編制各種應用程式時經常會遇到實現精確延時的問題,比如按鍵去抖、資料傳輸等操作都要在程式中插入一段或幾段延時,時間從幾十微秒到幾秒。有時還要求有很高的精度,如使用單匯流排晶元ds18b20時,允許誤差範圍在十幾微秒以內[2],否則,晶元無法工作。

用51組合語言寫程式時,這種問題很容易得到解決,而目前開發嵌入式系統軟體的主流工具為c語言,用c51寫延時程式時需要一些技巧[3]。因此,在多年微控制器開發經驗的基礎上,介紹幾種實用的編制精確延時程式和計算程式執行時間的方法。

實現延時通常有兩種方法:一種是硬體延時,要用到定時器/計數器,這種方法可以提高cpu的工作效率,也能做到精確延時;另一種是軟體延時,這種方法主要採用迴圈體進行。

1 使用定時器/計數器實現精確延時

微控制器系統一般常選用11.059 2 mhz、12 mhz或6 mhz晶振。第一種更容易產生各種標準的波特率,後兩種的乙個機器週期分別為1 μs和2 μs,便於精確延時。

本程式中假設使用頻率為12 mhz的晶振。最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重灌定時初值的時間(重灌定時器初值占用2個機器週期)。

在實際應用中,定時常採用中斷方式,如進行適當的迴圈可實現幾秒甚至更長時間的延時。使用定時器/計數器延時從程式的執行效率和穩定性兩方面考慮都是最佳的方案。但應該注意,c51編寫的中斷服務程式編譯後會自動加上push acc、push psw、pop psw和pop acc語句,執行時占用了4個機器週期;如程式中還有計數值加1語句,則又會占用1個機器週期。

這些語句所消耗的時間在計算定時初值時要考慮進去,從初值中減去以達到最小誤差的目的。

微控制器程式詳解

微控制器程式詳解.txt 根網線 盡賺了多少人的青春 有時候感動的就是身邊微不足道的小事。破碎不是最殘酷的最殘酷的是踩著這些碎片卻假裝不疼痛固執的尋找 將來就算我遇見再怎麼完美的人,都有乙個缺點,他不是你,下輩子要做男生,娶乙個像我這樣的女生。程式詳解 程式清單 共陽數碼管加減顯示 sp1 bit ...

微控制器C程式優化

對程式進行優化,通常是指優化程式 或程式執行速度。優化 和優化速度實際上是乙個予盾的統一。一般是優化了 的尺寸,就會帶來執行時間的增加 如果優化了程式的執行速度,通常會帶來 增加的 很難魚與熊掌兼得,只能在設計時掌握乙個平衡點。一 程式結構的優化 1 程式的書寫結構 雖然書寫格式並不會影響生成的 質...

微控制器串列埠通訊及程式

通訊協議 第1位元組,msb為1,為第1位元組標誌,第2位元組,msb為0,為非第一位元組標誌,其餘類推 最後乙個位元組為前幾個位元組後7位的異或校驗和。測試方法 可以將串列埠除錯助手的傳送框寫上95102025,並選上16進製制傳送,接收框選上16進製制顯示,如果每傳送一次就接收到95102025...