微控制器的定時器

2022-03-31 08:44:30 字數 2913 閱讀 3542

定時器則是由微控制器自身提供的乙個非常穩定的計數器,這個穩定的計數器就是微控制器上連線的晶振部件,晶振經過12分頻之後提供給微控制器的只有1mhz的穩定脈衝;晶振的頻率是非常準確的,所以微控制器的計數脈衝之間的時間間隔也是非常準確的,這個準確的時間間隔是1微秒;12mhz晶振內部的工作頻率(時鐘脈衝頻率)是12mhz/12=1mhz=1000000次/秒=1000000條指令/秒=1000000次/1000000微秒=1次/微秒=1條指令/微秒;也就是說,晶振振盪一次,就會給微控制器提供乙個時鐘脈衝,花費的時間是1微秒,此時,cpu會執行一條指令,經歷乙個機器週期;即:1個時鐘脈衝=1個機器週期=1微秒=1條指令;

微控制器中的定時器和計數器其實是同乙個物理的電子元件,只不過計數器記錄的是微控制器外部發生的事情(接受的是外部脈衝),微控制器中的時間概念就是通過計數脈衝的個數來測量出來的;1個脈衝=1微秒=1條指令=1個機器週期;

8051系列微控制器有兩個定時器:t0和t1,分別稱為定時器和定時器t1,這兩個定時器都是16位的定時器/計數器;8052系列微控制器增加了第三個定時器/計數器t2;它們都有定時或事件計數功能,常用於時間控制、延時、對外部時間計數和檢測等場合;

二、定時器/計數器的結構

8051微控制器的兩個定時器t0和t1分別都由兩個特殊功能暫存器組成;t0由特殊功能暫存器th0和tl0構成,而t1則是由th1和tl1構成;

作為定時器使用時,微控制器片內振盪器輸出經過12分頻後的脈衝個數,即:每個機器週期使定時器t0/t1的暫存器值自動累加1,直到溢位,溢位後繼續從0開始迴圈計數;所以定時器的解析度是時鐘振盪頻率的1/12;

作為計數器使用時,通過引腳t0(p3.4)或t1(p3.5)對外部脈衝訊號進行計數,當輸入的外部脈衝訊號發生從1到0的負跳變時,計數器的值就自動加1;計數器的最高頻率一般是時鐘振盪頻率的1/24;

由此可知,不論是定時器還是計數器工作方式,定時器t0和t1均不占用cpu的時間,除非定時器/計數器t0和t1溢位,才可能引起cpu中斷,轉而去執行中斷處理程式;所以說,定時器/計數器是微控制器中效率高而工作靈活的部件;

三、定時器/計數器的工作模式

除了可選擇定時器和計數器的這兩種工作方式外,每個定時器/計數器都有4種工作模式;

在模式0、1和2時,t0和t1的工作模式相同;在模式3時,兩個定時器/計數器的工作模式不同;

工作模式0:

由tl0的低5位和th0的全部8位共同構成乙個13位的定時器/計數器;定時器/計數器啟動後,定時或計數脈衝個數加到tl0上,從預先設定的初值(時間常數)開始累加,不斷遞增1;當 tl0計滿後,向th0進製,直到13位暫存器計滿溢位;溢位時,定時器/計數器硬體會自動地把13位的暫存器值清0,中斷標記tf0置1;如果需要進一步定時/計數,需要使用相關指令重置時間常數,並把定時器/計數器的中斷標記tf0置0;

工作模式1:

模式1與模式0幾乎完全相同,唯一的區別就是,模式1中的暫存器th0和tl0共同構成的是乙個16位定時器/計數器來參與操作,因此比模式0中的定時/計數範圍更大;

‍工作模式2:

這種模式又稱為自動再裝入預置數模式;當定時器/計數器的暫存器th0/tl0的值溢位時,定時器/計數器硬體裝置會自動把暫存器th0/tl0的值清0,以重新開始操作;但是有時候,我們的定時/計數操作是需要多次重複定時/計數的,如果溢位時不做任何處理,那麼,在第二輪定時/計數時就是從0開始定時/計數了,而這並不是我們想要的;所以,要保證每次溢位之後,在重新開始定時/計數的操作是我們想要的,那就要把預置數(時間常數)重新裝入某個地方;而重新裝入預置數的操作是硬體裝置自動完成的,不需要人工干預所以,這種工作模式就叫自動再裝入預置數方式;既然需要重新裝入預置數,那麼預置數就必須要存放在某個地方,才能保證重灌操作成功;在工作模式2中,把自動重裝入的預置數存放在定時器/計數器的暫存器的高8位中,也就是存放在th0中,而只留下tl0參與定時/計數操作;顯然,定時/計數的方位小了很多;

注:這個工作模式常用於波特率發生器(串列埠通訊),t1工作在串列埠模式2;用於這種方式時,定時器就是為了提供乙個時間基準;計數溢位之後,不需要做太多的事情,只做一件事就可以,就是重新裝入預置數,再開始重新計數,而且中間不需要任何延時;

工作模式3:

由於定時器/計數器t1沒有工作模式3,如果把定時器/計數器t0設定為工作模式3,那麼tl0和th0將被分割成兩個相互獨立的8位定時器/計數器;

‍四、定時器/計數器的定時/計數範圍

工作方式0,13位定時器/計數器工作模式,最多可計數2的13次方次即:8192次[0-8191];

工作方式1,16位定時器/計數器工作模式,最多可計數2的16次方次即:65536次,[0-65535];

工作方式2,8位定時器/計數器工作模式,計算次數最多為2^8即256,[0-255];

工作方式3,8位定時器/計數器工作模式 ,計算次數最多為2^8即256,[0-255];

預置數的計算公式:預置數=最大值-需要計數的次數;

五、定時器/計數器的控制暫存器

8051微控制器設計了兩個8位的特殊功能暫存器來控制定時器/計數器的工作狀態;這兩個特殊功能暫存器分別是tmod和tcon;它倆都在特殊功能暫存器區;

1、工作模式控制暫存器tmod(89h):

2、工作狀態控制暫存器tcon(88h):

六、定時器/計數器的初始化

注:由於8051微控制器的定時器/計數器使用的時鐘脈衝是外部晶振(12mhz)經過12分頻(12mhz/12=1mhz)之後的頻率,所以,乙個時鐘脈衝就是1微秒;所以,8192個脈衝=8192微秒=8.192毫秒; 65536個脈衝=65536微秒=65.536毫秒; 256個脈衝=256微秒=0.256毫秒;

1、設定定時器/計數器的工作模式tmod(常用的是模式1:tmod=0x01);

2、裝入預置數到thx和tlx中(thx=tlx=max(8192/65536/256)-計數次數);

3、如果工作在中斷方式,則需要開定時器/計數器的中斷tcon中的標誌位:tf0/tf1=0/1;

4、啟動定時器/計數器:tr0/tr1=1;

理論知識一大堆,慢慢理解吧,後面通過例子再繼續學習。

微控制器定時器雙擊 關於51微控制器定時器的靈活使用

前段時間,做乙個專案,有串列埠收發指令判斷,按鍵型別判斷,長短按之類,power的定時關電,事件的輪詢掃瞄更新和display的定時掃瞄。這些要求就對定時器提出了要求,但是我的51微控制器只有兩個定時器,其中乙個又有debug口的波特率產生之用。於是乎我可以用的定時器就只剩下了乙個。怎麼辦?可能大家...

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...