1. 單片機中TH0和TL0是什麼意思
TH 0和TL0都是單片機的8位定時器。TH 0中的H即為HIGH縮寫,它是表示定時器高八位。TL 0中L即為LOW縮寫,它所代表為低八位。
單片機定時器的工作就是,當低八位定時器滿溢後,向高八位進行進位。兩個八位的TH 0和TL 0構成了單片機的16為定時/計數器。
8051系列單片機有兩個定時器:T0和T1,分別稱為定時器和定時器T1,這兩個定時器都是16位的定時器/計數器;8052系列單片機增加了第三個定時器/計數器T2;它們都有定時或事件計數功能,常用於時間控制、延時、對外部時間計數和檢測等場合。
8051單片機的兩個定時器T0和T1分別都由兩個特殊功能寄存器組成;T0由特殊功能寄存器TH0和TL0構成,而T1則是由TH1和TL1構成。
作為定時器使用時,定時器計數8051單片機片內振盪器輸出經過12分頻後的脈沖個數,即:每個機器周期使定時器T0/T1的寄存器值自動累加1,直到溢出,溢出後繼續從0開始循環計數;所以,定時器的解析度是時鍾振盪頻率的1/12。
作為計數器使用時,通過引腳T0(P3.4)或T1(P3.5)對外部脈沖信號進行計數,當輸入的外部脈沖信號發生從1到0的負跳變時,計數器的值就自動加1;計數器的最高頻率一般是時鍾振盪頻率的1/24。
由此可知,不論是定時器還是計數器工作方式,定時器T0和T1均不佔用CPU的時間,除非定時器/計數器T0和T1溢出,才可能引起CPU中斷,轉而去執行中斷處理程序;所以說,定時器/計數器是單片機中效率高而工作靈活的部件。
2. 51單片機的定時器初值到底是TH0 = (65536-x) /256;還是TH0 = (65535-x) /256;
51單片機的定時器初值確定時,我們通常使用65536減去定時脈沖個數來計算。這是因為16位計數器的最大可寫入數值為65535。假設定時周期為1微秒,且頻率為12MHz,即一個脈沖到來即溢出,此時應寫入65535,即65536-1。
因此,(65536-x)/256是正確的計算方法。考慮到定時時間不可能為零,(65536-x)/256的結果不會是256,小於256的數都可以裝入。同樣地,對於TL0來說,也不會是256,因為256的倍數除以256後余數為0。
實際上,不管是65535還是65536,對TH0寫入的結果是一樣的。但對於TL0(或整個計數器來說),理論上存在一個脈沖的差別。假設定時周期為1微秒,寫入65535時,定時器一打開,脈沖立即到來,可能不到1微秒。而寫入65534,則需兩個脈沖才會溢出,時間肯定大於1微秒。
這種方法用於實現這么小的定時,顯然是不準確的。還有中斷響應時間、主程序響應時間等都需要考慮。對於長時間定時,這個誤差是可以忽略的。要想減小誤差,可以提高晶振或系統時鍾的頻率。當定時脈沖個數較多時,就不必糾結這一個脈沖的誤差了,同時中斷響應時間和中斷程序處理的時間也減小了,大多數情況下是可以忽略的。