⑴ 單片機c語言里怎麼用2個定時器
有幾個步驟。
首先說明一下幾個和定時器有關的寄存器。
第一,方式控制寄存器TMOD,地址89H,不可位定址,這個寄存器可以對定時器的工作方式進行設置。
第二,TCON寄存器,地址88H,可以位定址,控制寄存器的開啟關閉,寄存器的溢出標志也在這個寄存器中。
第三,中斷控制寄存器IE,用來控制各中斷的開啟或關閉。
現在開始介紹2個定時器的用法
1。設置TMOD
2。分別給兩個定時器賦初值
3。開中斷
4。開啟定時器
5。設置循環語句等待中斷
下面舉一個例子:
#include
void
main(void)
{
TMOD=0x01;//前四位控制t1,後四位控制t0
TH0=0x00;//賦初值
TL0=0x00;
TH1=0x43;
TL1=0x32;
EA=1;//開總中斷
ET0=1;//開t0中斷
ET1=1;//開t1中斷
TR0=1;//開啟定時器t0
TR1=1;//開啟定時器t1
while(1)//等待中斷
{
}
}
⑵ mcs-51單片機定時器工作方式2是指的什麼工作方式
不同工作方式對應計數器位數不同
方式2是八位自動重裝載定時器,也就是計數器最多記256個數,之後會自動重裝初始值
⑶ 52單片機定時器2,T2口怎麼用
T2CON(T2的控制寄存器),位元組地址0C8H:
位地址
符號TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RT2
各位的定義如下:
TF2:定時/計數器2溢出標志,T2溢出時置位,並申請中斷。只能用軟體清除,但T2作為波特率發生器使用的時候,(即RCLK=1或TCLK=1),T2溢出時不對TF2置位。
EXF2:當EXEN2=1時,且T2EX引腳(P1.0)出現負跳變而造成T2的捕獲或重裝的時候,EXF2置位並申請中斷。EXF2也是只能通過軟體來清除的。
RCLK:串列接收時鍾標志,只能通過軟體的置位或清除;用來選擇T1(RCLK=0)還是T2(RCLK=1)來作為串列接收的波特率產生器
TCLK:串列發送時鍾標志,只能通過軟體的置位或清除;用來選擇T1(TCLK=0)還是T2(TCLK=1)來作為串列發送的波特率產生器
EXEN2:T2的外部允許標志,只能通過軟體的置位或清除;EXEN2=0:禁止外部時鍾觸發T2;EXEN2=1:當T2未用作串列波特率發生器時,允許外部時鍾觸發T2,當T2EX引腳輸入一個負跳變的時候,將引起T2的捕獲或重裝,並置位EXF2,申請中斷。
TR2:T2的啟動控制標志;TR2=0:停止T2;TR2=1:啟動T2
C/T2:T2的定時方式或計數方式選擇位。只能通過軟體的置位或清除;C/T2=0:選擇T2為定時器方式;C/T2=1:選擇T2為計數器方式,下降沿觸發。
CP/RT2:捕獲/重裝載標志,只能通過軟體的置位或清除。CP/RT2=0時,選擇重裝載方式,這時若T2溢出(EXEN2=0時)或者T2EX引腳(P1.0)出現負跳變(EXEN2=1時),將會引起T2重裝載;CP/RT2=1時,選擇捕獲方式,這時若T2EX引腳(P1.0)出現負跳變(EXEN2=1時),將會引起T2捕獲操作。但是如果RCLK=1或TCLK=1時,CP/RT2控制位不起作用的,被強制工作於定時器溢出自動重裝載模式。
T2MOD(方式寄存器),位元組地址0C9H:
D7D6D5D4D3D2D1D0
------------T2OEDCEN
T2OE:T2輸出允許位,當T2OE=1的時候,允許時鍾輸出到P1.0。(僅對80C54/80C58有效)
DCEN:向下計數允許位。DCEN=1是允許T2向下計數,否則向上計數。
T2的數據寄存器TH2、TL2和T0、T1的用法一樣,而捕獲寄存器RCAP2H、RCAP2L只是在捕獲方式下,產生捕獲操作時自動保存TH2、TL2的值。
以上是T2的相關寄存器的描述,其實用法上跟T0、T1是差不多的,只是功能增強了,設置的東西多了而已。
定時/計數器2其實用到最多的就是T2CON這個寄存器啦,它設定的定時和計數的方式。有三種工作方式,捕獲,自動重裝,波特率發生器。下面我是在網路裡面找的少許資料:
捕獲方式:
在捕獲方式下,通過T2CON控制位EXEN2來選擇兩種方式。如果EXEN2=0,定時器2是一個16位定時器或計數器,計數溢出時,對T2CON的溢出標志TF2置位,同時激活中斷。如果EXEN2=1,定時器2完成相同的操作,而當T2EX引腳外部輸入信號發生1至0負跳變時,也出現TH2和TL2中的值分別被捕獲到RCAP2H和RCAP2L中。另外,T2EX引腳信號的跳變使得T2CON中的EXF2置位,與TF2相仿,EXF2也會激活中斷。捕獲方式如圖4所示。
自動重裝載(向上或向下計數器)方式:
當定時器2工作於16位自動重裝載方式時,能對其編程為向上或向下計數方式,這個功能可通過特殊功能寄存器T2CON(見表5)的DCEN位(允許向下計數)來選擇的。復位時,DCEN位置「0」,定時器2默認設置為向上計數。當DCEN置位時,定時器2既可向上計數也可向下計數,這取決於T2EX引腳的值,參見圖5,當DCEN=0時,定時器2自動設置為向上計數,在這種方式下,T2CON中的EXEN2控制位有兩種選擇,若EXEN2=0,定時器2為向上計數至0FFFFH溢出,置位TF2激活中斷,同時把16位計數寄存器RCAP2H和RCAP2L重裝載,RCAP2H和RCAP2L的值可由軟體預置。若EXEN2=1,定時器2的16位重裝載由溢出或外部輸入端T2EX從1至0的下降沿觸發。這個脈沖使EXF2置位,如果中斷允許,同樣產生中斷。
定時器2的中斷入口地址是:002BH——0032H。
當DCEN=1時,允許定時器2向上或向下計數,如圖6所示。這種方式下,T2EX引腳控制計數器方向。T2EX引腳為邏輯「1」時,定時器向上計數,當計數0FFFFH向上溢出時,置位TF2,同時把16位計數寄存器RCAP2H和RCAP2L重裝載到TH2和TL2中。T2EX引腳為邏輯「0」時,定時器2向下計數,當TH2和TL2中的數值等於RCAP2H和RCAP2L中的值時,計數溢出,置位TF2,同時將0FFFFH數值重新裝入定時寄存器中。
當定時/計數器2向上溢出或向下溢出時,置位EXF2位。
波特率發生器:
當T2CON(表3)中的TCLK和RCLK置位時,定時/計數器2作為波特率發生器使用。如果定時/計數器2作為發送器或接收器,其發送和接收的波特率可以是不同的,定時器1用於其它功能,如圖7所示。若RCLK和TCLK置位,則定時器2工作於波特率發生器方式。
波特率發生器的方式與自動重裝載方式相仿,在此方式下,TH2翻轉使定時器2的寄存器用RCAP2H和RCAP2L中的16位數值重新裝載,該數值由軟體設置。
在方式1和方式3中,波特率由定時器2的溢出速率根據下式確定:
方式1和3的波特率=定時器的溢出率/16
定時器既能工作於定時方式也能工作於計數方式,在大多數的應用中,是工作在定時方式(C/T2=0)。定時器2作為波特率發生器時,與作為定時器的操作是不同的,通常作為定時器時,在每個機器周期(1/12振盪頻率)寄存器的值加1,而作為波特率發生器使用時,在每個狀態時間(1/2振盪頻率)寄存器的值加1。波特率的計算公式如下:
方式1和3的波特率=振盪頻率/{32*[65536-(RCP2H,RCP2L)]}式中(RCAP2H,RCAP2L)是RCAP2H和RCAP2L中的16位無符號數。
定時器2作為波特率發生器使用的電路如圖7所示。T2CON中的RCLK或TCLK=1時,波特率工作方式才有效。在波特率發生器工作方式中,TH2翻轉不能使TF2置位,故而不產生中斷。但若EXEN2置位,且T2EX端產生由1至0的負跳變,則會使EXF2置位,此時並不能將(RCAP2H,RCAP2L)的內容重新裝入TH2和TL2中。所以,當定時器2作為波特率發生器使用時,T2EX可作為附加的外部中斷源來使用。需要注意的是,當定時器2工作於波特率器時,作為定時器運行(TR2=1)時,並不能訪問TH2和TL2。因為此時每個狀態時間定時器都會加1,對其讀寫將得到一個不確定的數值。
然而,對RCAP2則可讀而不可寫,因為寫入操作將是重新裝載,寫入操作可能令寫和/或重裝載出錯。在訪問定時器2或RCAP2寄存器之前,應將定時器關閉(清除TR2)。