- 單片機技術及應用(C語言版)
- 周永東主編
- 7036字
- 2019-01-09 13:43:51
1.2 AT89S52單片機的硬件資源
一、AT89S52單片機的基本組成
AT89S52單片機內部結構框圖如圖1-2所示。
AT89S52單片機內部包括:
● 一個8位微處理器(CPU),是單片機的運算和指揮中心。
● 片內8K字節程序存儲器(ROM),用于存放程序、原始數據及表格。
● 片內256字節數據存儲器(RAM),用于存放臨時數據,例如運算的中間結果。
●4組8位并行輸入/輸出端口(I/O端口)P0~P3,每組端口均有8條I/O線,用于與外部交換信息。
●3個16位的定時器/計數器,均可以根據需要設為定時器或計數器使用。

圖1-2 AT89S52單片機的內部結構框圖
●1個6向量2級中斷結構,有6個中斷源和2個中斷優先級,中斷源分別是兩個外部中斷(INT0和INT1)、三個定時中斷(定時器0、1、2)和一個串行中斷。
●1個全雙工UART(通用異步接收發送器)的串行I/O口,用于實現單片機之間或單片機與計算機之間的串行通信。
●片內晶振及時鐘電路,AT89S52單片機有一個用于構成內部振蕩器的反相放大器,外接石英晶體或陶瓷諧振器都可構成自激振蕩器;也可從外部時鐘源輸入時鐘信號,最高允許振蕩頻率為24MHz。
二、AT89S52單片機的中央處理器(CPU)
中央處理器(CPU)也稱微處理器,是單片機的核心部件,即單片機的控制和指揮中心。它主要包含運算器和控制器。
1.運算器
運算器可以對數據進行算術運算、邏輯運算和位操作運算。運算器包括算術邏輯運算單元ALU、累加器A、通用寄存器B、暫存器、程序狀態字寄存器PSW等。
● 算術邏輯運算單元ALU:可進行4位(半字節)、8位(全字節)、16位(雙字節)數據的加、減、乘、除、加1、減1等算術運算,邏輯與、或、異或、求補等邏輯運算,以及數據的位操作。
● 累加器A(Accumulator):8位寄存器。通常,存儲的一個運算數經暫存器2進入ALU的輸入端,與另一個來自暫存器1的運算數進行運算,運算結果又送回累加器A,即運算前放操作數,運算后放操作結果,是單片機中最忙碌的一個寄存器。
● 通用寄存器B(GeneralPurposeRegister):8位寄存器。在乘、除運算之前存放乘數或除數,運算之后存放乘積的高8位或除法的余數,也可作為一般存儲器使用。
●程序狀態字寄存器PSW(ProgramStatusWord):8位標志寄存器。用于存放指令執行后的狀態信息,供程序查詢和判別使用。
2.控制器
控制器由程序計數器PC、指令寄存器IR、指令譯碼器ID、振蕩器及定時電路等組成。
● 程序計數器PC(ProgramCounter):16位寄存器,用于存放將要執行的下一條指令的地址,能自動加1。
● 振蕩器及定時電路:AT89S52單片機片內有振蕩電路,只需外接石英晶體和頻率微調電容就可產生脈沖信號。CPU在這種基本節拍的控制下發出控制信號,協調各部件的工作。
三、AT89S52單片機的存儲器
AT89S52單片機內部的存儲器一般分為兩種:程序存儲器ROM和數據存儲器RAM。
程序存儲器ROM用于存放程序、原始數據或表格,可在線編寫程序,掉電后數據保持不變。
數據存儲器RAM用于存放運算的中間結果、最終結果或欲顯示的數據等,其數據可隨時改寫,掉電后數據消失。
AT89S52單片機存儲器空間配置如圖1-3所示。

