《單片機(jī)原理及應(yīng)用》第二章 AT89系列單片機(jī)的硬件_第1頁(yè)
《單片機(jī)原理及應(yīng)用》第二章 AT89系列單片機(jī)的硬件_第2頁(yè)
《單片機(jī)原理及應(yīng)用》第二章 AT89系列單片機(jī)的硬件_第3頁(yè)
《單片機(jī)原理及應(yīng)用》第二章 AT89系列單片機(jī)的硬件_第4頁(yè)
《單片機(jī)原理及應(yīng)用》第二章 AT89系列單片機(jī)的硬件_第5頁(yè)
已閱讀5頁(yè),還剩97頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第二章AT89系列單片機(jī)的硬件結(jié)構(gòu)2.1AT89S51單片機(jī)的結(jié)構(gòu) 2.2AT89S51的引腳功能 2.2.1電源及時(shí)鐘引腳 2.2.2控制引腳 2.2.3I/O口引腳 2.3AT89S51的中央處理器(CPU) 2.3.1運(yùn)算部件 2.3.2程序狀態(tài)字寄存器 2.3.3控制部件 思考與練習(xí)第二章AT89系列單片機(jī)的硬件結(jié)構(gòu)2.4存貯器結(jié)構(gòu) 292.4.1程序存貯器 292.4.2內(nèi)部數(shù)據(jù)存貯器 312.4.3特殊功能寄存器 342.4.4地址空間 402.4.5外部數(shù)據(jù)存貯器 432.5I/O端口 432.5.1I/O的內(nèi)部結(jié)構(gòu) 442.5.2I/O口的負(fù)載能力和接口要求 48第二章AT89系列單片機(jī)的硬件結(jié)構(gòu)2.6復(fù)位電路和時(shí)鐘電路 2.6.1復(fù)位電路及工作方式 2.6.2時(shí)鐘電路及時(shí)序 2.7在線編程ISP 2.7.1在線編程接口電路 2.7.2編程算法及時(shí)序 2.7.3串行編程命令 思考與練習(xí) 2.1AT89S51單片機(jī)的結(jié)構(gòu)把作為控制應(yīng)用所必需的基本功能部件都集中在一個(gè)尺寸有限的集成電路芯片上。2.1AT89S51單片機(jī)的結(jié)構(gòu)

有如下部件和特性:(1)8位微處理器(CPU);(2)程序存儲(chǔ)器(4KFlashROM),可進(jìn)行1000次重復(fù)擦寫(xiě)和三級(jí)加密;(3)128B數(shù)據(jù)存儲(chǔ)器(RAM);(4)26個(gè)特殊功能寄存器(SFR);(5)4個(gè)8位可編程并行I/O口(P0口、P1口、P2口、P3口);(6)1組全雙工可編程串行通道;(7)2個(gè)可編程的16位定時(shí)器/計(jì)數(shù)器;(8)1個(gè)看門(mén)狗定時(shí)器;(9)5個(gè)中斷源;(10)低功耗模式有空閑和掉電模式,且具有斷電模式下的中斷恢復(fù)模式;(11)靈活的在系統(tǒng)程序設(shè)計(jì)(ISP)2.1AT89S51單片機(jī)的結(jié)構(gòu)

AT89S51單片機(jī)的內(nèi)部結(jié)構(gòu)框圖如圖2-2所示。2.2AT89S51的引腳功能

AT89S51單片機(jī)實(shí)際有效的引腳為40個(gè),主要有三種封裝形式,其引腳圖可參見(jiàn)圖2-3所示:(a)為PDIP封裝形式,這是普通40腳塑封雙列直插形式;(b)PLCC封裝形式,這種形式是具有44個(gè)“J”形腳(其中有4個(gè)空腳)的方形芯片,使用時(shí)需要插入與其相配的方型插座中;(c)為T(mén)QFP封裝形式,這種形式也是具有44個(gè)“J”形腳(其中有3個(gè)空腳,2個(gè)接地端),但其體積更小、更薄,是一種不同封裝形式的引腳,排列不一致,使用時(shí)一定要注意。為了盡可能縮小體積,減少引腳數(shù),AT89S51/S52單片機(jī)的不少引腳還具有第二功能(也稱為“復(fù)用功能”)。2.2AT89S51的引腳功能(a)PDIP40封裝的AT89S512.2AT89S51的引腳功能(b)PLCC44封裝的AT89S51

(c)TQFP44封裝的AT89S512.2.1電源及時(shí)鐘引腳VCC:電源端。GND:接地端。XTAL1:接外部晶振的一端。在單片機(jī)內(nèi)部,它是構(gòu)成片內(nèi)振蕩器的反相放大器的輸入端。當(dāng)采用外部時(shí)鐘時(shí),外部時(shí)鐘振蕩信號(hào)直接送入此引腳作為驅(qū)動(dòng)端,即把此信號(hào)直接接到內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL2:接外部晶振的另一個(gè)端。在單片機(jī)內(nèi)部,它是構(gòu)成片內(nèi)振蕩器的反相放大器的輸出端。當(dāng)采用外部時(shí)鐘信號(hào)時(shí),此引腳應(yīng)懸浮不連接。2.2.1電源及時(shí)鐘引腳圖2-4內(nèi)部振蕩器的接法圖2-5外部振蕩器的接法2.2.2控制引腳RST:復(fù)位輸入端。在振蕩器運(yùn)行時(shí),在此腳上出現(xiàn)兩個(gè)機(jī)器周期以上的高電平將使單片機(jī)復(fù)位??撮T(mén)狗定時(shí)器(Watchdog)溢出后,該引腳會(huì)保持98個(gè)振蕩周期的高電平,也會(huì)使單片機(jī)復(fù)位。在AUXR寄存器中的DISRTO位可以用于屏蔽這種功能。DISRTO位的默認(rèn)狀態(tài),是復(fù)位高電平輸出功能使能。2.2.2控制引腳

ALE/:地址鎖存允許/編程脈沖。在訪問(wèn)外部存儲(chǔ)器時(shí),這個(gè)輸出信號(hào)用于鎖存低字節(jié)地址。在對(duì)Flash內(nèi)存編程時(shí),這條引腳用于輸入編程脈沖PROG。一般情況下,ALE是振蕩器頻率的6分頻信號(hào),可用于外部定時(shí)或時(shí)鐘。但是,在對(duì)外部數(shù)據(jù)存儲(chǔ)器每次存取中,會(huì)跳過(guò)一個(gè)ALE脈沖。在需要時(shí),可以把AUXR寄存器的0位置為“1”,從而屏蔽ALE的工作;而只有在MOVX或MOVC指令執(zhí)行時(shí)ALE才被啟動(dòng)。在單片機(jī)處于外部執(zhí)行方式時(shí),對(duì)ALE屏蔽位置“1”并不起作用。2.2.2控制引腳

:外部程序存儲(chǔ)器的選通信號(hào)。它用于讀外部程序存儲(chǔ)器的選通信號(hào),低電平有效。當(dāng)AT89系列單片機(jī)在執(zhí)行來(lái)自外部程序存儲(chǔ)器的指令時(shí),每一個(gè)機(jī)器周期PSEN被啟動(dòng)2次。在對(duì)外部數(shù)據(jù)存儲(chǔ)器的每次存取中,不出現(xiàn)。/VPP:外部程序存儲(chǔ)器訪問(wèn)允許端/編程電源輸入端。接地,單片機(jī)從地址為0000H~FFFFH的外部程序內(nèi)存中讀取代碼。接到VCC,單片機(jī)先從內(nèi)部程序內(nèi)存中讀取代碼,然后自動(dòng)轉(zhuǎn)向外部。在對(duì)Flash內(nèi)存編程時(shí),這條引腳接收12V編程電壓VPP。2.2.3I/O口引腳

P0~P3是AT89S51單片機(jī)與外界聯(lián)系的4個(gè)8位雙向并行I/O端口,引腳分配如下:P0.0~P0.7:P0口的8位漏極開(kāi)路的雙向I/O口。P0在當(dāng)做I/O用時(shí)可以推動(dòng)8個(gè)LS的TTL負(fù)載。如果當(dāng)引腳為低電平時(shí)(即取用外部程序代碼或數(shù)據(jù)存儲(chǔ)器),P0口就以多工方式提供地址總線(A0~A7)及數(shù)據(jù)總線(D0~D7)。設(shè)計(jì)者必須外加一鎖存器將端口0送出的地址栓鎖住成為A0~A7,再配合P2口所送出的A8~A15合成一完整的16位地址總線,而定址到64K的外部存儲(chǔ)器空間。2.2.3I/O口引腳

