書接上回,下面是定時器的其他工作方式。
一、工作方式1:(還是拿t0做說明)
定時/ 計數器的工作方式1自己經驗是用的比較多的,它的結構圖如下:
TH0的八位和TL0的八位構成一個16位定時/計數器,可以定時時間最長
在工作方式1下,計數器的計數值范圍是:
1—65536(216)
當為定時工作方式1時,定時時間的計算公式為:
(216—計數初值)╳晶振周期╳12
或 (216—計數初值)╳機器周期
其時間單位與晶振周期或機器周期相同。
如果單片機的晶振選為6.000MHz,則最小定時時間為:
[213—(216—1)]╳1/6╳10-6╳12=2╳10-6(s)=2(us)
(216—0)╳1/6╳10-6╳12=131072╳10-6(s)=131072(us)。
工作方式1的使用,和方式0完全一樣,不必贅言。
二、工作方式2
工作方式2的結構圖如下:
從圖中可以看出來,計數寄存器變成了一個——TL0,工作方式2下多了一個重裝載寄存器,也就是原來的TH0。
在工作方式2下,如果TL0中的數據溢出,那么原先存儲在TH0中的數據就會自動的裝載到TL0中去,這是由單片機的硬件實現的,這樣我們就不用在手動給定時器賦初值,而且硬件重裝載不會耽誤時間,所以工作方式2的計時是最准確的。但是就是這樣一來的計數結構只有8位,計數值有限,最大只能到255。所以這種工作方式很適合於那些重復計數的應用場合。例如我們可以通過這樣的計數方式產生中斷,從而產生一個固定頻率的脈沖。也可以當作串行數據通信的波特率發送器使用。
工作方式2下的其他使用和工作方式0,1相同。
三、工作方式3
之前的3種工作方式中,定時器t0和t1的工作方式完全相同,而在工作方式3中終於有了個性的發揮不在相同了。
下面是工作方式3情況下t0的結構圖。
可以看出,t0被分成了2個定時器,每個八位,定時/計數器0的TL0拆成的定時器和之前方式0,1一樣,不過TH0拆成的就“因霸”了,它把原先定時器1的溢出標志位給占用了,而且還不受GATE門控的控制,這樣以來,如果定時器0的TH0構成的8位定時器在使用,定定時器1就憋屈了,沒有溢出位使用。當然定時器0也不能做計數器使用。那定時器1怎么辦呢?
如果不使用定時器0,定時器1還可以“做人”,如果使用,拿它就放棄了,不要工作方式3了!反正也就是做之前工作放松做的活,在這種情況下,定時/計數器1通常作為串行口的波特率發生器使用,以確定串行通信的速率,因為已沒有TF1被定時/計數器0借用了,只能把計數溢出直接送給串行口。當作波特率發生器使用時,只需設置好工作方式,即可自動運行。如要停止它的工作,需送入一個把它設置為方式3的方式控制字即可,這是因為定時/計數器本身就不能工作在方式3,如硬把它設置為方式3,自然會停止工作。