相關簡介
1、兼容MCS51指令系統
2、8kB可反複擦寫(大于1000次)Flash ROM;
3、32個雙向I/O口;
4、256x8bit内部RAM;
5、3個16位可編程定時/計數器中斷;
6、時鐘頻率0-24MHz;
7、2個串行中斷,可編程UART串行通道;
8、2個外部中斷源,共8個中斷源;
9、2個讀寫中斷口線,3級加密位;
10、低功耗空閑和掉電模式,軟件設置睡眠和喚醒功能;
11、有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以适應不同産品的需求。
工作原理
AT89C52為8 位通用微處理器,采用工業标準的C51内核,在内部功能及管腳排布上與通用的8xc52 相同,其主要用于會聚調整時的功能控制。功能包括對會聚主IC 内部寄存器、數據RAM及外部接口等功能部件的初始化,會聚調整控制,會聚測試圖控制,紅外遙控信号IR的接收解碼及與主闆CPU通信等。主要管腳有:XTAL1(19 腳)和XTAL2(18 腳)為振蕩器輸入輸出端口,外接12MHz 晶振。RST/Vpd(9 腳)為複位輸入端口,外接電阻電容組成的複位電路。VCC(40 腳)和VSS(20 腳)為供電端口,分别接+5V電源的正負端。P0~P3 為可編程通用I/O 腳,其功能用途由軟件定義,在本設計中,P0 端口(32~39 腳)被定義為N1 功能控制端口,分别與N1的相應功能管腳相連接,13 腳定義為IR輸入端,10 腳和11腳定義為I2C總線控制端口,分别連接N1的SDAS(18腳)和SCLS(19腳)端口,12 腳、27 腳及28 腳定義為握手信号功能端口,連接主闆CPU 的相應功能端,用于當前制式的檢測及會聚調整狀态進入的控制功能。
P0口
P0 口是一組8 位漏極開路型雙向I/O 口, 也即地址/數據總線複用口。作為輸出口用時,每位能吸收電流的
方式驅動8 個TTL邏輯門電路,對端口P0 寫“1”時,可作為高阻抗輸入端用。
在訪問外部數據存儲器或程序存儲器時,這組口線分時轉換地址(低8 位)和數據總線複用,在訪問期間激活内部上拉電阻。
在Flash編程時,P0 口接收指令字節,而在程序校驗時,輸出指令字節,校驗時,要求外接上拉電阻。
P1口
P1 是一個帶内部上拉電阻的8 位雙向I/O 口, P1 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對端口寫“1”,通過内部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因為内部存在上拉電阻,某個引腳被外部信号拉低時會輸出一個電流(IIL)。與AT89C51 不同之處是,P1.0 和P1.1 還可分别作為定時/計數器2 的外部計數輸入(P1.0/T2)和輸入(P1.1/T2EX)。
P2口
P2 是一個帶有内部上拉電阻的8 位雙向I/O 口,P2 的輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏輯門電路。對端口P2 寫“1”,通過内部的上拉電阻把端口拉到高電平,此時可作輸入口,作輸入口使用時,因為内部存在上拉電阻,某個引腳被外部信号拉低時會輸出一個電流(IIL)。
在訪問外部程序存儲器或16 位地數據存儲器(例如執行MOVX @DPTR 指令)時,P2 口送出高8 位地址數據。在訪問8 位地址的外部數據存儲器(如執行MOVX@RI 指令)時,P2 口輸出P2鎖存器的内容。
Flash編程或校驗時,P2亦接收高位地址和一些控制信号。
P3口
P3 口是一組帶有内部上拉電阻的8 位雙向I/O 口。P3 口輸出緩沖級可驅動(吸收或輸出電流)4 個TTL 邏
輯門電路。對P3 口寫入“1”時,它們被内部上拉電阻拉高并可作為輸入端口。此時,被外部拉低的P3 口将用上拉電阻輸出電流(IIL)。
P3 口除了作為一般的I/O 口線外,更重要的用途是它的第二功能
P3 口還接收一些用于Flash閃速存儲器編程和程序校驗的控制信号。
RST
複位輸入。當振蕩器工作時,RST引腳出現兩個機器周期以上高電平将使單片機複位。
ALE/PROG
當訪問外部程序存儲器或數據存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8 位字
節。一般情況下,ALE 仍以時鐘振蕩頻率的1/6 輸出固定的脈沖信号,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當訪問外部數據存儲器時将跳過一個ALE 脈沖。
對Flash存儲器編程期間,該引腳還用于輸入編程脈沖(PROG)。
如有必要,可通過對特殊功能寄存器(SFR)區中的8EH 單元的D0 位置位,可禁止ALE 操作。該位置位後,隻有一條
MOVX 和MOVC指令才能将ALE 激活。此外,該引腳會被微弱拉高,單片機執行外部程序時,應設置ALE 禁止位無效。
PSEN
程序儲存允許(PSEN)輸出是外部程序存儲器的讀選通信号,當AT89C52 由外部程序存儲器取指令(或數
據)時,每個機器周期兩次PSEN 有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,将跳過兩次PSEN信号。
EA/VPP
外部訪問允許。欲使CPU 僅訪問外部程序存儲器(地址為0000H—FFFFH),EA 端必須保持低電平(接
地)。需注意的是:如果加密位LB1 被編程,複位時内部會鎖存EA端狀态。
如EA端為高電平(接Vcc端),CPU 則執行内部程序存儲器中的指令。
Flash存儲器編程時,該引腳加上+12V 的編程允許電源Vpp,當然這必須是該器件是使用12V編程電壓Vpp。
XTAL1
振蕩器反相放大器及内部時鐘發生器的輸入端。
XTAL2
振蕩器反相放大器的輸出端。
特殊功能
在AT89C52 片内存儲器中,80H-FFH 共128 個單元為特殊功能寄存器(SFR),SFR 的地址空間映象如表2 所示。
并非所有的地址都被定義,從80H—FFH 共128 個字節隻有一部分被定義,還有相當一部分沒有定義。對沒有定義的單元讀寫将是無效的,讀出的數值将不确定,而寫入的數據也将丢失。
不應将數據寫入未定義的單元,由于這些單元在将來的産品中可能賦予新的功能,在這種情況下,複位後這些單元數值總是“0”。
AT89C52除了有AT89C51所有的定時/計數器0 和定時/計數器1 外,還增加了一個定時/計數器2。定時/計數器2 的控制和狀态位位于T2CON(參見表3)T2MOD(參見表4),寄存器對(RCAP2H、RCAP2L)是定時器2 在16 位捕獲方式或16 位自動重裝載方式下的捕獲/自動重裝載寄存器。
數據存儲
AT89C52 有256 個字節的内部RAM,80H-FFH 高128 個字節與特殊功能寄存器(SFR)地址是重疊的,也就是高128字節的RAM 和特殊功能寄存器的地址是相同的,但物理上它們是分開的。
當一條指令訪問7FH 以上的内部地址單元時,指令中使用的尋址方式是不同的,也即尋址方式決定是訪問高128 字節RAM 還是訪問特殊功能寄存器。如果指令是直接尋址方式則為訪問特殊功能寄存器。
例如,下面的直接尋址指令訪問特殊功能寄存器0A0H(即P2 口)地址單元。
MOV 0A0H,#data
間接尋址指令訪問高128 字節RAM,例如,下面的間接尋址指令中,R0 的内容為0A0H,則訪問數據字節地址為0A0H,而不是P2 口(0A0H)。
MOV @R0,#data
堆棧操作也是間接尋址方式,所以,高128 位數據RAM 亦可作為堆棧區使用。
·定時器0和定時器1:
AT89C52的定時器0和定時器1 的工作方式與AT89C51 相同。
片上資源
定時器
基本特性:
定時器2 是一個16 位定時/計數器。它既可當定時器使用,也可作為外部事件計數器使用,其工作方式由特殊功能寄存器T2CON的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 也會激活中斷。
自動重裝方式:當定時器2工作于16位自動重裝載方式時,能對其編程為向上或向下計數方式,這個功能可通過特殊功能寄存器T2CON的DCEN 位(允許向下計數)來選擇的。複位時,DCEN 位置“0”,定時器2 默認設置為向上計數。當DCEN置位時,定時器2 既可向上計數也可向下計數,這取決于T2EX 引腳的值,當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 向上或向下計數。這種方式下,T2EX引腳控制計數器方向。T2EX引腳為邏輯“1”時,定時器向上計數,當計數0FFFFH 向上溢出時,置位TF2,同時把16 位計數寄存器RCAP2H 和RCAP2L 重裝載到TH2 和TL2 中。 T2EX 引腳為邏輯“0”時,定時器2 向下計數,當TH2 和TL2 中的數值等于RCAP2H 和RCAP2L中的值時,計數溢出,置位TF2,同時将0FFFFH 數值重新裝入定時寄存器中。當定時/計數器2 向上溢出或向下溢出時,置位EXF2 位。
波特率發生器:中的TCLK 和RCLK 置位時,定時/計數器2 作為波特率發生器使用。如果定時/計數器2 作為發送器或接收器,其發送和接收的波特率可以是不同的,定時器1 用于其它功能。若RCLK 和TCLK 置位,則定時器2工作于波特率發生器方式。波特率發生器的方式與自動重裝載方式相仿,在此方式下,TH2 翻轉使定時器2 的寄存器用RCAP2H 和RCAP2L 中的16位數值重新裝載,該數值由軟件設置。
波特率由定時器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 位無符号數。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 中有一個用于構成内部振蕩器的高增益反相放大器,引腳XTAL1 和XTAL2 分别是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構成自激振蕩器,振蕩電路參見圖10。外接石英晶體(或陶瓷諧振器)及電容C1、C2 接在放大器的反饋回路中構成并聯振蕩電路。對外接電容C1、C2 雖然沒有十分嚴格的要求,但電容容量的大小會輕微影響振蕩頻率的高低、振蕩器工作的穩定性、起振的難易程序及溫度穩定性,如果使用石英晶體,我們推薦電容使用30pF±10pF,而如使用陶瓷諧振器建議選擇40pF±10pF。
用戶也可以采用外部時鐘。采用外部時鐘的電路如圖10 右圖所示。這種情況下,外部時鐘脈沖接到XTAL1 端,即内部時鐘發生器的輸入端,XTAL2 則懸空。由于外部時鐘信号是通過一個2 分頻觸發器後作為内部時鐘信号的,所以對外部時鐘信号的占空比沒有特殊要求,但最小高電平持續時間和最大的低電平持續時間應符合産品技術條件的要求。
中斷
AT89C52 共有6 個中斷向量:兩個外中斷(INT0 和INT1),3 個定時器中斷(定時器0、1、2)和串行口中斷。
這些中斷源可通過分别設置專用寄存器IE 的置位或清0 來控制每一個中斷的允許或禁止。IE 也有一個總禁止位EA,它能控制所有中斷的允許或禁止。
定時器2 的中斷是由T2CON 中的TF2 和EXF2邏輯或産生的,當轉向中斷服務程序時,這些标志位不能被硬件清除,事實上,服務程序需确定是TF2 或EXF2 産生中斷,而由軟件清除中斷标志位。定時器0 和定時器1 的标志位TF0 和TF1 在定時器溢出那個機器周期的S5P2 狀态置位,而會在下一個機器周期才查詢到該中斷标志。然而,定時器2 的标志位TF2 在定時器溢出的那個機器周期的S2P2 狀态置位,并在同一個機器周期内查詢到該标志。
低功耗
節電模式
在空閑工作模式狀态, CPU 自身處于睡眠狀态而所有片内的外設仍保持激活狀态,這種方式由軟件産生。此時,同
時将片内RAM 和所有特殊功能寄存器的内容凍結。空閑模式可由任何允許的中斷請求或硬件複位終止。
由硬件複位終止空閑狀态隻需兩個機器周期有效複位信号,在此狀态下,片内硬件禁止訪問内部RAM,但可以訪問端
口引腳,當用複位終止空閑方式時,為避免可能對端口産生意外寫入,激活空閑模式的那條指令後一條指令不應是一條對
端口或外部存儲器的寫入指令。
掉電模式
在掉電模式下,振蕩器停止工作,進入掉電模式的指令是最後一條被執行的指令,片内RAM 和特殊功能寄存器的内
容在終止掉電模式前被凍結。退出掉電模式的唯一方法是硬件複位,複位後将重新定義全部特殊功能寄存器,但不改變RAM
中的内容,在Vcc恢複到正常工作電平前,複位應無效,且必須保持一定時間以使振蕩器重啟動并穩定工作。
編程加密
Flash
AT89C52單片機内部有8k字節的Flash PEROM,這個Flash存儲陣列出廠時已處于擦除狀态(即所有存儲單元的内容均為FFH),用戶随時可對其進行編程。編程接口可接收高電壓(+12V)或低電壓(Vcc)的允許編程信号。低電壓編程模式适合于用戶在線編程系統,而高電壓編程模式可與通用EPROM編程器兼容。
AT89C52單片機中,有些屬于低電壓編程方式,而有些則是高電壓編程方式,用戶可從芯片上的型号和讀取芯片内的簽名字節得該信息。AT89C52 的程序存儲器陣列是采用字節寫入方式編程的,每次寫入一個字節,要對整個芯片内的PEROM 程序存儲器寫入一個非空字節,必須使用片擦除的方式将整個存儲器的内容清除。
編程方法
編程前,須按表9 和圖11 所示設置好地址、數據及控制信号, AT89C52 編程方法如下:
1. 在地址線上加上要編程單元的地址信号。
2. 在數據線上加上要寫入的數據字節。
3. 激活相應的控制信号。
4. 在高電壓編程方式時,将EA/Vpp 端加上+12V 編程電壓。
5. 每對Flash 存儲陣列寫入一個字節或每寫入一個程序加密位,加上一個ALE/PROG編程脈沖。每個字節寫入周期
是自身定時的,通常約為1.5ms。重複1—5 步驟,改變編程單元的地址和寫入的數據,直到全部文件編程結束。
程序加密
AT89C52 有3 個程序加密位,可對芯片上的3 個加密位LB1、LB2、LB3 進行編程(P)或不編程(U)來得到。當加密位LB1 被編程時,在複位期間,EA 端的邏輯電平被采樣并鎖存,如果單片機上電後一直沒有複位,則鎖存起的初始值是一個随機數,且這個随機數會一直保存到真正複位為止。為使單片機能正常工作,被鎖存的EA 電平值必須與該引腳當前的邏輯電平一緻。此外,加密位隻能通過整片擦除的方法清除。
數據查詢
AT89C52單片機用Data Palling 表示一個寫周期結束為特征,在一個寫周期中,如需讀取最後寫入的一個字節,則讀出的數據的最高位(P0.7)是原來寫入字節最高位的反碼。寫周期完成後,所輸出的數據是有效的數據,即可進入下一個字節的寫周期,寫周期開始後,Data Palling 可能随時有效。
Ready/Busy:字節編程的進度可通過“RDY/BSY 輸出信号監測,編程期間,ALE 變為高電平“H”後,P3.4(RDY/BSY)端電平被拉低,表示正在編程狀态(忙狀态)。編程完成後,P3.4 變為高電平表示準備就緒狀态。
程序校驗:如果加密位LB1、LB2 沒有進行編程,則代碼數據可通過地址和數據線讀回原編寫的數據,采用如圖12的電路。加密位不可直接校驗,加密位的校驗可通過對存儲器的校驗和寫入狀态來驗證。
芯片擦除:利用控制信号的正确組合(表6)并保持ALE/PROG引腳10mS 的低電平脈沖寬度即可将PEROM 陣列(4k字節)和三個加密位整片擦除,代碼陣列在片擦除操作中将任何非空單元寫入“1”,這步驟需再編程之前進行。
讀片内簽名字節:AT89C52單片機内有3 個簽名字節,地址為030H、031H 和032H。用于聲明該器件的廠商、型号和編程電壓。讀AT89C52 簽名字節需将P3.6 和P3.7 置邏輯低電平,讀簽名字節的過程和單元030H、031H 及032H 的正常校驗相仿,隻返回值意義如下:
(030H)=1EH 聲明産品由ATMEL公司制造。
(031H)=52H 聲明為AT89C52 單片機。
(032H)=FFH 聲明為12V 編程電壓。
(032H)=05H 聲明為5V 編程電壓。



