P2.0~P2.7:P2口的8位內(nèi)部接有上拉電阻的準(zhǔn)雙向I/O口。每一個(gè)引腳可以驅(qū)動(dòng)4個(gè)LS的TTL負(fù)載,若將P2口的輸出設(shè)為高電平時(shí),此端口便能當(dāng)成輸入端口來(lái)使用。P2除了當(dāng)做一般I/O端口使用外,若是在AT89S51擴(kuò)充外接程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),也提供地址總線的高字節(jié)A8~A15,這個(gè)時(shí)候P2便不能當(dāng)做I/O來(lái)使用了。2.2.3I/O口引腳

P1.0~P1.7:P1口的8位內(nèi)部接有上拉電阻的準(zhǔn)雙向I/O口。其輸出緩沖器可以驅(qū)動(dòng)4個(gè)LSTTL負(fù)載,同樣地若將端口1的輸出設(shè)為高電平,便是由此端口來(lái)輸入數(shù)據(jù)。負(fù)載能力:代表器件的輸出電流的大小。對(duì)于標(biāo)準(zhǔn)TTL器件,輸出負(fù)載能力的高電平為0.4mA,而作為下級(jí)負(fù)載的TTL器件的輸入高電平電流為0.04mA(40uA),這樣一個(gè)標(biāo)準(zhǔn)TTL器件最大可以驅(qū)動(dòng)8個(gè)以上標(biāo)準(zhǔn)TTL負(fù)載。P3.0~P3.7:P3口的8位內(nèi)部接有上拉電阻的準(zhǔn)雙向I/O口。其輸出緩沖器可以驅(qū)動(dòng)4個(gè)TTL負(fù)載,同時(shí)還具有其他的額外特殊功能,包括串行通信、外部中斷控制、計(jì)時(shí)計(jì)數(shù)控制及外部數(shù)據(jù)存儲(chǔ)器內(nèi)容的讀取或?qū)懭肟刂频裙δ堋TL負(fù)載:

LSTTL:其中“L”表示低功耗,“S”表示肖特基技術(shù)全稱Transistor-TransistorLogic,即BJT-BJT邏輯門(mén)電路,是數(shù)字電子技術(shù)中常用的一種邏輯門(mén)電路,應(yīng)用較早,技術(shù)已比較成熟。TTL主要有BJT(Bipolar(雙極的)JunctionTransistor(晶體管)

即雙極結(jié)型晶體管,晶體三極管)和電阻構(gòu)成,具有速度快的特點(diǎn)。最早的TTL門(mén)電路是74系列,后來(lái)出現(xiàn)了74H系列,74L系列,74LS,74AS,74ALS等系列。但是由于TTL功耗大等缺點(diǎn),正逐漸被CMOS電路取代。2.3AT89S51的中央處理器(CPU)中央處理器CPU是單片機(jī)的核心,主要由運(yùn)算部件、控制部件和專用寄存器組成。CPU功能可概況為以下三條:1、產(chǎn)生控制信號(hào)2、控制數(shù)據(jù)傳送3、對(duì)輸入數(shù)據(jù)進(jìn)行算術(shù)邏輯運(yùn)算及位操作2.3.1運(yùn)算部件運(yùn)算部件是用來(lái)對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算和邏輯操作的執(zhí)行部件,包括算術(shù)邏輯單元ALU(ArithmeticLogicUnit)、累加器ACC(Accumulator)、暫存器(TEMP)、程序狀態(tài)字寄存器PSW(ProgramStatusWord)、通用寄存器和BCD碼運(yùn)算調(diào)整電路等。為了提高數(shù)據(jù)處理和位操作能力,片內(nèi)增加了一個(gè)通用寄存器區(qū)和一些專用寄存器,而且還包含一個(gè)布爾處理器,可以執(zhí)行置位、清零、求補(bǔ)、取反、測(cè)試、邏輯與、邏輯或等操作,為單片機(jī)的應(yīng)用提供了極大的便利。2.3.1運(yùn)算部件

(1)算術(shù)邏輯單元ALUALU是用于對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算和邏輯操作的執(zhí)行部件,由加法器和其他邏輯電路(移位電路和判斷電路等)組成。在控制信號(hào)的作用下,它能完成“加、減、乘、除、比較”等算術(shù)運(yùn)算和“與、或、異或”等邏輯運(yùn)算以及循環(huán)移位操作、位操作等功能。此外,通過(guò)對(duì)運(yùn)算結(jié)果的判斷,影響程序狀態(tài)標(biāo)志寄存器的有關(guān)標(biāo)志位。

(2)暫存器暫存器用于暫存進(jìn)入運(yùn)算器之前的數(shù)據(jù),它不能通過(guò)編程訪問(wèn)。設(shè)置暫存器的目的是暫時(shí)存放某些中間過(guò)程所產(chǎn)生的信息,以避免破壞通用寄存器的內(nèi)容。2.3.1運(yùn)算部件

(3)布爾(位)處理器除對(duì)字節(jié)(Byte)進(jìn)行操作外,AT89S51單片機(jī)借用PSW中的C可以直接對(duì)位(Bit)進(jìn)行操作,在進(jìn)行位操作時(shí),C就類(lèi)似進(jìn)行字節(jié)操作的ACC用作數(shù)據(jù)源或存放結(jié)果。通過(guò)位操作指令可以實(shí)現(xiàn)置位、清零、取反以及位邏輯運(yùn)算等操作。運(yùn)算部件中的程序狀態(tài)字寄存器PSW地位特殊,下面給予單獨(dú)介紹。其他專用寄存器放在2.3節(jié)存儲(chǔ)器結(jié)構(gòu)中作逐一介紹。2.3.2程序狀態(tài)字寄存器

程序狀態(tài)字PSW是一個(gè)8位的寄存器,包含了各種程序狀態(tài)信息,它相當(dāng)于一個(gè)標(biāo)志寄存器,以供程序查詢和判別。PSW的格式、各標(biāo)志的含義及功能定義見(jiàn)表2-1。表2-1PSW的格式、各標(biāo)志的含義和功能定義此寄存器各位的含義如下(其中PSW.1未用):CYACF0RS1RS0OV-P2.3.2程序狀態(tài)字寄存器

CY(PSW.7):進(jìn)位標(biāo)志。在執(zhí)行某些算術(shù)和邏輯指令時(shí),它可以被硬件或軟件置位或清零。CY在布爾處理機(jī)中被認(rèn)為是位累加器,其重要性相當(dāng)于一般中央處理器中的累加器A。AC(PSW.6):輔助進(jìn)位標(biāo)志。當(dāng)進(jìn)行加法或減法操作而產(chǎn)生由低4位數(shù)向高4位數(shù)進(jìn)位或借位時(shí),AC將被硬件置位,否則就被清零。AC被用于BCD碼調(diào)整,詳見(jiàn)指令系統(tǒng)中的“DAA”指令。F0(PSW.5):用戶標(biāo)志位。F0是用戶定義的一個(gè)狀態(tài)標(biāo)記,用軟件來(lái)使它置位或清零。該標(biāo)志位狀態(tài)一經(jīng)設(shè)定,可由軟件測(cè)試F0,以控制程序的流向。RS1、RS0(PSW.4、PSW.3):寄存器區(qū)選擇控制位??梢杂密浖?lái)置位或清零以確定工作寄存器區(qū)。RS1、RS0與寄存器區(qū)的對(duì)應(yīng)關(guān)系見(jiàn)表2-2。2.3.2程序狀態(tài)字寄存器表2-2工作寄存器組選擇OV(PSW.2):溢出標(biāo)志。帶符號(hào)加減運(yùn)算中,超出了累加器A所能表示的符號(hào)數(shù)有效范圍(-128~+127)時(shí),即產(chǎn)生溢出,OV=1,表明運(yùn)算運(yùn)算結(jié)果錯(cuò)誤。如果OV=0,表明運(yùn)算結(jié)果正確。RS1RS0工作寄存器組000組(00H~07H)011組(08H~0FH)102組(10H~17H)113組(18H~1FH)2.3.2程序狀態(tài)字寄存器P(PSW.0):奇偶標(biāo)志。每個(gè)指令周期都由硬件來(lái)置位或清零,以表示累加器A中1的位數(shù)的奇偶數(shù)。若1的位數(shù)為奇數(shù),P置1,否則P清零。P標(biāo)志位對(duì)串行通信中的數(shù)據(jù)傳輸有重要的意義,在串行通信中常用奇偶校驗(yàn)的辦法來(lái)檢驗(yàn)數(shù)據(jù)傳輸?shù)目煽啃?。在發(fā)送端可根據(jù)P的值對(duì)數(shù)據(jù)進(jìn)行奇偶置位或清零。PSW.1:程序狀態(tài)字的第1位,該位的含義沒(méi)有定義,若用戶要使用這一位,可直接使用PSW.1的位地址。PSW寄存器除具有字節(jié)地址外,還具有位地址,因此,可以對(duì)PSW中的任一位進(jìn)行操作,這無(wú)疑大大提高了指令執(zhí)行的效率。2.3.3控制部件控制部件是用來(lái)統(tǒng)一指揮和控制計(jì)算機(jī)進(jìn)行工作的部件。其功能是從存儲(chǔ)器中逐條取指令,進(jìn)行指令譯碼,并通過(guò)定時(shí)和控制電路,在規(guī)定的時(shí)刻發(fā)出各種操作所需的全部?jī)?nèi)部控制信息及CPU外部所需的控制信號(hào),使各部分按照一定得節(jié)拍協(xié)調(diào)工作,完成指令所規(guī)定的各種操作。它由指令部件、時(shí)序部件和操作控制部件組成。(1)指令部件指令部件是一種能對(duì)指令進(jìn)行分析、處理并產(chǎn)生控制信號(hào)的邏輯部件,也是控制器的核心。通常,它由程序計(jì)數(shù)器PC(ProgramCounter)、指令寄存器IR(InstructionRegister)和指令譯碼器等組成。這三個(gè)寄存器用戶都不能直接訪問(wèn)。指令寄存器IR是一個(gè)8位寄存器,用于暫存存放指令代碼,等待譯碼。2.3.3控制部件

