1.2 單片機的結構
下面以AT89S52為例來介紹單片機結構。AT89S52是一個低功耗、高性能的CMOS 8位微控制器,并且在系統中集成了8KB的可編程閃存。AT89S52兼容標準80C51指令集和引腳。AT89S52是一個功能強大的微控制器,具有較高的性價比,可在許多嵌入式控制中應用。
AT89S52單片機在一塊芯片中集成了CPU、8KB的Flash、256B內存、32條輸入/輸出線、看門狗定時器、兩個數據指針、3個16位定時器/計數器、6矢量兩個級別的中斷結構、一個全雙工串行口、片內振蕩器和時鐘電路。
1.2.1 AT89S52單片機的內部構件
AT89S52單片機內包含下列幾個部件:
(1)一個8位CPU;
(2)一個片內振蕩器及時鐘電路;
(3)8KB可重復擦寫的Flash程序存儲器;
(4)256B內部RAM;
(5)3個16位定時器/計數器;
(6)32條可編程的I/O線(四個8位并行I/O端口);
(7)一個可編程全雙工串行口;
(8)6個中斷源、兩個優先級。
AT89S52基本結構如圖1.4所示。
1.CPU
CPU是單片機的核心部件,它由運算器和控制器組成。

圖1.4 AT89S52基本結構
1)運算器
運算部件是以算術邏輯單元ALU為核心,加上累加器ACC、寄存器B、暫存器、程序狀態字PSW以及十進制調整電路和布爾處理器等許多部件組成的。
(1)8位算術和邏輯運算的ALU單元
ALU單元可以對4位(半字節)、8位(一字節)和16位(雙字節)數據進行操作。完成算術四則運算和邏輯運算,以及位操作、循環移位等邏輯操作,操作結果的狀態信息送至狀態寄存器(PSW)。
(2)累加器ACC
累加器ACC,在指令中用助記符A來表示。A是一個8位寄存器,是CPU中工作最繁忙的寄存器。在算術邏輯運算中,用來存放一個操作數或運算結果(包括中間結果)。在與外部存儲器和I/O接口打交道時,其完成數據傳送。
(3)寄存器B
B可做通用寄存器,在乘、除法運算中使用。做乘法運算時,寄存器B用來存放乘數及積的高位字節;做除法運算時,寄存器B用來存放除數及余數;不做乘、除法運算時,寄存器B可做通用寄存器。
(4)程序狀態字寄存器PSW(程序狀態標志寄存器)
PSW是8位寄存器,用于存放當前指令執行后操作結果的某些特征,以便為下一條指令的執行提供依據。PSW的各位定義如表1.1所示。
表1.1 PSW的各位定義

① Cy:進位標志位。
在執行某些算術運算和邏輯指令時,Cy可以被硬件或軟件置位或清0。在算術運算中它可作為進位標志;在位運算中,它做累加器使用;在位傳送、位與及位或等位操作中,都要使用進位標志位。
② AC:輔助進位標志位。
進行加法或減法操作時,當發生低4位向高4位進位或借位時,AC由硬件置位,否則AC位被置0。執行十進制調整指令時,將借助AC狀態進行判斷。
③ F0:用戶標志位。
該位為用戶定義的狀態標志,用戶根據需要用軟件對其置位或清0,也可以用軟件測試F0來控制程序的跳轉。
④ RS1和RS0:寄存器組選擇控制位。
此兩位通過軟件置0或1來選擇當前工作寄存器組,如表1.2所示。
表1.2 工作寄存器組選擇

