51微控制器定時器工作方式1 2原理詳解

2021-09-26 00:26:22 字數 2108 閱讀 1608

1.本篇博文旨在幫助那些像我一樣剛入門51微控制器,如果你對定時器有一定了解,但是其中的的工作方式不能理解,那麼這篇文章很適合你,如果你是大神的話…直接繞行吧……

2.我在學習的過程中由於知識上的不足很多的講解看不懂,在翻找了許多資料真正理解之後,打算以一種簡單易懂的方式進行解釋,這是乙份很詳盡基礎的講解手冊。

3.全文以定時器0為例,定時器1的用法與其相同。

4.由於是講定時器實現原理,文章文字顯得較多,不過都是很簡單的文字,只要認真看都能看得懂。

雖然看懂這篇博文不需要太多的知識儲備,但是在這裡還是做乙個簡單的知識普及,便於下文的講解

4位二進位制數可以和1位十六進製制數相互轉化,如二進位制數1111轉化為十六進製制是0xf; 二進位制轉化11111111轉化為十進位制是255。

51微控制器的時鐘週期由晶振決定,假定晶振頻率是12m,那麼它的時鐘週期為1/12m,機器週期是12倍的時鐘週期,即為12/12m,文章以12m晶振為例講解。

採用方式1時,計數字數時16位,由th0作為高八位,tl0 作為低八位,組成16位加一計數器,在tr0 置1後微控制器開始計時,每經過乙個機器週期微控制器輸出乙個脈衝使定時器加一,加到16位全為1時會溢位,使tf0 置1,利用此性質可以去執行相應的功能,tf0置1是乙個訊號。

若 th0 和 tl0 的初值都為0(即整個定時器的值為0000000000000000),當16位全為1時,微控制器一共輸出了655361

個脈衝,時間經過了65536*12/12m秒鐘即為65.536ms。

那麼問題來了,我們想要利用的時間都是1s,2s這種,而不是65.536ms,如果能讓開始計時到tf0 置1這個時間變成50ms這種,就能夠通過幾次計數溢位達到計時1s鐘的目的,這就到了初值的計算。

由之前的分析可知,單次計時最長為65.536ms,以單次定時50ms(0.05s)為例,需要20次可以定時1s鐘。假設開始計時時16位定時器的初值為x,由於微控制器定時固定到達65536溢位,那麼(65536-x)*12/12m = 0.05,可計算得到x = 15536。化為16進製為0x3cb0。那麼th0 = 0x3c, tl0 = 0xb0;2

定時1s鐘的**如下:

#includevoid main()

} }}

方式2是自動重灌初值的8位計數方式,在本質上是與方式1一樣的。在工作方式2中,th0 只起到為tl0 重灌初值的作用,並不參與計數。當tl0 計數到全為1時再有乙個脈衝就會觸發溢位,tl0 的溢位不僅使tf0 置1,tf0置1是乙個訊號 ,而且將th0內容重新裝入tl0 ,th0 內容由**設定,重灌時值不變,然後進行新一輪的定時 ,這就是所謂方式2自動重灌初值。

方式2的初值的計算方式和方式1相同,與方式1不同的是:由於方式2只有tl0 計數,最多可以記256個脈衝(8位從全0編為全1),單次定時最長也就只有0.256ms(方式1為65.536ms)

依然以定時1s鐘為例,單次定時時間為0.2ms,設初值為x,(256-x)*12/12m = 0.2**10-3(0.2乘10的-3次方,由於格式問題只能打兩個星號……),解得x = 56,化為十六進製制為0x38,則th0 和tl0 的初值均為0x38;

#includevoid main()

}}

效果跟方式1相同3

,經過筆者實驗方式2更精準一些?咱也不知道,咱也不敢問

16位全為1的二進位制數的值為216 = 65536 ↩︎

計算初值還有另外乙個方法,就是以產生的脈衝次數(頻率)為中心。

微控制器時間頻率為12m,機器頻率為12m/12,即定時1s鐘定時器計數的個數為12m/12(我在這裡卡住很長時間,不太好理解),但是方式1單次計數個數最多為65536,遠遠達不到12m/12次。

計時1s微控制器計數個數為12m/12.那計時50ms(0.05s)計數個數就應該是(12m/12)/ 20 = 50000,那初值就應該是15536。 ↩︎

不知道讀者有沒有注意到,在定義cnt變數時,方式1採用的是unsigned char cnt = 0; 而方式2採用的卻是unsigned int cnt = 0; 這裡涉及到了資料結構的問題,我會在其它博文裡提到,這裡只需簡單理解為方式2中cnt的值過大,unsigned char型容不下就行了。 ↩︎

51微控制器 定時器

定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...

51微控制器 定時器

標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...

51微控制器定時器 彙編

定時器控制流水燈的速度,但流水燈到邊緣的時候,自動調整方向,先反方向繼續流動 使用的是 定時器0 org 0000h ljmp mian org 000bh ljmp t0 break org 0200h init mov tmod,01h 定時器0為方式1 定時器0計時100us mov tl0,...