指令譯碼器用于對(duì)送入指令譯碼器中的指令進(jìn)行譯碼。所謂“譯碼”,就是把指令轉(zhuǎn)變成執(zhí)行此指令所需要的電信號(hào)。當(dāng)指令送入譯碼器后,由譯碼器對(duì)該指令進(jìn)行譯碼,根據(jù)譯碼器輸出的信號(hào),CPU控制電路定時(shí)產(chǎn)生執(zhí)行該指令所需的各種控制信號(hào),使單片機(jī)正確執(zhí)行程序所需要的各種操作。程序計(jì)數(shù)器PC用于存放CPU要執(zhí)行的下一條指令的地址。程序中的每條指令都有自己的存放地址(指令都存放在ROM區(qū)的某一單元),CPU要執(zhí)行某條指令時(shí),就把該條指令的地址碼(即PC中的值)送到地址總線,從ROM中讀取指令,當(dāng)PC中的地址碼被送上地址總線后,PC會(huì)自動(dòng)指向CPU要執(zhí)行的下一條指令的地址。執(zhí)行指令時(shí),CPU按PC的指示地址從ROM中讀取指令,所讀取指令碼送入指令寄存器中,由指令譯碼器對(duì)指令進(jìn)行譯碼,發(fā)出相應(yīng)的控制信號(hào),從而完成指令所指定的操作。2.3.3控制部件(2)時(shí)序部件時(shí)序部件由時(shí)鐘電路和脈沖分配器組成,用于產(chǎn)生操作控制部件所需的時(shí)序信號(hào)。產(chǎn)生時(shí)序信號(hào)的部件稱為“脈沖發(fā)生器”或“時(shí)序系統(tǒng)”,它由一個(gè)振蕩器和一組計(jì)數(shù)分頻器組成。振蕩器是一個(gè)脈沖源,輸出頻率穩(wěn)定的脈沖,也稱為“時(shí)鐘脈沖”,為CPU提供時(shí)鐘基準(zhǔn)。時(shí)鐘脈沖經(jīng)過(guò)進(jìn)一步的計(jì)數(shù)分頻,產(chǎn)生所需的節(jié)拍信號(hào)或時(shí)間更長(zhǎng)的機(jī)器周期信號(hào)。詳見(jiàn)2.6.2。(3)操作控制部件操作控制部件可以為指令譯碼器的輸出信號(hào)配上節(jié)拍電位和節(jié)拍脈沖,也可以和外部進(jìn)來(lái)的控制信號(hào)組合,共同形成相應(yīng)的微操作控制序列信號(hào),以完成規(guī)定的操作。2.4存貯器結(jié)構(gòu)

一般微機(jī)通常是程序和數(shù)據(jù)共用一個(gè)存儲(chǔ)空間,即ROM和RAM統(tǒng)一編址,屬于“馮.諾依曼”(VonNeumann)結(jié)構(gòu)。而單片機(jī)的存儲(chǔ)器組織結(jié)構(gòu)則把程序存儲(chǔ)空間和數(shù)據(jù)存儲(chǔ)空間嚴(yán)格區(qū)分開(kāi)來(lái),即程序存儲(chǔ)器ROM和數(shù)據(jù)存儲(chǔ)器RAM分開(kāi)編址,屬于“哈佛”(Harvard)結(jié)構(gòu)。程序存儲(chǔ)器ROM用于固化程序、常數(shù)和數(shù)據(jù)表。數(shù)據(jù)存儲(chǔ)器用于存放程序運(yùn)行中產(chǎn)生的各種數(shù)據(jù)、用作堆棧等。2.4存貯器結(jié)構(gòu)AT89S51單片機(jī)存儲(chǔ)器結(jié)構(gòu)如圖2-6所示2.4存貯器結(jié)構(gòu)AT89S51單片機(jī)存儲(chǔ)器在物理結(jié)構(gòu)上分成四個(gè)存儲(chǔ)空間:片內(nèi)程序存儲(chǔ)器、片外程序存儲(chǔ)器、片內(nèi)數(shù)據(jù)存儲(chǔ)器和片外數(shù)據(jù)存儲(chǔ)器。從用戶使用的角度,即從邏輯上考慮,則有三個(gè)存儲(chǔ)空間:片內(nèi)外統(tǒng)一編址的64KB程序存儲(chǔ)器地址空間(0000H~FFFFH)、256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器地址空間(00H~FFH)及片外數(shù)據(jù)存儲(chǔ)器地址空間(0000H~FFFFH)。CPU在訪問(wèn)三個(gè)不同的邏輯空間時(shí),通過(guò)采用不同形式的指令,來(lái)產(chǎn)生相應(yīng)的存儲(chǔ)器選通信號(hào),訪問(wèn)程序存儲(chǔ)器使用MOVC指令、訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)器使用MOV指令、訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器使用MOVX指令。2.4.1程序存貯器

1.AT89S51單片機(jī)程序存儲(chǔ)器ROM程序存儲(chǔ)器用于存放編好的程序、常數(shù)或表格。在正常工作時(shí)只可讀不可寫(xiě),掉電后數(shù)據(jù)不丟失。(1)片內(nèi)具有4K的flash結(jié)構(gòu)的電可擦除只讀存儲(chǔ)器,與INTEL公司早期產(chǎn)品的紫外線擦除的EPROM結(jié)構(gòu)相比,使用更靈活更方便。(2)外部可以擴(kuò)展64K的ROM,以滿足一些大程序的需要。但是建議用戶盡量不要外擴(kuò)ROM,因?yàn)楫?dāng)擴(kuò)展外部ROM的時(shí)候,系統(tǒng)要占有單片機(jī)的P0、P2口及P3口的部分口線作為總線。所以在大多數(shù)的應(yīng)用場(chǎng)合,盡量選擇片內(nèi)的FLASH內(nèi)存的容量能夠滿足實(shí)際需要單片機(jī)型號(hào),這樣不僅可以節(jié)省額外的硬件投資、節(jié)省單片機(jī)的口線資源,更重要的是片內(nèi)FLASH中的程序在下載、燒寫(xiě)時(shí)通過(guò)“加密”可以得到保護(hù)。只有當(dāng)程序特別大,內(nèi)部空間無(wú)法滿足要求時(shí)才選用擴(kuò)展外部ROM。2.4.1程序存貯器

(3)程序內(nèi)存最低端的地址可以在片內(nèi)Flash中,或在外部ROM中。通過(guò)單片機(jī)/EA的引腳的電平來(lái)選擇。例如,在帶有4KB片內(nèi)Flash的AT89S51中,如果把/EA引腳連到Vcc,當(dāng)?shù)刂窞?000H~0FFFH時(shí),則訪問(wèn)內(nèi)部Flash;當(dāng)?shù)刂窞?000H~FFFFH時(shí),將自動(dòng)轉(zhuǎn)向外部程序內(nèi)存。如果/EA端接地,則只訪問(wèn)外部程序內(nèi)存,不管是否有內(nèi)部Flash內(nèi)存。2.4.1程序存貯器