CPU通過對PSW中的D4、D3位內容的修改,就能任選一個工作寄存器組。例如:
SETB PSW.3 CLR PSW.4 ;選定第1組 SETB PSW.4 CLR PSW.3 ;選定第2組 SETB PSW.3 SETB PSW.4 ;選定第3組
若不設定則為第0組,也稱為默認值,這個特點使單片機具有快速現場保護功能。特別注意的是,如果不加設定,在同一段程序中工作寄存器R0~R7只能用一次,若用兩次程序會出錯。
⑤ OV:溢出標志位。
當執行算術指令時,在帶符號的加減運算中,OV=1表示有溢出(或借位)。反之,OV=0表示運算正確,即無溢出產生。
⑥ P:奇偶標志位。
P用來表示累加器A中1的個數的奇偶性,它常常用于手機通信。若累加器中1的個數為奇數則P=1,否則P=0。
(5)布爾處理器
布爾處理器完成布爾代數邏輯運算。
2)控制器
控制器是CPU的大腦中樞,是單片機的指揮控制部件。它由程序計數器(PC)、指令寄存器(IR)、指令譯碼器(ID)、數據指針(DPTR)、堆棧指針(SP)以及定時控制電路等部件組成,對來自存儲器中的指令進行譯碼,通過定時控制電路在規定的時刻發出各種操作所需的控制信號,使各部分協調工作,完成指令所規定的功能。
(1)程序計數器PC
程序計數器PC是16位專用寄存器,尋址范圍為64KB,用于存放CPU執行的下一條指令的地址,具有自動加1的功能。當一條指令按照PC所指的地址從程序存儲器中取出后, PC會自動加1,指向下一條指令。
(2)指令寄存器IR和指令譯碼器ID
指令寄存器IR是8位寄存器,用于暫存待執行的指令,等待譯碼;指令譯碼器ID對指令寄存器中的指令進行譯碼,即將指令轉變為所需的電平信號。
譯碼器輸出的電平信號,再經定時控制電路即可定時產生執行該指令所需要的各種控制信號。
(3)數據指針DPTR
數據指針DPTR是16位專用寄存器。它可以對64KB的外部數據存儲器和I/O口進行尋址,也可作為兩個8位寄存器,主要用做外部數據存儲器的地址指針。
(4)堆棧指針SP
堆棧指針SP是8位特殊功能寄存器,在片內RAM(128B)中開辟棧區,并隨時跟蹤棧頂地址,它按“先進后出”的原則存取數據,上電復位后,SP指向07H。
2.存儲器及特殊功能寄存器
AT89S52外部有兩個獨立的存儲器空間:64KB的程序存儲器空間和64KB的數據存儲器空間。
1)程序存儲器
EA=0:片內ROM不起作用,完全執行片外程序存儲器指令。外部ROM的地址為0000H~0FFFFH,可達64KB。
EA=1:執行片內程序存儲器指令,地址為0000H~1FFFH;當指令地址超過1FFFH后,自動轉向片外ROM取指令,地址為2000H~0FFFFH。
2)數據存儲器
數據存儲器分為內部數據存儲器和外部數據存儲器。
(1)內部數據存儲器
AT89S52有256B的片內RAM,地址空間為00H~0FFH。其中,低128B(地址為00H~7FH)是真正的RAM區;高128B(地址為80H~0FFH)與片內特殊功能寄存器(SFR)區(80H~0FFH)地址完全重合,但在物理上是完全獨立的,單片機采用不同的尋址方式,以區分這兩個重疊的邏輯地址空間。
訪問(80H~0FFH)區間的SFR時,只能用直接尋址方式。如:
MOV 0A0H, #data
其中,指令的目的操作數是直接地址,將立即數“#data”送入SFR中的0A0H單元中。
訪問(80H~0FFH)區間的片內RAM時,只能用間接尋址方式。如:
MOV R0, #0A0H MOV @R0, #data
其中,指令的目的操作數是間接地址,將立即數“#data”存入片內RAM的0A0H單元中。堆棧操作是間接尋址的典型例子,因為棧指針SP為棧頂單元地址。片內RAM 80H~0FFH空間也可用做棧區空間。
AT89S52片內共有32個特殊功能寄存器。表1.3列出了AT89S52 SFR的地址及復位值。
表1.3 AT89S52 SFR的地址及復位值

續表