圖1-3 AT89S52單片機存儲器空間配置
1.程序存儲器
AT89S52單片機片內程序存儲器ROM有8K字節,其地址為0000H~1FFFH;片外可接擴展程序存儲器ROM,最大達64K字節,地址為0000H~FFFFH,片內外統一編址。CPU訪問片內、片外程序存儲器ROM時用MOVC指令。
當EA引腳(31腳)接低電平(接地)(EA=0)時,AT89S52單片機片內ROM不起作用,CPU只能從片外ROM(0000H~FFFFH)中取指令。
當EA引腳接高電平(EA=1)時,AT89S52單片機的程序計數器PC只在0000H~1FFFH范圍內執行片內ROM中的指令。只有當PC的值超過1FFFH后,CPU才自動轉到片外ROM相應的地址(2000H~FFFFH)取指令。
系統在程序存儲器低端的一些固定存儲單元是特定程序的入口地址。
●0000H:單片機上電復位后主程序的入口地址;
●0003H:外部中斷0的中斷服務程序入口地址;
●000BH:定時器0的中斷服務程序入口地址;
●0013H:外部中斷1的中斷服務程序入口地址;
●001BH:定時器1的中斷服務程序入口地址;
●0023H:串行通信的中斷服務程序入口地址;
●002BH:定時器2的中斷服務程序入口地址。
當單片機上電復位后,程序計數器PC中的內容清零(PC=0000H),所以CPU總是從0000H單元開始執行程序。通常在該單元中存放一條絕對轉移指令(例如LJMP0030H),指明用戶程序所在的單元地址(0030H),則CPU會跳轉到該地址執行主程序。
除0000H單元外,其他的六個特殊單元分別存放著單片機六種中斷源的中斷服務程序入口地址。編程時,通常在這些單元中存放一條絕對轉移指令,而真正的中斷服務程序是從轉移地址開始存放的。當發生中斷時,CPU會根據指令指示的地址在程序存儲器相應的區域找到中斷服務程序并執行。
例如在允許中斷的情況下,當外部中斷引腳INT0(P3.2,12腳)有效(INT0=0)時,即引起中斷0請求,CPU響應中斷后自動將地址0003H裝入PC,程序就自動轉向0003H單元開始執行。如果事先在0003H~000AH存放一條轉移指令,程序就被引導到指定的中斷服務程序空間去執行。
2.數據存儲器
AT89S52單片機片內數據存儲器RAM有256字節,其地址為00H~FFH;片外可接擴展數據存儲器RAM,最大達64K字節,地址為0000H~FFFFH。訪問片內RAM時用MOV指令,訪問片外RAM時用MOVX指令。
在AT89S52單片機中,片內數據存儲器RAM的容量不大,但功能較多,使用較靈活。其中低地址的128B可直接尋址訪問,也可間接尋址訪問,高地址的128B只能間接尋址訪問。它分為工作寄存器區、位尋址區和通用RAM區三部分,如圖1-4所示。

圖1-4 AT89S52單片機數據存儲器結構
(1)工作寄存器區
AT89S52單片機在片內RAM中劃分出低地址的32個字節單元(00H~1FH)作為工作寄存器區,供用戶使用。工作寄存器區分為4個工作寄存器組。每組有8個寄存器,分別稱為R7~R0,占8個字節。
在單片機工作時,只有一組寄存器作為當前工作寄存器組R7~R0使用。當單片機復位后,系統默認工作寄存器0組為當前工作寄存器組。
(2)位尋址區
在工作寄存器區后的20H~2FH共16個字節為位尋址區,共有128位(8×16=128)。每一位都有相應的位地址00H~7FH。利用位尋址可以對某一位進行單獨操作,而無須將一個字節的8位全部重新操作一遍。
AT89S52單片機數據存儲器位尋址區如圖1-5所示。

圖1-5 AT89S52單片機數據存儲器位尋址區
例如,要將20H存儲單元的第7位D7置“1”,可以用一條語句直接實現,使用非常靈活。單片機的位尋址功能是一般計算機所沒有的,這也是單片機重要的特點之一。
(3)通用RAM區
AT98S52單片機片內通用RAM區地址為30H~FFH,這里通常設為堆棧區,棧頂的位置由堆棧寄存器SP指定。
系統復位時,SP的初始值為07H。注意,此時SP的初始值在工作寄存器區內,為防止堆棧區的數據將寄存器區數據覆蓋,一般要將SP的值重新設置到通用RAM區。
3.特殊功能寄存器SFR
在AT89S52單片機片內80H~0FFH的128個地址中,離散分布了一些特殊功能寄存器SFR,它們與片內RAM高128B數據存儲器地址相同,但訪問方式不同,特殊功能寄存器只能直接尋址訪問,而片內RAM高128B只能間接尋址訪問,所以不會混淆。
部分特殊功能寄存器的地址和名稱如圖1-6所示。其中有12個具有位尋址能力,它們的字節地址正好能被8整除(即16進制的地址碼尾數是0或8),在圖1-6中標星號的寄存器即可位尋址。