2.AT89S51單片機(jī)程序存儲(chǔ)器管理(1)每個(gè)ROM單元(byte)對(duì)應(yīng)一個(gè)惟一的16bit的地址編碼(Address)(2)CPU要到某個(gè)ROM單元去取指令,是通過(guò)把地址編碼寫(xiě)入16位的程序計(jì)數(shù)器PC來(lái)實(shí)現(xiàn)的,因此AT89系列單片機(jī)地址的編碼范圍(通常稱為尋址范圍)為:0000000000000000B~1111111111111111B(二進(jìn)制)0000H~FFFFH(十六進(jìn)制)0~65535(十進(jìn)制)2.4.1程序存貯器(3)系統(tǒng)復(fù)位后,PC的初始值為0000H,以后的取值是CPU根據(jù)用戶程序的運(yùn)行流程自動(dòng)裝載的(程序順序執(zhí)行時(shí),PC值自動(dòng)加1;執(zhí)行轉(zhuǎn)移指令、子程序調(diào)用和中斷服務(wù)程序時(shí),PC值分別等于轉(zhuǎn)移的目標(biāo)地址、子程序或中斷服務(wù)程序的入口地址。

2.4.1程序存貯器

3.AT89S51單片機(jī)程序存儲(chǔ)器的分配 程序內(nèi)存的某些單元是保留給系統(tǒng)使用的,這幾個(gè)單元的配置如圖2-7所示。從圖2-7可知,單片機(jī)復(fù)位后,程序計(jì)數(shù)器PC的內(nèi)容為0000H,所以CPU總是從0000H單元開(kāi)始執(zhí)行程序。2.4.1程序存貯器

從地址0003H開(kāi)始,系統(tǒng)每隔8個(gè)單元為6個(gè)中斷服務(wù)子程序分配有一個(gè)固定的入口地址。如外部中斷0的入口地址為0003H;定時(shí)器0的入口地址為000BH;外部中斷1的入口地址為0013H;定時(shí)器1的入口地址為001BH;以此類(lèi)推。中斷響應(yīng)后,程序指針PC

將自動(dòng)根據(jù)中斷類(lèi)型指向這些入口地址的某一個(gè),CPU就從這里開(kāi)始執(zhí)行中斷服務(wù)子程序。因此從0003H單元開(kāi)始的這段區(qū)域應(yīng)該保留給中斷使用,所以程序設(shè)計(jì)時(shí)在0000H~0002H單元放置一條轉(zhuǎn)移指令,跳過(guò)這段區(qū)域,轉(zhuǎn)到系統(tǒng)主程序,除非系統(tǒng)不使用中斷,主程序才可以覆蓋這段區(qū)域2.4.2內(nèi)部數(shù)據(jù)存貯器單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)如圖2-8所示。片內(nèi)數(shù)據(jù)存儲(chǔ)器地址范圍是00H~FFH,只有256個(gè)字節(jié),這里僅介紹低128個(gè)字節(jié)區(qū),高128個(gè)字節(jié)由于被特殊功能寄存器占有,故單獨(dú)列出介紹。低128字節(jié)區(qū)主要分為三個(gè)區(qū)域:通用工作寄存器組區(qū)、可位尋址區(qū)和用戶RAM區(qū)。2.4.2內(nèi)部數(shù)據(jù)存貯器(1)工作寄存器組區(qū)最低32個(gè)單元(地址為00H~1FH)是4個(gè)通用工作寄存器組。每個(gè)寄存器組含有8個(gè)8位寄存器,編號(hào)為R0~R7。程序狀態(tài)字PSW中的2位RS0、RS1用來(lái)確定當(dāng)前采用哪一個(gè)工作寄存器組,其對(duì)應(yīng)關(guān)系如前面的表2-2所示。在某一時(shí)刻只能選用其中的一組寄存器工作,系統(tǒng)復(fù)位后,指向工作寄存器組0。如果用戶程序不需要4個(gè)工作寄存器區(qū),則不用的工作寄存器單元可以作一般的RAM使用。2.4.2內(nèi)部數(shù)據(jù)存貯器(2)位尋址區(qū)內(nèi)部RAM區(qū)中的20H~2FH單元(16字節(jié))可供位尋址,這16個(gè)單元共有128位,每位均可直接尋址,其位地址范圍為00H~7FH,具體情況見(jiàn)表2-3。這些位地址有兩種表示方式:一種是采用位地址形式,即00H~7FH;一種是用字節(jié)地址(20H~2FH).位數(shù)方式表示。例如,位地址00H~07H也可表示為20H.0~20H.7。2.4.2內(nèi)部數(shù)據(jù)存貯器表2-3RAM位尋址區(qū)地址表2.4.2內(nèi)部數(shù)據(jù)存貯器

(3)用戶RAM區(qū)30H~7FH共80個(gè)字節(jié)單元,為字節(jié)尋址的內(nèi)部RAM區(qū),可供用戶作為數(shù)據(jù)存儲(chǔ)區(qū)。這一區(qū)域的操作指令非常豐富,數(shù)據(jù)處理方便靈活,是非常寶貴的資源。但是,如果堆棧指針初始化時(shí)設(shè)置在這個(gè)區(qū)域,就要留出足夠的字節(jié)單元作為堆棧區(qū),以防止在數(shù)據(jù)存儲(chǔ)時(shí),破壞了堆棧的內(nèi)容。堆棧:是按先進(jìn)后出或后進(jìn)先出原則進(jìn)行讀/寫(xiě)的特殊RAM區(qū)域。51單片機(jī)的堆棧區(qū)是不固定的,原則上可設(shè)置在內(nèi)部RAM的任意區(qū)域內(nèi)。實(shí)際使用時(shí)要根據(jù)對(duì)片內(nèi)RAM各功能區(qū)的使用情況而靈活設(shè)置,應(yīng)避開(kāi)工作寄存器區(qū)、位尋址區(qū)和用戶實(shí)際使用的數(shù)據(jù)區(qū),一般設(shè)在2FH地址單元以后的區(qū)域。2.4.2內(nèi)部數(shù)據(jù)存貯器

堆棧的作用:主要用在子程序調(diào)用或中斷處理過(guò)程中,用于保護(hù)斷點(diǎn)和現(xiàn)場(chǎng),實(shí)現(xiàn)子程序或中斷的多級(jí)嵌套處理。在CPU響應(yīng)中斷或調(diào)用子程序時(shí),會(huì)自動(dòng)地將斷點(diǎn)處的16位返回地址壓入堆棧。在中斷服務(wù)程序或子程序結(jié)束時(shí),返回地址會(huì)自動(dòng)由堆棧彈出,并放回到程序計(jì)數(shù)器PC中,使程序從原斷口處繼續(xù)執(zhí)行下去。堆棧除了用于保護(hù)斷點(diǎn)處的返回地址外,還可以用于保護(hù)其他一些重要信息,要注意的是,必須按照“后進(jìn)先出”的原則存取信息。堆棧也可以作為特殊的數(shù)據(jù)交換區(qū)使用。2.4.2內(nèi)部數(shù)據(jù)存貯器

堆棧的開(kāi)辟:棧頂?shù)奈恢糜蓪iT(mén)設(shè)置的堆棧指針SP指出。51單片機(jī)的SP是8位寄存器,堆棧屬向上生長(zhǎng)的,當(dāng)數(shù)據(jù)壓入堆棧時(shí),SP的內(nèi)容自動(dòng)加1,作為本次進(jìn)棧的指針,然后再存入數(shù)據(jù)。SP的值隨著數(shù)據(jù)的存入而增加。當(dāng)數(shù)據(jù)從堆棧彈出之后,SP的值隨之減少。復(fù)位時(shí),SP的初值為07H,用戶在初始化程序中可以給SP賦新的初值。2.4.3特殊功能寄存器內(nèi)部RAM的高128單元是給特殊寄存器使用的,因此稱之為專用寄存器區(qū),其單元地址為80H~FFH。因?yàn)檫@些寄存器的功能已作專門(mén)規(guī)定,所以稱其為專用寄存器或特殊功能寄存器(SpecialFunctionRegisters),簡(jiǎn)稱SFR。AT89S51的SFR的總數(shù)為26個(gè),僅占用了80H~FFH中的很小一部分。SFR是單片機(jī)片內(nèi)資源的控制指揮單元,單片機(jī)內(nèi)部不管集成了多少外圍接口部件和功能單元,都是通過(guò)特殊功能寄存器SFR進(jìn)行控制和管理的,因此學(xué)習(xí)任何一個(gè)單片機(jī)的功能部件的使用,一定要了解與之相關(guān)的SFR,并弄清通過(guò)這些SFR如何去控制你所使用的功能部件。2.4.3特殊功能寄存器51系列單片機(jī)內(nèi)的I/O鎖存器、定時(shí)器、串行口數(shù)據(jù)緩沖器以及各種控制寄存器和狀態(tài)寄存器都以特殊功能寄存器的形式出現(xiàn)。它們離散地分布在80H~FFH的地址空間范圍內(nèi),具體分布見(jiàn)表2-4。表2-4AT89S51單片機(jī)的SFR在80H~FFH的離散分布2.4.3特殊功能寄存器

