① 51單片機定時器問題,定時不精準,差不多30s就有一秒的誤差,
65536-46080=19456個機器周期。
你使用11.0592M,如果單片機是12T的話,那就是每秒有11059200/12=921600個周期
19456/921600=0.0211111秒
再加上你在中斷函數中到TH0,TL0賦值的操作,包括,跳轉,關鍵數據入棧,TH0,TL0賦值等的時間。
換句話說,你一次中斷大概是0.021120秒
接下來,你就自己算吧
② 單片機數字時鍾比實際時間的慢啊怎麼辦
單片機是利用定時器實現計時的,根據定時器的定時計算出的時間常數,是理想狀態下的數值。
如晶振頻率是12M,用定時器T0,按定時20ms 計算的時間常數
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按這個數寫程序,電子鍾計時的時間肯定就比實際的時間慢。當然了,這需要時間長了,才能體現出來,如果只是計時幾個小時是比較不出來的。必須是長時間的計時,比如計時一周以上就體現出來計時的誤差了。
這是因為,單片機計時的誤差還是比較小的,假如一天慢1秒,那計時一周了,就慢7秒,才會發現的。
為什麼會慢呢,是因為定時到,要中斷,單片機從響應中斷,到在中斷程序中重寫時間常數,才能重新計時的,這是需要時間,只是這時間只有幾個微秒。就產生了計時誤差了。可是這向微秒的誤差,累計一周後就累計成幾秒了。
要計時比較准確的還是有辦法的,就是給時間常數的TL0加幾個數,來補償誤差。
通常加8就行,不過,還需要長時間的計時來校正。
在中斷程序中的時間常數改為
TH0=0XB1;
TL0=0XE8; //這低8位加8,補償誤差
這樣補償後,還有誤差,再改這低8位,慢了就加,快了就減
③ 單片機定時器做的時鍾,定時不準。
單片機定時器做時鍾,確切的說在環境溫度變化不大的前提下,可以調整的很准,畢竟它是基於MHz級的晶振的,提兩點建議,1】建議使用12MHz晶振;2】請注意對於不同的編程,定時器賦值時,如果需要50ms定時則絕不一定是賦值50000,也不一定是循環20次就是1S;你琢磨下這里的道理,你就明白了,具體方法是,找一個比較準的時鍾,比如在線時鍾,每10小時記錄一次找出規律,細細調整,畢竟它是在微秒范圍內進行調整,你肯定行的,祝成功。
④ 為什麼51單片機的定時器計時不準確
中斷函數裡面盡量少放語句,如果產生脈沖波形就只放一個
⑤ 單片機:用計時器給LCD計時間每一秒可能都會多個幾毫秒,要怎麼能減小這種誤差
千分之幾的誤差,用定時器計時的這種方法誤差很難消,
實在想消的話,可以用下面幾種法子試試:
1. 挑選晶振,晶振頻率有差,挑選個頻率高一點的。
2. 調大計數器的初值,然後在中斷服務 子程序中讓計數器停止計數、馬上再啟動計數,目的是微微調整定時的周期。
兩種方法都較難調好,要慢慢試,最好改其它定時法。比如用1302等晶元