AT89C52是一個低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。
AT89C52單片機(jī)硬件結(jié)構(gòu)
如圖3-1所示,為AT89C52的硬件結(jié)構(gòu)圖。AT89C52單片機(jī)的內(nèi)部結(jié)構(gòu)與MCS-51系列單片機(jī)的構(gòu)成基本相同。CPU是由運(yùn)算器和控制器所構(gòu)成的。運(yùn)算器主要用來對操作數(shù)進(jìn)行算術(shù)、邏輯運(yùn)算和位操作的??刂破魇菃纹瑱C(jī)的指揮控制部件,主要任務(wù)的識別指令,并根據(jù)指令的性質(zhì)控制單片機(jī)各功能部件,從而保證單片機(jī)各部分能自動而協(xié)調(diào)地工作。它的程序存儲器為8K字節(jié)可重擦寫Flash閃速存儲器,閃爍存儲器允許在線+5V電擦除、電寫入或使用編程器對其重復(fù)編程。數(shù)據(jù)存儲器比51系列的單片機(jī)相比大了許多為256字節(jié)RAM。AT89C52單片機(jī)的指令系統(tǒng)和引腳功能與MCS-51的完全兼容。
主要性能參數(shù)
? 8K字節(jié)可重擦寫Flash閃速存儲器
? 1000次可擦寫周期
? 全靜態(tài)操作:0Hz-24MHz
? 三級加密程序存儲器
? 256×8字節(jié)內(nèi)部RAM
? 32個可編程I/O口線
? 3個16位定時(shí)/計(jì)數(shù)器
? 8個中斷源
? 可編程串行UART通道
? 低功耗空閑和掉電模式
AT89C52外部引腳圖
AT89C52管腳說明
VCC:電源 GND:接地
P0口:P0口是一個8位漏級開路的雙向I/O口。作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0口端口寫“1”時(shí),引腳作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。
在flash編程時(shí),P0口也用來接受指令字節(jié):在程序效驗(yàn)時(shí),輸出指令字節(jié)。程序效驗(yàn)時(shí),需要外部上拉電阻。
P1口:P1口是一個具有內(nèi)部上拉電阻的8位是雙向I/O口,P1的輸出緩沖級可驅(qū)動(吸收或輸出電流)4個TTL邏輯電平。對P1口寫“1”時(shí),內(nèi)部上拉電阻的原因,將輸出電流ILL。
AT89C52晶振特性
AT89C52單片機(jī)有一個用于構(gòu)成內(nèi)部振蕩器的反相放大器,XTAL1和XTAL2分別是放大器的輸入、輸出端。石英晶體和陶瓷諧振器都可以用來一起構(gòu)成自激振蕩器。從外部時(shí)鐘遠(yuǎn)驅(qū)動器件的話,XTAL2可以不接,而從XTAL1接入。由于外部時(shí)鐘信號經(jīng)過二分頻觸發(fā)后作為外部時(shí)鐘電路輸入的,所以對外部時(shí)鐘信號的占空比沒有其它要求,最長低電平持續(xù)時(shí)間和最少高電平持續(xù)時(shí)間等還是要符合要求的。
石英晶振 C1,C2=30PF+-10PF 陶瓷諧振器 C1,C2=40PF+-10PF
AT89C52單片機(jī)最小系統(tǒng)接口電路設(shè)計(jì)
AT89C52與時(shí)鐘電路(包括晶體振蕩器、電容C19、C20),上電復(fù)位電路(包括R42、C5、S3、VD1、C3、R9)構(gòu)成單片機(jī)的最小系統(tǒng)。其中,晶體振蕩器選用12MHz的高穩(wěn)定無源晶體振蕩器,它與AT89C52中的反向放大器構(gòu)成振蕩器,給CPU提供高穩(wěn)定的時(shí)鐘信號。電容C19、C20可起頻率微調(diào)作用,電容值在5pF~30pF之間選擇,本電路選20pF。電容C5和電阻R42構(gòu)成上電復(fù)位電路。電源開啟時(shí),電源對電容C5 充電,在CPU的復(fù)位端產(chǎn)生一高脈沖。只要高電平的維持時(shí)間大于兩個機(jī)器周期(24 個振蕩周期)。CPU就可復(fù)位。二極管VD1的作用是當(dāng)斷電時(shí),可使電容C5所儲存的 電荷迅速釋放,以便下次上電時(shí)可靠復(fù)位。電容C5可濾除高頻干擾,防止單片機(jī)誤復(fù)位。按鍵S3和電阻R9構(gòu)成按鍵復(fù)位電路。
AT89C52定時(shí)器2工作方式:
定時(shí)器2是一個16 位定時(shí)/計(jì)數(shù)器。它既可當(dāng)定時(shí)器使用,也可作為外部事件計(jì)數(shù)器使用,其工作方式由特殊功能寄
存器T2CON(如表3)的C/T2 位選擇。定時(shí)器2 有三種工作方式:捕獲方式,自動重裝載(向上或向下計(jì)數(shù))方式和波特率發(fā)生器方式,工作方式由T2CON 的控制位來選擇。定時(shí)器2 由兩個8 位寄存器TH2 和TL2 組成,在定時(shí)器工作方式中,每個機(jī)器周期TL2 寄存器的值加1,由于一個機(jī)器周期由12 個振蕩時(shí)鐘構(gòu)成,因此,計(jì)數(shù)速率為振蕩頻率的1/12。在計(jì)數(shù)工作方式時(shí),當(dāng)T2 引腳上外部輸入信號產(chǎn)生由1 至0 的下降沿時(shí),寄存器的值加1,在這種工作方式下,每個機(jī)器周期的5SP2 期間,對外部輸入進(jìn)行采樣。若在第一個機(jī)器周期中采到的值為1,而在下一個機(jī)器周期中采到的值為0,則在緊跟著的下一個周期的S3P1 期間寄存器加1。由于識別1 至0 的跳變需要2 個機(jī)器周期(24 個振蕩周期),因此,最高計(jì)數(shù)速率為振蕩頻率的1/24。為確保采樣的正確性,要求輸入的電平在變化前至少保持一個完整周期的時(shí)間,以保證輸入信號至少被采樣一次。 ·捕獲方式:
在捕獲方式下,通過T2CON 控制位EXEN2 來選擇兩種方式。如果EXEN2=0,定時(shí)器2 是一個16 位定時(shí)器或計(jì)數(shù)器,計(jì)數(shù)溢出時(shí),對T2CON 的溢出標(biāo)志TF2 置位,同時(shí)激活中斷。如果EXEN2=1,定時(shí)器2 完成相同的操作,而當(dāng)T2EX 引 腳外部輸入信號發(fā)生1 至0 負(fù)跳變時(shí),也出現(xiàn)TH2 和TL2 中的值分別被捕獲到RCAP2H 和RCAP2L 中。另外,T2EX 引腳信號的跳變使得T2CON 中的EXF2 置位,與TF2 相仿,EXF2 也會激活中斷。捕獲方式如圖4 所示。 ·自動重裝載(向上或向下計(jì)數(shù)器)方式:
當(dāng)定時(shí)器2工作于16位自動重裝載方式時(shí),能對其編程為向上或向下計(jì)數(shù)方式,這個功能可通過特殊功能寄存器T2CON
?。ㄒ姳?)的DCEN 位(允許向下計(jì)數(shù))來選擇的。復(fù)位時(shí),DCEN 位置“0”,定時(shí)器2 默認(rèn)設(shè)置為向上計(jì)數(shù)。當(dāng)DCEN置位時(shí),定時(shí)器2 既可向上計(jì)數(shù)也可向下計(jì)數(shù),這取決于T2EX 引腳的值,參見圖5,當(dāng)DCEN=0 時(shí),定時(shí)器2 自動設(shè)置為向上計(jì)數(shù),在這種方式下,T2CON 中的EXEN2 控制位有兩種選擇,若EXEN2=0,定時(shí)器2 為向上計(jì)數(shù)至0FFFFH 溢出,置位TF2 激活中斷,同時(shí)把16 位計(jì)數(shù)寄存器RCAP2H 和RCAP2L重裝載,RCAP2H 和RCAP2L 的值可由軟件預(yù)置。 若EXEN2=1,定時(shí)器2 的16 位重裝載由溢出或外部輸入端T2EX 從1 至0 的下降沿觸發(fā)。這個脈沖使EXF2 置位,如果 中斷允許,同樣產(chǎn)生中斷。
AT89C52定時(shí)器
定時(shí)器2 的中斷入口地址是:002BH ——0032H 。
當(dāng)DCEN=1 時(shí),允許定時(shí)器2 向上或向下計(jì)數(shù),如圖6 所示。這種方式下,T2EX 引腳控制計(jì)數(shù)器方向。T2EX 引腳為邏輯“1”時(shí),定時(shí)器向上計(jì)數(shù),當(dāng)計(jì)數(shù)0FFFFH 向上溢出時(shí),置位TF2,同時(shí)把16 位計(jì)數(shù)寄存器RCAP2H 和RCAP2L 重裝載到TH2 和TL2 中。 T2EX 引腳為邏輯“0”時(shí),定時(shí)器2 向下計(jì)數(shù),當(dāng)TH2 和TL2 中的數(shù)值等于RCAP2H 和RCAP2L中的值時(shí),計(jì)數(shù)溢出,置位TF2,同時(shí)將0FFFFH 數(shù)值重新裝入定時(shí)寄存器中。
當(dāng)定時(shí)/計(jì)數(shù)器2 向上溢出或向下溢出時(shí),置位EXF2 位。 ·波特率發(fā)生器:當(dāng)T2CON中的TCLK 和RCLK 置位時(shí),定時(shí)/計(jì)數(shù)器2 作為波特率發(fā)生器使用。如果定時(shí)/計(jì)數(shù)器2 作為發(fā)送器或接收器,其發(fā)送和接收的波特率可以是不同的,定時(shí)器1 用于其它功能,如圖7 所示。若RCLK 和TCLK 置位,則定時(shí)器2 工作于波特率發(fā)生器方式。
波特率發(fā)生器的方式與自動重裝載方式相仿,在此方式下,TH2 翻轉(zhuǎn)使定時(shí)器2 的寄存器用RCAP2H 和RCAP2L 中的16 位數(shù)值重新裝載,該數(shù)值由軟件設(shè)置。在方式1 和方式3 中,波特率由定時(shí)器2 的溢出速率根據(jù)下式確定: 方式1和3的波特率=定時(shí)器的溢出率/16定時(shí)器既能工作于定時(shí)方式也能工作于計(jì)數(shù)方式,在大多數(shù)的應(yīng)用中,是工作在定時(shí)方式(C/T2=0)。定時(shí)器2 作為波特率發(fā)生器時(shí),與作為定時(shí)器的操作是不同的,通常作為定時(shí)器時(shí),在每個機(jī)器周期(1/12 振蕩頻率)寄存器的值加1,而作為波特率發(fā)生器使用時(shí),在每個狀態(tài)時(shí)間(1/2 振蕩頻率)寄存器的值加1。波特率的計(jì)算公式如下:
方式1和3的波特率=振蕩頻率/{32*[65536-(RCP2H,RCP2L)]}
式中(RCAP2H,RCAP2L)是RCAP2H 和RCAP2L中的16 位無符號數(shù)。 定時(shí)器2 作為波特率發(fā)生器使用的電路如圖7 所示。T2CON 中的RCLK 或TCLK=1 時(shí),波特率工作方式才有效。在波特率發(fā)生器工作方式中,TH2 翻轉(zhuǎn)不能使TF2 置位,故而不產(chǎn)生中斷。但若EXEN2 置位,且T2EX 端產(chǎn)生由1 至0 的負(fù)跳變,則會使EXF2 置位,此時(shí)并不能將(RCAP2H,RCAP2L)的內(nèi)容重新裝入TH2 和TL2 中。所以,當(dāng)定時(shí)器2 作為波特率發(fā)生器使用時(shí),T2EX 可作為附加的外部中斷源來使用。需要注意的是,當(dāng)定時(shí)器2 工作于波特率器時(shí),作為定時(shí)器運(yùn)行(TR2=1)時(shí),并不能訪問TH2 和TL2。因?yàn)榇藭r(shí)每個狀態(tài)時(shí)間定時(shí)器都會加1,對其讀寫將得到一個不確定的 數(shù)值。
然而,對RCAP2 則可讀而不可寫,因?yàn)閷懭氩僮鲗⑹侵匦卵b載,寫入操作可能令寫和/或重裝載出錯。在訪問定時(shí)器2或RCAP2 寄存器之前,應(yīng)將定時(shí)器關(guān)閉(清除TR2)。 ·可編程時(shí)鐘輸出:定時(shí)器2 可通過編程從P1.0 輸出一個占空比為50%的時(shí)鐘信號,如圖8 所示。P1.0 引腳除了是一個標(biāo)準(zhǔn)的I/O 口外,還可以通過編程使其作為定時(shí)/計(jì)數(shù)器2 的外部時(shí)鐘輸入和輸出占空比50%的時(shí)鐘脈沖。當(dāng)時(shí)鐘振蕩頻率為16MHz 時(shí),輸 出時(shí)鐘頻率范圍為61Hz—4MHz。
當(dāng)設(shè)置定時(shí)/計(jì)數(shù)器2 為時(shí)鐘發(fā)生器時(shí),C/T2(T2CON .1)=0,T2OE (T2MOD.1) =1,必須由TR2(T2CON.2)啟動或停止定時(shí)器。時(shí)鐘輸出頻率取決于振蕩頻率和定時(shí)器2 捕獲寄存器(RCAP2H,RCAP2L)的重新裝載值,公式如下:
輸出時(shí)鐘頻率=振蕩器頻率/{4*[65536-(RCP2H,RCP2L)]}
在時(shí)鐘輸出方式下,定時(shí)器2 的翻轉(zhuǎn)不會產(chǎn)生中斷,這個特性與作為波特率發(fā)生器使用時(shí)相仿。定時(shí)器2 作為波特率發(fā)生器使用時(shí),還可作為時(shí)鐘發(fā)生器使用,但需要注意的是波特率和時(shí)鐘輸出頻率不能分開確定,這是因?yàn)樗鼈兺褂?RCAP2L和RCAP2L。 ·UART:
AT89C52的UART 工作方式與AT89C51 工作方式相同。 ·中斷:AT89C52 共有6 個中斷向量:兩個外中斷(INT0 和INT1),3 個定時(shí)器中斷(定時(shí)器0、1、2)和串行口中斷。所有 這些中斷源如圖9 所示。
這些中斷源可通過分別設(shè)置專用寄存器IE 的置位或清0 來控制每一個中斷的允許或禁止。IE 也有一個總禁止位EA, 它能控制所有中斷的允許或禁止。
注意表5 中的IE.6 為保留位,在AT89C51 中IE.5 也是保留位。程序員不應(yīng)將“1”寫入這些位,它們是將來AT89 系 列產(chǎn)品作為擴(kuò)展用的。定時(shí)器2 的中斷是由T2CON 中的TF2 和EXF2 邏輯或產(chǎn)生的,當(dāng)轉(zhuǎn)向中斷服務(wù)程序時(shí),這些標(biāo)志位不能被硬件清除,
事實(shí)上,服務(wù)程序需確定是TF2 或EXF2 產(chǎn)生中斷,而由軟件清除中斷標(biāo)志位。 定時(shí)器0 和定時(shí)器1 的標(biāo)志位TF0 和TF1 在定時(shí)器溢出那個機(jī)器周期的S5P2 狀態(tài)置位,而會在下一個機(jī)器周期才查詢到該中斷標(biāo)志。然而,定時(shí)器2 的標(biāo)志位TF2 在定時(shí)器溢出的那個機(jī)器周期的S2P2 狀態(tài)置位,并在同一個機(jī)器周期內(nèi)查詢到該標(biāo)志。
評論
查看更多