表2-4列出了AT89S51單片機(jī)所有的特殊功能寄存器及其地址和初始值。字節(jié)地址能被8整除的專用寄存器都可以實(shí)現(xiàn)位尋址,個(gè)別不能被8整除的專用寄存器也可以實(shí)現(xiàn)位尋址。SFR的使用方法①?gòu)谋?-4可以看出,80H~FFH這128字節(jié)并不是所有的地址都定義了SFR。在這個(gè)區(qū)域當(dāng)中,除了SFR之外剩余的空閑單元,用戶不得使用。讀這些地址,一般將得到一個(gè)隨機(jī)數(shù)據(jù);寫(xiě)入的數(shù)據(jù)將會(huì)無(wú)效。②必須使用直接尋址方式對(duì)SFR進(jìn)行訪問(wèn),可使用寄存器名稱(是它的符號(hào)地址)或地址。例如:0E0H——累加器的地址ACC——累加器的名稱2.4.3特殊功能寄存器③具有位地址和位名稱的SFR才可以位尋址,位地址有以下4種表示形式:a.直接使用位地址表示例如:0D7H——PSW最高位的位地址b.使用位名稱表示例如:CY——PSW最高位的位名稱c.使用SFR字節(jié)地址.位形式表示例如:0D7H.7——PSW字節(jié)地址.最高位d.使用SFR名稱.位形式表示例如:PSW.7——PSW名稱.最高位

2.4.3特殊功能寄存器(1)累加器ACC累加器ACC是一個(gè)8位累加器,字節(jié)地址為E0H。它是CPU中最重要、最繁忙的寄存器,ALU進(jìn)行運(yùn)算時(shí)數(shù)據(jù)絕大多數(shù)時(shí)候都來(lái)自于累加器ACC。它一般用于存放參加運(yùn)算的操作數(shù)和運(yùn)算結(jié)果,在指令系統(tǒng)中用A表示。(2)B寄存器B寄存器是運(yùn)算器中的一個(gè)工作寄存器,字節(jié)地址為F0H。它主要是和ACC配合完成乖法和除法運(yùn)算而設(shè)置的,存放運(yùn)算結(jié)果。在除法指令中,被除數(shù)取自ACC,除數(shù)取自B,商數(shù)存放在ACC中,而余數(shù)則存放在B中。乘法指令的兩個(gè)操作數(shù)分別取自ACC和B,乘積則存放在AB寄存器對(duì)中(此處的A即ACC)。B寄存器不進(jìn)行乖、除運(yùn)算時(shí),B寄存器可作為RAM使用。2.4.3特殊功能寄存器

(3)堆棧指針SP堆棧指針SP(StackPointer)是一個(gè)8位特殊功能寄存器,字節(jié)地址為81H。它指示出堆棧頂部在內(nèi)部RAM中的位置。系統(tǒng)復(fù)位后,SP初始化為07H,使得堆棧事實(shí)上由08H單元開(kāi)始??紤]到08H~1FH單元分屬于工作寄存器區(qū)1~3,若程序設(shè)計(jì)中要用到這些區(qū),則最好把SP值改置為1FH或更大的值如60H。SP的初始值越小,堆棧深度就越深。堆棧指針的值可以由軟件改變,因此堆棧在內(nèi)部RAM中的位置比較靈活。除用軟件直接改變SP值外,在執(zhí)行PUSH、POP、各種子程序調(diào)用、中斷響應(yīng)、子程序返回(RET)和中斷返回(RETI)等指令時(shí),SP值將自動(dòng)調(diào)整。當(dāng)執(zhí)行子程序調(diào)用或中斷服務(wù)程序時(shí),需要將下一條要執(zhí)行的指令地址即PC值壓入堆棧保存起來(lái),當(dāng)子程序或中斷返回時(shí),再將SP指向單元的內(nèi)容回送到程序計(jì)數(shù)器PC中。這是一個(gè)很重要的指針。2.4.3特殊功能寄存器

(4)雙地址指針DPTR0和DPTR1AT89S51單片機(jī)提供了兩路16位地址指針:位于SFR中82H~83H的DPTR0和位于84H~85H的DPTR1,能給程序設(shè)計(jì)帶來(lái)很大的便利。DPTR為16位的地址指針,由兩個(gè)8位的寄存器DPH和DPL組成,可存放一個(gè)16位的地址值。當(dāng)CPU訪問(wèn)64KB的外部數(shù)據(jù)存儲(chǔ)器時(shí),就用DPTR作地址指針,存放外部?jī)?nèi)存的地址;當(dāng)CPU訪問(wèn)64KB的程序存儲(chǔ)器時(shí),DPTR用作基址寄存器。CPU也可單獨(dú)對(duì)DPH、DPL操作,即將DPTR分成兩個(gè)寄存器使用。2.4.3特殊功能寄存器

雙地址指針可以改善同時(shí)需要兩個(gè)16位指針運(yùn)用時(shí)的性能DPTR0和DPTR1的使用由AUXR1的0位DPS來(lái)切換。當(dāng)DPS位為0時(shí),所有對(duì)DPTR的操作運(yùn)用DPTR0;當(dāng)DPS位為1時(shí),所有對(duì)DPTR的操作運(yùn)用DPTR1。這樣,通過(guò)一個(gè)基本的INCAUXR1指令,就可以來(lái)回切換兩個(gè)地址指針。例如:MOVAUXR1,#0;DPS為0,DPTR0有效……INCAUXR1;DPS為1,DPTR1有效……INCAUXR1;DPS為0,DPTR0有效

2.4.3特殊功能寄存器地址指針DPTR與程序計(jì)數(shù)器PC的異同分析:①相同之處:兩者都是與地址有關(guān)的、16位的寄存器。作為地址寄存器使用時(shí),PC與DPTR都是通過(guò)P0和P2口(作為16位地址總線)輸出的。但是,PC的輸出與ALE及PSEN有關(guān);DPTR的輸出,則與ALE、RD及WR相聯(lián)系。②不同之處:PC與程序存儲(chǔ)器的地址有關(guān);而DPTR與數(shù)據(jù)存儲(chǔ)器的地址有關(guān);PC是16位的,DPTR可以作為16位寄存器對(duì)待,也可以作為兩個(gè)8位寄存器對(duì)待。另外PC是不可以訪問(wèn)的,有自己獨(dú)特的變化方式,它的變化軌跡決定了程序執(zhí)行的流程;DPTR是可以訪問(wèn)的,如MOVDPTR1,#XXXXH,INCDPTP1等。2.4.3特殊功能寄存器(5)端口P0~P3專用寄存器P0、P1、P2和P3分別是I/O口P0~P3的鎖存器,字節(jié)地址分別為80H、90H、A0H和B0H。在AT89SC51中,I/O和RAM統(tǒng)一編址,既可以字節(jié)尋址,也可以位尋址,使用起來(lái)較方便。有關(guān)P0~P3的詳細(xì)情況,在后續(xù)內(nèi)容中介紹。(6)串行數(shù)據(jù)緩沖器SBUF串行數(shù)據(jù)緩沖器SBUF的字節(jié)地址99H。用于存放欲發(fā)送或接收的數(shù)據(jù),它實(shí)際上由兩個(gè)獨(dú)立的寄存器組成,一個(gè)是發(fā)送緩沖器,另一個(gè)是接收緩沖器。當(dāng)要發(fā)送的數(shù)據(jù)傳送到SBUF時(shí),進(jìn)入的是發(fā)送緩沖器,當(dāng)要從SBUF取數(shù)據(jù)時(shí),則取自接收緩沖器,取走的是剛接收到的數(shù)據(jù)2.4.3特殊功能寄存器

