AT89C52是一個低電壓,高性能CMOS 8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業中有著廣泛的應用。
AT89C52單片機硬件結構
如圖3-1所示,為AT89C52的硬件結構圖。AT89C52單片機的內部結構與MCS-51系列單片機的構成基本相同。CPU是由運算器和控制器所構成的。運算器主要用來對操作數進行算術、邏輯運算和位操作的。控制器是單片機的指揮控制部件,主要任務的識別指令,并根據指令的性質控制單片機各功能部件,從而保證單片機各部分能自動而協調地工作。它的程序存儲器為8K字節可重擦寫Flash閃速存儲器,閃爍存儲器允許在線+5V電擦除、電寫入或使用編程器對其重復編程。數據存儲器比51系列的單片機相比大了許多為256字節RAM。AT89C52單片機的指令系統和引腳功能與MCS-51的完全兼容。
主要性能參數
? 8K字節可重擦寫Flash閃速存儲器
? 1000次可擦寫周期
? 全靜態操作:0Hz-24MHz
? 三級加密程序存儲器
? 256×8字節內部RAM
? 32個可編程I/O口線
? 3個16位定時/計數器
? 8個中斷源
? 可編程串行UART通道
? 低功耗空閑和掉電模式
AT89C52外部引腳圖
AT89C52管腳說明
VCC:電源 GND:接地
P0口:P0口是一個8位漏級開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏輯電平。對P0口端口寫“1”時,引腳作高阻抗輸入。當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,P0具有內部上拉電阻。
在flash編程時,P0口也用來接受指令字節:在程序效驗時,輸出指令字節。程序效驗時,需要外部上拉電阻。
P1口:P1口是一個具有內部上拉電阻的8位是雙向I/O口,P1的輸出緩沖級可驅動(吸收或輸出電流)4個TTL邏輯電平。對P1口寫“1”時,內部上拉電阻的原因,將輸出電流ILL。
AT89C52晶振特性
AT89C52單片機有一個用于構成內部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端。石英晶體和陶瓷諧振器都可以用來一起構成自激振蕩器。從外部時鐘遠驅動器件的話,XTAL2可以不接,而從XTAL1接入。由于外部時鐘信號經過二分頻觸發后作為外部時鐘電路輸入的,所以對外部時鐘信號的占空比沒有其它要求,最長低電平持續時間和最少高電平持續時間等還是要符合要求的。
石英晶振 C1,C2=30PF+-10PF 陶瓷諧振器 C1,C2=40PF+-10PF
AT89C52單片機最小系統接口電路設計
AT89C52與時鐘電路(包括晶體振蕩器、電容C19、C20),上電復位電路(包括R42、C5、S3、VD1、C3、R9)構成單片機的最小系統。其中,晶體振蕩器選用12MHz的高穩定無源晶體振蕩器,它與AT89C52中的反向放大器構成振蕩器,給CPU提供高穩定的時鐘信號。電容C19、C20可起頻率微調作用,電容值在5pF~30pF之間選擇,本電路選20pF。電容C5和電阻R42構成上電復位電路。電源開啟時,電源對電容C5 充電,在CPU的復位端產生一高脈沖。只要高電平的維持時間大于兩個機器周期(24 個振蕩周期)。CPU就可復位。二極管VD1的作用是當斷電時,可使電容C5所儲存的 電荷迅速釋放,以便下次上電時可靠復位。電容C5可濾除高頻干擾,防止單片機誤復位。按鍵S3和電阻R9構成按鍵復位電路。
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 狀態置位,并在同一個機器周期內查詢到該標志。
評論
查看更多