圖1-6 AT89S52單片機數據存儲器特殊功能寄存器區
特殊功能寄存器SFR的內容與單片機的硬件相關,它起著管理單片機的作用。下面先簡要介紹與CPU相關的部分,其他部分將在相應章節中介紹。
① 累加器ACC(E0H)。
累加器ACC是AT89S52最常用、最忙碌的8位特殊功能寄存器,許多指令的操作數取自于ACC,許多運算中間結果也存放于ACC。在指令系統中,用A作為累加器ACC的助記符。
② 寄存器B(F0H)。
在乘、除指令中,用到了8位寄存器B。乘法指令的兩個操作數分別取自A和B,乘積存于B和A兩個8位寄存器中。除法指令中,A中存放被除數,B中存放除數,商存放于A,余數存放于B。
在其他指令中,B可作為一般通用寄存器使用。
③ 程序狀態寄存器PSW(D0H)。
程序狀態寄存器PSW是一個8位特殊功能寄存器,它的各位包含了程序執行后的各種狀態信息,供程序查詢或判別之用。其各位的含義見表1-2。
表1-2 程序狀態寄存器PSW功能表

● CY(PSW.7):進/借位標志位。在執行加法(或減法)運算指令時,如果運算結果的最高位(D7位)向前有進位(或借位),則CY位由硬件自動置為1(CY=1);如果運算結果的最高位無進位(或借位),則CY位被清零(CY=0)。
● AC(PSW.6):輔助進/借位標志位。當執行加法(或減法)操作時,如果運算結果(和或差)的低4位(D3位)向高4位(D4位)有半進位(或借位),則AC位將被硬件自動置為1(AC=1);否則AC位被清零(AC=0)。
●F0(PSW.5):用戶標志位0。用戶可以根據自己的需要對F0位賦予一定的含義,由用戶置位或復位,以作為軟件標志。
● RS1、RS0(PSW.4、PSW.3):工作寄存器組選擇位。在單片機數據存儲器中有四組工作寄存器組(寄存器3組、寄存器2組、寄存器1組、寄存器0組),每個寄存器組中有8個寄存器R7~R0。程序運行時只能有一組寄存器組工作,到底是哪組寄存器組工作?我們可以通過設置RS1、RS0的值來進行選取。其選取組合關系見表1-3。
表1-3 工作寄存器組選擇表

單片機上電復位時,RS1=RS0=0,CPU自動選擇寄存器0組為當前工作寄存器組。
●OV(PSW.2):溢出標志位。當進行算術運算時,如果運算結果超出了-128~+127的范圍,則有溢出,OV位由硬件自動置為1(OV=1);否則無溢出,OV位清零(OV=0)。
● F1(PSW.1):用戶標志位1(僅AT89S52有)。作用與用戶標志位0相同。
● P(PSW.0):奇偶標志位。每條指令執行完后,該位始終跟蹤指示累加器ACC中1的個數。如果A中的1為奇數,則P=1;A中的1為偶數,則P=0。此位常用于校驗串行通信中的數據傳送是否出錯。
④ 堆棧指針SP(81H)。
堆棧指針SP是一個8位特殊功能寄存器,SP的內容可指向AT89S52片內00H~FFH RAM的任何單元。系統復位后,SP初始化為07H,即指向地址為07H的RAM單元。
⑤ 數據指針DPTR(83H,82H)。
數據指針DPTR是一個16位特殊功能寄存器,其高位字節寄存器用DPH表示(地址83H),低位字節寄存器用DPL表示(地址82H)。
數據指針DPTR用于存放16位地址,以便對64KB片外RAM作間接尋址。
四、AT89S52單片機的并行端口
AT89S52單片機有4組8位并行準雙向I/O端口,分別為P0,P1,P2和P3,共占32個引腳。每個端口均包含一個端口鎖存器(特殊功能寄存器P0~P3)、一個輸出驅動器和輸入緩沖器。每個端口可以8條線一起用做I/O口線傳輸字節信息,也可以每一根I/O口線單獨使用。對端口鎖存器進行讀/寫就可以實現端口的輸入/輸出。
1.P0口的使用
P0口可作為通用的8位輸入/輸出端口使用。在單片機外接擴展存儲器時,它還可以作為分時復用的低8位地址/數據總線使用,此時高8位地址總線由P2端口擔任。P0口的每一位可驅動8個TTL負載。
(1)P0口作為通用輸出口,需外接上拉電阻才能輸出電平。
(2)P0口作為通用輸入口,分為讀鎖存器和讀引腳兩種情況。在讀端口引腳數據前,應先向端口鎖存器寫入1。
2.P1口的使用
P1口常作為通用的輸入/輸出端口,內部有上拉電阻,不需外接電阻。當從端口引腳讀入數據時,應先向端口寫1,再讀引腳數據。P1口每一位可驅動4個TTL負載。
在AT89S52單片機中,P1端口還用于一些復用功能。其復用功能見表1-4。
表1-4 AT89S52單片機P1端口各引腳復用功能表

