1. 51單片機定時器不準確,請進
進入T1中斷後關所有中斷 EA= 0,同時裡面的指令最好用匯編實現可以計算出指令運行時間,考慮上這一部分時間,同時把T1中斷的優先順序設定為最高優先順序。只要你的晶振質量可靠定時還是非常准確的!
2. 單片機定時器做的時鍾,定時不準。
單片機定時器做時鍾,確切的說在環境溫度變化不大的前提下,可以調整的很准,畢竟它是基於MHz級的晶振的,提兩點建議,1】建議使用12MHz晶振;2】請注意對於不同的編程,定時器賦值時,如果需要50ms定時則絕不一定是賦值50000,也不一定是循環20次就是1S;你琢磨下這里的道理,你就明白了,具體方法是,找一個比較準的時鍾,比如在線時鍾,每10小時記錄一次找出規律,細細調整,畢竟它是在微秒范圍內進行調整,你肯定行的,祝成功。
3. 單片機數字時鍾比實際時間的慢啊怎麼辦
單片機是利用定時器實現計時的,根據定時器的定時計算出的時間常數,是理想狀態下的數值。
如晶振頻率是12M,用定時器T0,按定時20ms 計算的時間常數
TH0=(65536-20000)/256=0XB1
TL0=(65536-20000)%256=0XE0
如果按這個數寫程序,電子鍾計時的時間肯定就比實際的時間慢。當然了,這需要時間長了,才能體現出來,如果只是計時幾個小時是比較不出來的。必須是長時間的計時,比如計時一周以上就體現出來計時的誤差了。
這是因為,單片機計時的誤差還是比較小的,假如一天慢1秒,那計時一周了,就慢7秒,才會發現的。
為什麼會慢呢,是因為定時到,要中斷,單片機從響應中斷,到在中斷程序中重寫時間常數,才能重新計時的,這是需要時間,只是這時間只有幾個微秒。就產生了計時誤差了。可是這向微秒的誤差,累計一周後就累計成幾秒了。
要計時比較准確的還是有辦法的,就是給時間常數的TL0加幾個數,來補償誤差。
通常加8就行,不過,還需要長時間的計時來校正。
在中斷程序中的時間常數改為
TH0=0XB1;
TL0=0XE8; //這低8位加8,補償誤差
這樣補償後,還有誤差,再改這低8位,慢了就加,快了就減
4. 單片機定時過程中是否存在誤差,主要由哪些因素影響
那就這樣說吧,誤差有的可能性不大,你硬體上不出什麼大毛病,晶振能正常工作,那就不存在誤差了,重要的是你在編寫程序的時候吧定時器的值算好就ok了。
5. 為什麼51單片機的定時器計時不準確
中斷函數裡面盡量少放語句,如果產生脈沖波形就只放一個
6. 51單片機時鍾不準,8小時就慢1分鍾,請大家幫忙看看
不用外部的時鍾,照樣可以得到准確的時間,精度可以和晶振的精度相同。
採用定時器2,自動重裝初始值,就是一個可行的方法。
採用定時器0、1,也可以,只是中斷的次數,頻繁了一些。
7. 關於51單片機定時器的問題。我用郭天祥的51學習班做了一個電子表,發現時間很不準
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;關鍵點在這兩句上11.0592的晶振要比12M的快,但是加上中斷跳轉指令執行的時間,還有中斷執行的時間加在一起就慢了很多,要試著減掉這些時間,我得經驗值是:中斷不要很多,多了不是更增加執行時間了嗎?我做時鍾都是用最大的計時時間來減少中斷插入的影響,這里用50ms,再減掉5毫秒就基本上差不多了。
8. 51單片機內置定時器製作計時的誤差怎麼產生的。
首先,單片機定時器的記數的頻率是由單片機的時鍾頻率所決定的,而單片機的時鍾頻率是由外部晶振或內部震盪電路所決定的。不管是外部晶振還是內部晶振,本身都是有誤差的!然後又受外部的溫度、濕度、電磁干擾的影響,他們的頻率也是在變化的。這是無法避免的。然後,人在操作時也是有誤差的,例如51單片機工作在模式1的16位的定時器。當發生定時中斷後,要重裝定時器的初值,而執行這兩條指令也是要花時間的。這個誤差很小,可以忽略。最後就是當你 的中斷函數過長,其執行時間已經超過了定時周期,這時候將會丟失中斷。因為在發生下一次中斷的時候,而CPU還在執行本次的中斷服務程序。由於同優先順序的中斷不能被打斷,所以就會丟失中斷信號,這是產生了錯誤,而非誤差,所以中斷函數盡量短!
9. 51單片機定時器問題,定時不精準,差不多30s就有一秒的誤差,
65536-46080=19456個機器周期。
你使用11.0592M,如果單片機是12T的話,那就是每秒有11059200/12=921600個周期
19456/921600=0.0211111秒
再加上你在中斷函數中到TH0,TL0賦值的操作,包括,跳轉,關鍵數據入棧,TH0,TL0賦值等的時間。
換句話說,你一次中斷大概是0.021120秒
接下來,你就自己算吧
10. 請教單片機定時器問題。為什麼我用定時器做秒鍾溢出設計了一個鬧鍾,但碼管顯示時間不準(相差幾倍)
是你接輸出的時候信號線干擾了晶震的頻率,時間就不準了