(7)定時(shí)器/計(jì)數(shù)器AT89SC51單片機(jī)有兩個(gè)16位定時(shí)器/計(jì)數(shù)器T0和T1,字節(jié)地址分別90H和92H,它們分別由兩個(gè)獨(dú)立的8位寄存器組成,共有4個(gè)獨(dú)立的寄存器:TH0,TL0,TH1,TL1,可對(duì)這4個(gè)寄存器尋址,但不能把T0和T1當(dāng)成16位寄存器來(lái)訪問(wèn)。(8)看門(mén)狗定時(shí)器WDTWDT是為了解決CPU程序運(yùn)行時(shí)可能進(jìn)入混亂或死循環(huán)而設(shè)置,它由一個(gè)14bit計(jì)數(shù)器和看門(mén)狗復(fù)位SFR(WDTRST)構(gòu)成。外部復(fù)位時(shí),WDT默認(rèn)為關(guān)閉狀態(tài),要打開(kāi)WDT,用戶必須按順序?qū)?1EH和0E1H寫(xiě)到WDTRST寄存器(SFR地址為0A6H),當(dāng)啟動(dòng)了WDT,它會(huì)隨晶體振蕩器在每個(gè)機(jī)器周期計(jì)數(shù),除硬件復(fù)位或WDT溢出復(fù)位外沒(méi)有其它方法關(guān)閉WDT,當(dāng)WDT溢出,將使RST引腳輸出高電平的復(fù)位脈沖。2.4.3特殊功能寄存器

使用看門(mén)狗(WDT):打開(kāi)WDT需按次序?qū)?1EH和0E1H到WDTRST寄存器(SFR的地址為0A6H),當(dāng)WDT打開(kāi)后,需在一定的時(shí)候?qū)?1EH和0E1H到WDTRST寄存器以避免WDT計(jì)數(shù)溢出。14位WDT計(jì)數(shù)器計(jì)數(shù)達(dá)到16383(3FFFH),WDT將溢出并使器件復(fù)位。WDT打開(kāi)時(shí),它會(huì)隨晶體振蕩器在每個(gè)機(jī)器周期計(jì)數(shù),這意味著用戶必須在小于每個(gè)16383機(jī)器周期內(nèi)復(fù)位WDT,也即寫(xiě)01EH和0E1H到WDTRST寄存器,WDTRST為只寫(xiě)寄存器。WDT計(jì)數(shù)器既不可讀也不可寫(xiě),當(dāng)WDT溢出時(shí),通常將RST引腳輸出高電平的復(fù)位脈沖。復(fù)位脈沖持續(xù)時(shí)間為98xTOSC,而TOSC=1/FOSC(晶體振蕩頻率)。為使WDT工作最優(yōu)化,必須在合適的程序代碼時(shí)間段周期地復(fù)位WDT防止WDT溢出。2.4.3特殊功能寄存器

掉電和空閑時(shí)的WDT:掉電時(shí)期,晶體振蕩停止,WDT也停止。掉電模式下,用戶不能再?gòu)?fù)位WDT。有兩種方法可退出掉電模式:硬件復(fù)位或通過(guò)激活外部中斷。當(dāng)硬件復(fù)位退出掉電模式時(shí),處理WDT可像通常的上電復(fù)位一樣。當(dāng)由中斷退出掉電模式則有所不同,中斷低電平狀態(tài)持續(xù)到晶體振蕩穩(wěn)定,當(dāng)中斷電平變?yōu)楦呒错憫?yīng)中斷服務(wù)。為防止中斷誤復(fù)位,當(dāng)器件復(fù)位,中斷引腳持續(xù)為低時(shí),WDT并未開(kāi)始計(jì)數(shù),直到中斷引腳被拉高為止。這為在掉電模式前復(fù)位WDT。2.4.3特殊功能寄存器

為保證WDT在退出掉電模式時(shí)極端情況下不溢出,最好在進(jìn)入掉電模式前復(fù)位WDT。在進(jìn)入空閑模式前,WDT打開(kāi)時(shí),WDT是否繼續(xù)由SFR中的AUXR的WDIDLE位決定,在IDLE期間(位WDIDLE=0)默認(rèn)狀態(tài)是繼續(xù)計(jì)數(shù)。為防止AT89S51從空閑模式中復(fù)位,用戶應(yīng)周期性地設(shè)置定時(shí)器,重新進(jìn)入空閑模式。當(dāng)位WDIDLE被置位,在空閑模式中WDT將停止計(jì)數(shù),直到從空閑(IDLE)模式中退出重新開(kāi)始計(jì)數(shù)。2.4.3特殊功能寄存器

(10)輔助寄存器1(AUXR1)AUXR1用于選擇雙數(shù)據(jù)指針寄存器DP0和DP1,它的字節(jié)地址為A2H,不可以位尋址。各位的定義如表2-5所示。其中:-:預(yù)留擴(kuò)展用;DPS:數(shù)據(jù)指針選擇位DPS=0選擇DPTR寄存器DP0L和DP0H;DPS=1選擇DPTR寄存器DP1L和DP1H。2.4.3特殊功能寄存器(11)輔助寄存器(AUXR)AUXR的字節(jié)地址為8EH,用于選擇ALE的時(shí)鐘輸出方式、RESET輸出及空閑模式下WDT的工作方式,地址為8EH,不可以位尋址,各位的定義如表2-6所示。其中:-:預(yù)留擴(kuò)展用DISALE:ALE使能標(biāo)志位當(dāng)DISALE=0時(shí),ALE以1/6晶振頻率輸出信號(hào);當(dāng)DISALE=1時(shí),ALE只有在執(zhí)行MOVX或MOVC指令時(shí)啟動(dòng)2.4.3特殊功能寄存器DISRTO:復(fù)位輸出標(biāo)志位當(dāng)DISRTO=0時(shí),看門(mén)狗(WDT)定時(shí)結(jié)束,Reset輸出高電平;當(dāng)DISRTO=1時(shí),Reset只有輸入WDIDLE:空閑模式下WDT使能標(biāo)志位當(dāng)WDIDLE=0時(shí),空閑模式下,WDT繼續(xù)計(jì)數(shù);當(dāng)WDIDLE=1時(shí),空閑模式下,WDT停止計(jì)數(shù)(12)其它控制寄存器IP、IE、TMOD、TCON、SCON和PCON寄存器分別包含有中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器、串行口和供電方式的控制和狀態(tài)位,這些寄存器將在以后內(nèi)容中介紹。2.4.4地址空間1.片外總線結(jié)構(gòu)從AT89S51單片機(jī)引腳可以看出,除了電源、復(fù)位、時(shí)鐘輸入以及I/O口外,其余的管腳都是為實(shí)現(xiàn)系統(tǒng)擴(kuò)展而設(shè)置的。這些管腳構(gòu)成了片外三總線結(jié)構(gòu),如圖2-9所示。2.4.4地址空間(1)地址總線(AB)地址總線的寬度是16位,因此可以尋址的范圍是64?KB。采用分時(shí)復(fù)用技術(shù),可以對(duì)外部64?KB的數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器直接尋址。它由P0口提供16位地址總線的低8位(A0~A7),由P2口提供地址總線的高8位(A8~A15)。(2)數(shù)據(jù)總線(DB)數(shù)據(jù)總線的寬度是8位,它由P0口提供。(3)控制總線(CB)控制總線由P3口的第二功能(RXD、TXD、INT0、INT1、T0、T1、RD、WR)和4根獨(dú)立的控制線(RST、EA、ALE、PSEN)組成。2.4.4地址空間2.程序存儲(chǔ)器地址空間程序存儲(chǔ)器用于存放編好的程序和表格常數(shù)。程序存儲(chǔ)器通過(guò)16位程序計(jì)數(shù)器尋址,尋址能力為64KB,這使得指令能在64KB地址空間內(nèi)任意跳轉(zhuǎn)。AT89S51單片機(jī)ROM的地址范圍0000H~0FFFH。3.?dāng)?shù)據(jù)存儲(chǔ)器地址空間(1)片內(nèi)RAM①工作寄存器區(qū):AT89S51的前32個(gè)單元(地址00H~1FH)稱為寄存器區(qū)。通過(guò)對(duì)特殊功能寄存器PSW中RS1、RS0兩位的編程設(shè)置,可選擇任一寄存器組為工作寄存器組,方法如前面表2-2所示。2.4.4地址空間