3.P2口的使用
P2口可作為通用的8位輸入/輸出端口使用。在單片機外接擴展存儲器時,它還可以作為高8位地址總線,與P0口的低8位地址總線一起形成16位I/O口地址。P2口的每一位可驅動4個TTL負載。
P2口作為通用I/O口使用時,不需外接電阻,讀引腳狀態前,應先向端口寫1。
4.P3口的使用
P3口是單片機中使用最靈活、功能最多的一個并行端口,它具有通用的輸入/輸出功能,還具有多種用途的第二功能(見表1-5)。同樣,P3口的每一位也可驅動4個TTL負載。
P3口作為輸入使用時,同P0~P2口一樣,應先由軟件向端口寫1,再讀引腳數據。P3口也無須外接電阻。
表1-5 AT89S52單片機P3端口各引腳復用功能表

五、AT89S52單片機的封裝形式與引腳介紹
1.AT89S52單片機的封裝形式
AT89S52單片機有PDIP(雙列直插式封裝)、PLCC(帶引線的塑料芯片載體封裝)和TQFP(方形扁平封裝)三種封裝形式(P指塑料),其引腳分布如圖1-7~圖1-9所示。

圖1-7 TQFP封裝

圖1-8 PLCC封裝

圖1-9 PDIP封裝
2.AT89S52單片機的引腳介紹
① 電源引腳VCC和GND。
● VCC(40腳):電源端,接+5V。
● GND(20腳):接地端。
② 外接晶體振蕩器引腳XTAL1和XTAL2。
●XTAL1(19腳):接外部晶振和微調電容的一端,在片內接振蕩電路反相放大器的輸入端。當采用外部時鐘時,此引腳作為外部時鐘信號的輸入端。
●XTAL2(18腳):接外部晶振和微調電容的另一端,在片內接振蕩電路反相放大器的輸出端。當采用外部時鐘時,此引腳懸空。
③ 控制信號引腳RST、PSEN、ALE/PROG、EA/VPP。
●RST(9腳):復位信號輸入端,高電平有效。當此輸入端保持2個機器周期的高電平時,就可以完成單片機的復位操作。
●PSEN(29腳):外部程序存儲器選通信號。當AT89S52單片機從外部程序存儲器取指令(或常數)時,每個機器周期輸出兩次PSEN信號(即2個脈沖信號),作為外部程序存儲器選通信號。而在訪問外部數據存儲器時,無PSEN信號輸出。
● ALE/PROG(30腳):地址鎖存允許信號輸出/編程脈沖輸入端。
當AT89S52單片機上電正常工作后,ALE引腳不斷向外部輸出正脈沖信號,此頻率是振蕩頻率fOSC的1/6。在CPU訪問外部程序/數據存儲器(執行MOVX或MOVC指令)時,ALE輸出信號作為鎖存低8位地址的控制信號。在CPU不訪問外部程序/數據存儲器時,ALE端仍以振蕩頻率1/6的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。有的單片機可以關閉“ALE”輸出,用以降低輸出干擾。
此引腳的第2功能PROG是在對片內8KFlashROM進行編程寫入(固化程序)時,作為編程脈沖輸入端。
● EA/VPP(31腳):內部與外部程序存儲器選擇端/片內FlashROM編程電壓輸入端。
當EA引腳接高電平時,CPU只執行內部程序存儲器FlashROM中的指令;但當PC(程序計數器)的值超過1FFFH(AT89S52單片機程序存儲器為8K)時,CPU將自動轉到外部程序存儲器相應的地址取指令,并執行該指令。
當EA引腳接低電平(接地)時,CPU只執行外部程序存儲器中的指令。
此引腳的第2功能VPP在對片內程序存儲器FlashROM編程期間,接收編程允許電壓VPP12V(如果選用12V電壓編程)。
④ 輸入/輸出端口P0、P1、P2和P3。
六、AT89S52單片機的時鐘與時序
單片機時序就是CPU在執行指令時所需控制信號的時間順序。在執行指令時,CPU首先到程序存儲器中取出需要執行指令的指令碼存入指令寄存器,通過指令譯碼器對其譯碼,并由時序部件產生一系列時鐘信號去完成指令的執行。這些指令的時鐘控制信號在時間上的相互關系就是CPU時序。單片機通過時鐘電路產生時序。
1.單片機系統的時鐘電路
AT89S52單片機的時鐘信號由兩種方式產生:內部振蕩方式、外部時鐘方式。內部振蕩方式電路原理圖如圖1-10所示。