在80H~FFH地址空間中,SFR并沒有被完全占用。對于余留的空間,用戶不可使用。
(2)外部數據存儲器
外部數據存儲器地址范圍為0000H~0FFFFH,可達64KB,用MOVX指令進行訪問。
1.2.2 AT89S52單片機引腳功能
AT89S52的引腳和封裝共有四種形式,如圖1.5所示。
下面以40引腳塑料雙列直插式封裝(PDIP)芯片為例,介紹各個引腳功能。
(1)電源引腳VCC和GND。
① GND(20):接地端。
② VCC(40):正常操作時為+5V電源。
通常在VCC和GND引腳之間接0.1μF高頻濾波電容。
(2)外接晶振引腳XTAL1和XTAL2。
① XTAL1(19):內部振蕩電路反相放大器的輸入端,是外接晶體的一個引腳。當采用外部振蕩器時,此引腳接地。
② XTAL2(18):內部振蕩電路反相放大器的輸出端,是外接晶體的另一端。當采用外部振蕩器時,此引腳接外部振蕩源。
(3)控制或與其他電源復用引腳RST、ALE/PROG、PSEN和EA/Vpp。
① RST(9):當振蕩器運行時,在此引腳上出現兩個機器周期的高電平(由低到高跳變),將使單片機復位。

圖1.5 AT89S52的引腳和封裝
② ALE/PROG(30):地址鎖存允許/編程脈沖輸入。在訪問外部程序存儲器和外部數據存儲器時,該引腳輸出一個地址鎖存脈沖ALE,其下降沿可將低8位地址鎖存于片外地址鎖存器中。
在編程時,向該引腳輸入一個編程負脈沖PROG。
正常操作時為ALE功能(允許地址鎖存),將地址的低字節鎖存在外部鎖存器中,ALE引腳以不變的頻率(振蕩器頻率的1/6)周期性地發出正脈沖信號。
③ PSEN(29):外部程序存儲器讀選通信號輸出端,低電平有效。在從外部程序存取指令(或數據)期間,PSEN在每個機器周期內兩次有效。在訪問外部數據存儲器時,PSEN無效。
④ EA/Vpp(31):內部程序存儲器和外部程序存儲器選擇端。當EA/Vpp為高電平時,訪問內部程序存儲器;當EA/Vpp為低電平時,則訪問外部程序存儲器。
在Flash編程時,該引腳可連接21V的編程電源Vpp。
(4)輸入/輸出引腳P0.0~P0.7,P1.0~P1.7,P2.0~P2.7,P3.0~P3.7。
① P0口(32~39):一個8位漏極開路型雙向I/O口。
當用做通用I/O口時,每個引腳可驅動8個TTL負載;當用做輸入時,每個端口首先置1。
在訪問外部存儲器時,它分時傳送低字節地址和數據總線,此時,P0口內含提升電阻。
② P1口(1~8):一個帶有內部提升電阻的8位準雙向I/O口。
當用做通用I/O口時,每個引腳可驅動8個TTL負載。當用做輸入時,每個端口首先置1。
P1.0和P1.1引腳也可用做定時器2的外部計數輸入(P1.0/T2)和觸發器輸入(P1.1/T2EX)。
③ P2口(21~28):一個帶有內部提升電阻的8位準雙向I/O口,在訪問外部存儲器時,它輸出高8位地址。P2口可以驅動4個TTL負載。當用做輸入時,每個端口首先置1。
④ P3口(10~17):一個帶有內部提升電阻的8位準雙向I/O口,能驅動4個TTL負載。當用做輸入時,每個端口首先置1。P3口還可用于第二功能,如表1.4所示。
表1.4 P3口的第二功能

- 電腦軟硬件維修大全(實例精華版)
- 辦公通信設備維修
- INSTANT Wijmo Widgets How-to
- 電腦常見故障現場處理
- 嵌入式系統設計教程
- 嵌入式系統中的模擬電路設計
- Practical Machine Learning with R
- 圖解計算機組裝與維護
- USB應用開發寶典
- Raspberry Pi Home Automation with Arduino
- Advanced Machine Learning with R
- 從企業級開發到云原生微服務:Spring Boot實戰
- Arduino案例實戰(卷Ⅳ)
- Hands-On One-shot Learning with Python
- 嵌入式系統原理:基于Arm Cortex-M微控制器體系