②位尋址區(qū):字節(jié)地址20H到2FH稱為位地址區(qū),共有16個(gè)字節(jié),計(jì)128位,每位都有相應(yīng)的位地址,位地址范圍為00H~7FH,見(jiàn)前面表2-3。位尋址區(qū)有兩種訪問(wèn)方式:一是按字節(jié)訪問(wèn);另一種是通過(guò)位尋址,對(duì)位尋址區(qū)128位進(jìn)行位操作。③便箋區(qū):30H~7FH,便箋區(qū)共有80個(gè)RAM單元,用于存放用戶數(shù)據(jù)或作堆棧區(qū)使用。AT89S51對(duì)便棧區(qū)中每個(gè)RAM單元是按字節(jié)存取的。④特殊功能寄存器(26個(gè)):AT89S51片內(nèi)高128BRAM中,有26個(gè)特殊功能寄存器(SFR),它們離散地分布在80H~FFH的RAM空間中。訪問(wèn)特殊功能寄存器只允許使用直接尋址方式。特殊功能寄存器表2-7所示。2.4.4地址空間(2)片外RAMAT89S51構(gòu)成的應(yīng)用系統(tǒng)當(dāng)片內(nèi)RAM不夠用時(shí),可在片外部擴(kuò)充數(shù)據(jù)存儲(chǔ)器。AT89S51給用戶提供了可尋址64KB(0000H~FFFFH)的外部擴(kuò)充RAM的能力,至于擴(kuò)多少RAM,則根據(jù)用戶實(shí)際需要來(lái)定。2.4.5外部數(shù)據(jù)存貯器

外部數(shù)據(jù)存儲(chǔ)器的尋址空間可達(dá)64?KB,地址范圍是0000H~FFFFH。P0端口作為RAM的地址/數(shù)據(jù)總線,當(dāng)外部地址空間小于FFH時(shí),只需P0口作為地址總線即可,P2口可以作為一般的I/O使用。當(dāng)外部地址空間大于FFH時(shí),則由P2端口傳送高8位地址。對(duì)片外數(shù)據(jù)存儲(chǔ)器的訪問(wèn),使用MOVX的間接尋址指令,以區(qū)別對(duì)內(nèi)部RAM(片內(nèi)用MOV)的訪問(wèn),同時(shí)自動(dòng)產(chǎn)生讀/寫(xiě)控制信號(hào)RD和WR。2.4.5外部數(shù)據(jù)存貯器片外RAM的用途:(1)沒(méi)有特別的用途,不像片內(nèi)RAM,不劃分區(qū)域。(2)片外RAM做通用RAM使用,主要存放大量采集的或接收的數(shù)據(jù)、運(yùn)算的中間數(shù)據(jù)、最后結(jié)果、用作堆棧等。使用外部RAM同樣是要付出占用口資源為代價(jià)的,所以一般情況下不提倡使用外部RAM。2.5I/O端口

AT89系列單片機(jī)有P0(P0.0~P0.7)、P1(P1.0~P1.7)、P2(P2.0~P2.7)、P3(P3.0~P3.7)4個(gè)8位雙向輸入/輸出端口,在結(jié)構(gòu)上因端口的使用功能不同,其結(jié)構(gòu)和性能都有所不同因此了解端口的結(jié)構(gòu)特點(diǎn)是十分必要的,下面分別介紹。2.5.1I/O的內(nèi)部結(jié)構(gòu)P0口是一個(gè)8位漏極開(kāi)路的雙向I/O口。圖2-10是P0口的位結(jié)構(gòu)圖。當(dāng)P0口作為輸出引腳時(shí):控制信號(hào)=0時(shí),與門(mén)輸出=0,V1截止;內(nèi)部總線=0,Q非=1,V2導(dǎo)通,P0.x=0讀引腳當(dāng)從內(nèi)部總線輸出低電平后,鎖存器Q=0,Q非=1,場(chǎng)效應(yīng)管T2開(kāi)通,端口線呈低電平狀態(tài)。此時(shí)無(wú)論端口線上外接的信號(hào)是低電乎還是高電平,從引腳讀入單片機(jī)的信號(hào)都是低電平;因此作為輸入引腳時(shí)一定是高電平;還有如果是讀改寫(xiě)指令時(shí)一定是讀鎖存器。作為地址/數(shù)據(jù)復(fù)用口使用時(shí)的工作原理

這時(shí)多路開(kāi)關(guān)‘控制’信號(hào)為‘1’,‘與門(mén)’解鎖,當(dāng)數(shù)據(jù)/地址線=0時(shí),與門(mén)輸出為0,反相器=1,V2導(dǎo)通,P0.X=0;當(dāng)?shù)刂?數(shù)據(jù)=1時(shí),V1導(dǎo)通,V2截止,P0.X=1.2.5.1I/O的內(nèi)部結(jié)構(gòu)2.P1口P1口是一個(gè)有內(nèi)部上拉電阻的準(zhǔn)雙向口,位結(jié)構(gòu)如圖2-8所示,P1口在電路結(jié)構(gòu)上與P0口有一些不同之處。首先它不再需要多路轉(zhuǎn)接電路MUX,其次是電路的內(nèi)部有上拉電阻。與場(chǎng)效應(yīng)管共同組成輸出驅(qū)動(dòng)電路。2.5.1I/O的內(nèi)部結(jié)構(gòu)

(1)?P1口作通用I/O口使用作為輸出口使用時(shí),已能向外提供推拉電流負(fù)載,無(wú)需再外接上拉電阻。在作輸入時(shí),和P0口一樣,必須先將“1”寫(xiě)入鎖存器,使場(chǎng)效應(yīng)管T2截止,從而完成輸入操作。(2)P1口管腳復(fù)用功能對(duì)于AT89S51單片機(jī),P1.0與P1.1可以配置成定時(shí)/計(jì)數(shù)器2的外部計(jì)數(shù)輸入端(P1.0/T2)與定時(shí)/計(jì)數(shù)器2的觸發(fā)輸入端(P1.0/T2EX);P1.5、P1.6、P1.7用于flash內(nèi)存的ISP下載引腳。(3)對(duì)Flash內(nèi)存進(jìn)行編程或校驗(yàn)時(shí)接收低8位地址在對(duì)AT8989S51單片機(jī)內(nèi)部Flash并行編程下載和程序校驗(yàn)時(shí),P1口接收低8位地址。2.5.1I/O的內(nèi)部結(jié)構(gòu)表2-8P1口管腳復(fù)用功能2.5.1I/O的內(nèi)部結(jié)構(gòu)3.P2口(1)P2口作通用I/O口使用。當(dāng)P2口作通用I/O口使用時(shí),是一個(gè)準(zhǔn)雙向口,位結(jié)構(gòu)如圖2-12所示,此時(shí)轉(zhuǎn)換開(kāi)關(guān)MUX倒向左邊,輸出級(jí)與鎖存器接通,引腳可接I/O設(shè)備,其輸入/輸出操作與P1口完全相同。2.5.1I/O的內(nèi)部結(jié)構(gòu)

(2)P2口作高8位地址總線口使用。當(dāng)系統(tǒng)擴(kuò)展外部存儲(chǔ)器時(shí),P2口用于輸出高8位地址A15~A8。這時(shí)在CPU的控制下,轉(zhuǎn)換開(kāi)關(guān)MUX倒向右邊,接通內(nèi)部地址總線。(3)對(duì)Flash內(nèi)存進(jìn)行編程和校驗(yàn)時(shí)接收高位地址。在對(duì)AT89系列單片機(jī)內(nèi)部Flash并行程序設(shè)計(jì)和程序校驗(yàn)時(shí),P2口也接收高位地址或一些控制信號(hào)。2.5.1I/O的內(nèi)部結(jié)構(gòu)4.P3口P3口是一個(gè)多用途的口,也是一個(gè)準(zhǔn)雙向口,作為第一功能(通用I/O端口)使用時(shí),其功能同P1口。P3口的位結(jié)構(gòu)如圖2-13所示。當(dāng)作為I/O使用時(shí),第二功能信號(hào)引線應(yīng)保持高電平,與非門(mén)開(kāi)通,以維持從鎖存器到輸出端數(shù)據(jù)輸出通路的暢通。2.5.1I/O的內(nèi)部結(jié)構(gòu)

P3口還接收一些控制信當(dāng)作第二功能使用時(shí),每一位功能定義如表2-9所示。P3口的第二功能實(shí)際上就是系統(tǒng)具有控制功能的控制線。當(dāng)輸出第二功能信號(hào)時(shí),該位的鎖存器應(yīng)置“1”,使與非門(mén)對(duì)第二功能信號(hào)的輸出是暢通的,從而實(shí)現(xiàn)第二功能信號(hào)的輸出。CPU區(qū)分單片機(jī)的引腳是否有第二功能只要CPU執(zhí)行到相應(yīng)的指令,就自動(dòng)轉(zhuǎn)成了第二功能。2.5.1I/O的內(nèi)部結(jié)構(gòu)

