AT89C52定時器2工作方式:
定時器2是一個16 位定時/計數器。它既可當定時器使用,也可作為外部事件計數器使用,其工作方式由特殊功能寄
存器T2CON(如表3)的C/T2 位選擇。定時器2 有三種工作方式:捕獲方式,自動重裝載(向上或向下計數)方式和波特率發生器方式,工作方式由T2CON 的控制位來選擇。定時器2 由兩個8 位寄存器TH2 和TL2 組成,在定時器工作方式中,每個機器周期TL2 寄存器的值加1,由于一個機器周期由12 個振蕩時鐘構成,因此,計數速率為振蕩頻率的1/12。在計數工作方式時,當T2 引腳上外部輸入信號產生由1 至0 的下降沿時,寄存器的值加1,在這種工作方式下,每個機器周期的5SP2 期間,對外部輸入進行采樣。若在第一個機器周期中采到的值為1,而在下一個機器周期中采到的值為0,則在緊跟著的下一個周期的S3P1 期間寄存器加1。由于識別1 至0 的跳變需要2 個機器周期(24 個振蕩周期),因此,最高計數速率為振蕩頻率的1/24。為確保采樣的正確性,要求輸入的電平在變化前至少保持一個完整周期的時間,以保證輸入信號至少被采樣一次。 ·捕獲方式:
在捕獲方式下,通過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
?。ㄒ姳?)的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 置位,如果 中斷允許,同樣產生中斷。
AT89C52定時器
定時器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中的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)。 ·可編程時鐘輸出:定時器2 可通過編程從P1.0 輸出一個占空比為50%的時鐘信號,如圖8 所示。P1.0 引腳除了是一個標準的I/O 口外,還可以通過編程使其作為定時/計數器2 的外部時鐘輸入和輸出占空比50%的時鐘脈沖。當時鐘振蕩頻率為16MHz 時,輸 出時鐘頻率范圍為61Hz—4MHz。
當設置定時/計數器2 為時鐘發生器時,C/T2(T2CON .1)=0,T2OE (T2MOD.1) =1,必須由TR2(T2CON.2)啟動或停止定時器。時鐘輸出頻率取決于振蕩頻率和定時器2 捕獲寄存器(RCAP2H,RCAP2L)的重新裝載值,公式如下:
輸出時鐘頻率=振蕩器頻率/{4*[65536-(RCP2H,RCP2L)]}
在時鐘輸出方式下,定時器2 的翻轉不會產生中斷,這個特性與作為波特率發生器使用時相仿。定時器2 作為波特率發生器使用時,還可作為時鐘發生器使用,但需要注意的是波特率和時鐘輸出頻率不能分開確定,這是因為它們同使用 RCAP2L和RCAP2L。 ·UART:
AT89C52的UART 工作方式與AT89C51 工作方式相同。 ·中斷:AT89C52 共有6 個中斷向量:兩個外中斷(INT0 和INT1),3 個定時器中斷(定時器0、1、2)和串行口中斷。所有 這些中斷源如圖9 所示。
這些中斷源可通過分別設置專用寄存器IE 的置位或清0 來控制每一個中斷的允許或禁止。IE 也有一個總禁止位EA, 它能控制所有中斷的允許或禁止。
注意表5 中的IE.6 為保留位,在AT89C51 中IE.5 也是保留位。程序員不應將“1”寫入這些位,它們是將來AT89 系 列產品作為擴展用的。定時器2 的中斷是由T2CON 中的TF2 和EXF2 邏輯或產生的,當轉向中斷服務程序時,這些標志位不能被硬件清除,
事實上,服務程序需確定是TF2 或EXF2 產生中斷,而由軟件清除中斷標志位。 定時器0 和定時器1 的標志位TF0 和TF1 在定時器溢出那個機器周期的S5P2 狀態置位,而會在下一個機器周期才查詢到該中斷標志。然而,定時器2 的標志位TF2 在定時器溢出的那個機器周期的S2P2 狀態置位,并在同一個機器周期內查詢到該標志。
評論
查看更多