圖1-10 AT89S52單片機的時鐘電路—內部振蕩方式
(1)內部振蕩方式
AT89S52單片機芯片內部有一個振蕩器,在引腳XTAL1、XTAL2外接晶體振蕩器(簡稱晶振),就構成了內部振蕩方式。典型振蕩頻率為12MHz和11.0592MHz。
在圖1-10中,電容C1、C2起穩定振蕩器頻率、快速起振的作用,電容值一般為20~40pF。內部振蕩方式所得的時鐘信號比較穩定,因此使用得較多。
(2)外部時鐘方式
這種方式下,外部時鐘信號由XTAL1引腳接入單片機(XTAL2懸空),此時單片機將按照外部時鐘信號工作。
2.單片機的時鐘信號
為了對CPU時序進行分析,需要為其定義一種能夠度量各種時序信號出現時間的尺度。這個尺度通常為振蕩周期、機器周期和指令周期。
(1)振蕩周期
振蕩周期T又稱為時鐘周期,由單片機片內振蕩電路的晶振產生,常定義為時鐘脈沖頻率f的倒數,是時序中最小的時間單位。如果接入的晶振是12MHz,則振蕩周期為1/12MHz,即0.083μs。時鐘脈沖是計算機的基本工作脈沖,它控制著計算機的工作節奏。
(2)機器周期
機器周期定義為實現特定功能所需的時間,通常由若干個振蕩周期T構成。AT89S52單片機的機器周期常定義為12個振蕩周期。它是計算機執行一種基本操作的時間單位。若晶振是12MHz,則機器周期為12/12MHz,即1μs。
(3)指令周期
指令周期是時序中最大的時間單位,定義為執行一條指令所需的時間。1個指令周期由1~4個機器周期組成。通常將包含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。
七、AT89S52單片機的復位
單片機的復位操作完成單片機片內電路的初始化,使單片機從一種確定的狀態開始運行。當復位信號(高電平)加到單片機RST引腳并維持2個機器周期時,CPU就可以響應并將系統復位。如果RST持續為高電平,單片機就處于循環復位狀態,而無法執行程序。因此要求單片機復位后能脫離復位狀態。
實際應用中,復位操作有兩種方式:上電復位,開關復位(圖1-11)。

圖1-11 單片機復位電路
上電復位要求接通電源后,自動實現復位操作。開關復位要求在電源接通的情況下,用按鈕開關操作使單片機復位。
單片機的復位操作使單片機進入初始化狀態。初始化后各內部計算器的狀態如下。
程序計數器PC:0000H;
累加器ACC:00H;
寄存器B:00H;
程序狀態字PSW:00H;
堆棧指針SP:07H;
數據指針DPTR:0000H;
端口鎖存器P0~P3:0FFH;
寄存器IP:各有效位為0;
寄存器IE:各有效位為0;
寄存器TCON:00H;
寄存器TMOD:00H;
寄存器T0、T1、T2:00H;
寄存器SCON:00H;
寄存器PCON:各有效位為0;
串行數據緩沖器SBUF:不定。
八、AT89S52單片機的標識
在市場上購買AT89S52單片機時,有必要了解單片機上的標識,下面以圖1-1為例介紹。
(1)第1行的標識“ATMEL”,表示單片機生產公司的名稱,美國ATMEL(愛特梅爾)公司。
(2)第2行的標識“AT89S52”,表示單片機的型號。
(3)第3行的標識“24PC”
① 數字部分,表示支持的最高系統時鐘。
對于AT89S52-24PC,“24”表示可支持最高為24MHz的系統時鐘。
② 數字后第一個字母,表示封裝形式。“P”:DIP封裝;“A”:TQFP封裝;“J”:PL-CC封裝。對于AT89S52-24PC,“P”表示PDIP封裝。
③ 數字后最后一個字母,表示應用級別。“C”:商業級;“I”:工業級(有鉛);“U”:工業級(無鉛)。對于AT89S52-24PC,“C”表示商業級。
(4)第4行的標識“0525”,表示生產日期。本例中表示2005年的第25周生產。
本單元技能重點考核內容小結:
掌握AT89S52單片機引腳的功能和使用要求,了解單片機的基本硬件知識,學會識別其上的標識。