4個(gè)I/O端口使用時(shí)的注意事項(xiàng)和在結(jié)構(gòu)上的異同:通過(guò)前面的介紹,可知4個(gè)I/O端口在結(jié)構(gòu)上是基本相同的,但又各具特點(diǎn)。在無(wú)片外擴(kuò)展存儲(chǔ)器的系統(tǒng)中,這4個(gè)端口的每1位都可以作為I/O端口使用。在作為一般的通用I/O輸入時(shí),都必須先向鎖存器寫(xiě)入“1”,使輸出驅(qū)動(dòng)場(chǎng)效應(yīng)管FET截止,以免誤讀數(shù)據(jù)。在系統(tǒng)擴(kuò)展片外存儲(chǔ)器時(shí),P2口作為高8位地址,P0口分時(shí)作為低8位地址和雙向數(shù)據(jù)總線。

2.5.2I/O口的負(fù)載能力和接口要求1.P0口(1)負(fù)載能力1)一般I/O口的負(fù)載能力:每一位輸出可以驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。2)用作總線時(shí)的負(fù)載能力:P0口作總線時(shí),每一位輸出可以驅(qū)動(dòng)8個(gè)LS型TTL負(fù)載。拉電流:?jiǎn)纹瑱C(jī)引腳為高電平時(shí)對(duì)外輸出的電流,一般1mA灌電流:?jiǎn)纹瑱C(jī)引腳為低電平時(shí)對(duì)外吸收的電流,一般10mA2.5.2I/O口的負(fù)載能力和接口要求

2.P1~P3口(1)負(fù)載能力P1~P3口的輸出級(jí)接有上拉電阻,它們的每一位輸出可以驅(qū)動(dòng)4個(gè)LS型TTL負(fù)載。(2)接口要求由于P1~P3口的輸出級(jí)接有上拉負(fù)載電阻,無(wú)論是作為輸入口,還是作為輸出口,不管外部電路的類(lèi)型是什么,均無(wú)須外接上拉電阻。2.6復(fù)位電路和時(shí)鐘電路

復(fù)位是單片機(jī)的初始化操作,其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開(kāi)始執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯(cuò)或操作錯(cuò)誤使系統(tǒng)出現(xiàn)死機(jī)時(shí),也必須對(duì)單片機(jī)進(jìn)行復(fù)位,使其重新從頭開(kāi)始工作。系統(tǒng)剛接通電源或重新啟動(dòng)時(shí)均進(jìn)入復(fù)位狀態(tài)。當(dāng)系統(tǒng)處于正常工作狀態(tài)時(shí),如果RST引腳上有一個(gè)高電平并維持2個(gè)機(jī)器周期(24個(gè)振蕩周期)以上,則CPU就可以實(shí)現(xiàn)可靠復(fù)位,如圖2-14所示,其中TCY為機(jī)器周期,等于12個(gè)時(shí)鐘周期。復(fù)位后ALE、PSEN均為高電平,各寄存器和程序計(jì)數(shù)器PC的狀態(tài)見(jiàn)表2-10所示。2.6復(fù)位電路和時(shí)鐘電路2.6.1復(fù)位電路及工作方式

單片機(jī)的外部復(fù)位電路有上電自動(dòng)復(fù)位、按鍵手動(dòng)復(fù)位、以及外部復(fù)位信號(hào)輸入等方式。1.上電自動(dòng)復(fù)位電路,也稱為自動(dòng)復(fù)位電路。當(dāng)接通電源的瞬間,RST端與VCC同電位,隨著電容上的電壓逐漸上升,RST端的電壓逐漸下降,于是在RST端便形成了一個(gè)正脈沖,其持續(xù)時(shí)間取決于RC電路的時(shí)間常數(shù),單片機(jī)在正常工作時(shí),高電平持續(xù)2個(gè)時(shí)鐘即可實(shí)現(xiàn)系統(tǒng)有效地復(fù)位上電時(shí)高電平要維持10ms以上。2.6.1復(fù)位電路及工作方式

2.按鍵手動(dòng)復(fù)位圖2-16是AT89S51單片機(jī)的上電+按鍵復(fù)位電路。上電復(fù)位過(guò)程同上。當(dāng)單片機(jī)工作過(guò)程中需要復(fù)位時(shí),按下復(fù)位鍵,復(fù)位端RST通過(guò)200Ω的電阻與VCC電源接通,使RST引腳為高電平。復(fù)位按鍵彈起后,RST端經(jīng)10KΩ的電阻接地,完成復(fù)位過(guò)程。圖2-16VCC是單片機(jī)的供電電壓,一般為+5V。2.6.1復(fù)位電路及工作方式3.外接復(fù)位芯片為了保證單片機(jī)可靠地復(fù)位,有時(shí)需要外接復(fù)位芯片,特別是當(dāng)單片機(jī)處于間歇工作情況的時(shí)候,單片機(jī)需要頻繁的復(fù)位,例如,在計(jì)算機(jī)監(jiān)測(cè)系統(tǒng)中,電池供電的單片機(jī)系統(tǒng)由主計(jì)算機(jī)控制,平時(shí)單片機(jī)系統(tǒng)處于斷電狀態(tài)(節(jié)省電能),當(dāng)主計(jì)算機(jī)接通單片機(jī)系統(tǒng)電源后,單片機(jī)需要可靠的上電復(fù)位進(jìn)入工作狀態(tài)。為提高復(fù)位的可靠性,可選用專用的復(fù)位芯片。2.6.2時(shí)鐘電路及時(shí)序1.時(shí)鐘電路AT89S51單片機(jī)的時(shí)鐘電路主要內(nèi)部振蕩方式和外部振蕩方式兩種接法(1)內(nèi)部振蕩方式AT89S51中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器。外接石英晶體(或陶瓷諧振器)及電容C1、C2接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對(duì)外接電容C1、C2雖然沒(méi)有十分嚴(yán)格的要求,但電容容量的大小會(huì)輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性。如果使用石英晶體,我們推薦使用30pF+/-10pF,而如使用陶瓷諧振器建議選擇40pF+/-10PF。內(nèi)部振蕩方式接法如圖2-17所示。2.6.2時(shí)鐘電路及時(shí)序

(2)外部振蕩方式用戶也可以采用外部時(shí)鐘。采用外部時(shí)鐘的電路如圖2-18所示。這種情況下,外部時(shí)鐘脈沖接到XTAL1端,即內(nèi)部時(shí)鐘發(fā)生器的輸入端,XTAL2端則懸空。由于外部時(shí)鐘信號(hào)是通過(guò)一個(gè)2分頻觸發(fā)器后作為內(nèi)部時(shí)鐘信號(hào)的,所以對(duì)外部時(shí)鐘信號(hào)的占空比沒(méi)有特殊要求,但最小高電平持續(xù)時(shí)間和最大的低電平持續(xù)時(shí)間應(yīng)符合產(chǎn)品技術(shù)條件的要求。

圖2-17內(nèi)部振蕩方式圖2-18外部振蕩方式2.6.2時(shí)鐘電路及時(shí)序圖2-19為AT89S51單片機(jī)采用內(nèi)部振蕩方式的整個(gè)時(shí)鐘電路的框圖2.6.2時(shí)鐘電路及時(shí)序

2.CPU時(shí)序單片機(jī)的時(shí)序是指CPU在執(zhí)行指令時(shí)所需控制信號(hào)的時(shí)間順序。時(shí)序信號(hào)是以時(shí)鐘脈沖為基準(zhǔn)產(chǎn)生的。CPU發(fā)出的時(shí)序信號(hào)有兩類(lèi):一類(lèi)用于片內(nèi)各功能部件的控制,由于這類(lèi)信號(hào)在CPU內(nèi)部使用,用戶無(wú)須了解;另一類(lèi)信號(hào)通過(guò)單片機(jī)的引腳送到外部,用于片外存儲(chǔ)器或I/O端口的控制,這類(lèi)時(shí)序信號(hào)對(duì)單片機(jī)系統(tǒng)的硬件設(shè)計(jì)非常重要。為了便于對(duì)CPU時(shí)序進(jìn)行分析,人們按指令的執(zhí)行過(guò)程規(guī)定了幾種周期,即時(shí)鐘周期、狀態(tài)周期、機(jī)器周期和指令周期,也稱為時(shí)序定時(shí)單位。(1)時(shí)鐘周期:時(shí)鐘周期也稱振蕩周期,即振蕩器的振蕩頻率fosc的倒數(shù),是時(shí)序中最小的時(shí)間單位。單片機(jī)在工作時(shí),它是由內(nèi)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論