官术网_书友最值得收藏!

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/PROGPSENEA/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口的第二功能

主站蜘蛛池模板: 迁西县| 虎林市| 禹州市| 通化县| 井冈山市| 合川市| 晋中市| 顺义区| 涡阳县| 娄底市| 彝良县| 凤翔县| 修文县| 兴宁市| 达州市| 阳谷县| 巴彦淖尔市| 常德市| 茶陵县| 新营市| 石泉县| 新兴县| 尚志市| 历史| 佛学| 宝应县| 长治县| 安康市| 常德市| 特克斯县| 石河子市| 竹溪县| 屯留县| 铅山县| 诸城市| 酒泉市| 正蓝旗| 冕宁县| 革吉县| 临汾市| 交城县|