




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章單片機(jī)系統(tǒng)概述1.1概述1.2單片機(jī)應(yīng)用系統(tǒng)及設(shè)計(jì)簡介1.3單片機(jī)的學(xué)習(xí)方法習(xí)題1
1.1概述
1.1.1單片機(jī)及其發(fā)展
單片機(jī)全稱為單片微型計(jì)算機(jī)(SingleChipMicrocomputer,SCM),又稱微控制器(MicrocontrollerUnit,MCU)或嵌入式控制器(EmbeddedController)。在單片機(jī)誕生時,SCM是一個準(zhǔn)確的稱謂。單片機(jī)是相對于單板機(jī)而言的,是指將CPU、并行I/O接口、定時/計(jì)數(shù)器、RAM、ROM等功能部件集成在一塊芯片上的計(jì)算機(jī)。
單片機(jī)技術(shù)的發(fā)展是與微電子技術(shù)和半導(dǎo)體技術(shù)的發(fā)展分不開的,大體分為五個階段。
第一階段(1971—1976年):初級階段。
第二階段(1976—1980年):低性能階段。
第三階段(1980—1983年):高性能階段。
第四階段(1983—1990年):16位機(jī)階段。
第五階段(1990年至今):新一代單片機(jī)階段。
1.1.2單片機(jī)的發(fā)展趨勢
1.低功耗
MCS-51系列的8031推出時的功耗達(dá)630mW,而目前的單片機(jī)隨著制造工藝、工作頻率、工作電壓等方面的改變,其功耗越來越低。NMOS工藝單片機(jī)逐漸被CMOS工藝單片機(jī)所代替,功耗得以大幅度下降。
2.多功能、微型化
目前的單片機(jī)功能強(qiáng)大,而且體積小、重量輕。常規(guī)的單片機(jī)普遍都是將中央處理器(CPU)、隨機(jī)存取數(shù)據(jù)存儲器(RAM)、只讀程序存儲器(ROM)、并行和串行通信接口、中斷系統(tǒng)、定時電路、時鐘電路集成在一塊單一的芯片上;增強(qiáng)型的單片機(jī)集成了如A/D轉(zhuǎn)換器、PMW(脈寬調(diào)制電路)、WDT(看門狗)等功能模塊。
3.高速度
微處理器(MicroProcessorUnit,MPU)發(fā)展中表現(xiàn)出來的速度越來越快是以時鐘頻率越來越高為標(biāo)志的,而單片機(jī)則有所不同。為提高單片機(jī)抗干擾能力,降低噪聲、降低時鐘頻率而不犧牲運(yùn)算速度是單片機(jī)技術(shù)發(fā)展之追求。
4.多品種
現(xiàn)在,雖然單片機(jī)的品種繁多,各具特色,但仍以8051為核心的單片機(jī)占主流,兼容其結(jié)構(gòu)和指令系統(tǒng)的有Philips公司的產(chǎn)品、Atmel公司的產(chǎn)品和中國臺灣的Winbond系列單片機(jī)。所以,8051為核心的單片機(jī)占據(jù)了半壁江山。
5.長壽命
這里所說的長壽命,一方面指用單片機(jī)開發(fā)的產(chǎn)品可以穩(wěn)定可靠地工作10到20年,另一方面指與微處理器相比,其壽命長。隨著半導(dǎo)體技術(shù)的飛速發(fā)展,MPU更新?lián)Q代的速度越來越快,以386、486、586為代表的MPU在很短的時間內(nèi)就被淘汰出局,而傳統(tǒng)的單片機(jī),如68HC05、8051等面世已超過30年。
6.低噪聲與高可靠性技術(shù)
為提高單片機(jī)系統(tǒng)的抗電磁干擾能力,使產(chǎn)品能適應(yīng)惡劣的工作環(huán)境,滿足電磁兼容性方面更高標(biāo)準(zhǔn)的要求,各單片機(jī)商家在單片機(jī)內(nèi)部電路中采取了一些新的技術(shù)措施。如美國國家半導(dǎo)體公司(NS)的COP8單片機(jī)內(nèi)部增加了抗EMI電路,增強(qiáng)了“看門狗”的性能;Motorola也推出了低噪聲的LN系列單片機(jī)。
7.?OTP與掩膜
OTP(OneTimeProgrammable)是一次性寫入的單片機(jī)。過去認(rèn)為一個單片機(jī)產(chǎn)品的成熟是以投產(chǎn)掩膜型單片機(jī)為標(biāo)志的。由于掩膜需要一定的生產(chǎn)周期,而OTP型單片機(jī)價格不斷下降,使得直接使用OTP完成最終產(chǎn)品制造更為流行。
8.?MTP向OTP挑戰(zhàn)
MTP是可多次編程的意思。一些單片機(jī)廠商以MTP的性能、OTP的價位推出他們的單片機(jī),如Atmel的AVR單片機(jī),片內(nèi)采用Flash存儲器,可多次編程;華邦(Winbond)公司生產(chǎn)的8051兼容的單片機(jī)也采用了MTP性能、OTP的價位。這些單片機(jī)都使用了ISP技術(shù),可先安裝到印刷板、線路板上以后再下載程序。
1.1.3單片機(jī)的應(yīng)用
單片機(jī)有著一般微處理器(MPU)芯片所不具備的功能,它可單獨(dú)地完成現(xiàn)代工業(yè)控制所要求的智能化控制功能;能夠取代以前利用復(fù)雜電子線路或數(shù)字電路構(gòu)成的控制系統(tǒng)。
1.在智能儀表中的應(yīng)用
智能儀表是單片機(jī)應(yīng)用最多最活躍的領(lǐng)域之一。在各類儀器儀表中引入單片機(jī),可使儀器儀表智能化,提高測試的自動化程度和精度,簡化儀器儀表的硬件結(jié)構(gòu),提高其性能價格比。
2.在人工智能方面的應(yīng)用
人工智能是模擬人的感覺與思維的一門學(xué)科,單片機(jī)技術(shù)可以模擬人的視覺、聽覺、觸覺和聯(lián)想、啟發(fā)、推理及思維過程,例如特殊行業(yè)的機(jī)器人、醫(yī)療領(lǐng)域的專家診斷系統(tǒng)等,都是人工智能的應(yīng)用范例。
3.在實(shí)時控制系統(tǒng)中的應(yīng)用
單片機(jī)廣泛用于各種實(shí)時過程控制的系統(tǒng)中,例如工業(yè)過程控制、過程監(jiān)測、航空航天、尖端武器、機(jī)器人系統(tǒng)等各種實(shí)時控制系統(tǒng)。
4.在人們生活中的應(yīng)用
目前,國內(nèi)外各種家電已經(jīng)普遍用單片機(jī)代替?zhèn)鹘y(tǒng)的控制電路,例如洗衣機(jī)、電冰箱、空調(diào)機(jī)、微波爐、電飯煲、收音機(jī)、音響、電風(fēng)扇及許多高級電子玩具都配上了單片機(jī)。
5.在其他方面的應(yīng)用
單片機(jī)還廣泛應(yīng)用于辦公自動化、商業(yè)營銷、安全防衛(wèi)、汽車、通信系統(tǒng)、計(jì)算機(jī)外部設(shè)備、模糊控制等領(lǐng)域。
1.2單片機(jī)應(yīng)用系統(tǒng)及設(shè)計(jì)簡介
1.2.1單片機(jī)應(yīng)用系統(tǒng)及組成單片機(jī)應(yīng)用系統(tǒng)是以單片機(jī)為核心,配以輸入、輸出、顯示、控制等外圍電路和軟件,能實(shí)現(xiàn)一種或多種功能的實(shí)用系統(tǒng)。單片機(jī)應(yīng)用系統(tǒng)由硬件和軟件組成。硬件是應(yīng)用系統(tǒng)的基礎(chǔ);軟件在硬件的基礎(chǔ)上對其資源進(jìn)行合理調(diào)配和使用,從而完成應(yīng)用系統(tǒng)所要求的任務(wù)。二者相互依賴,缺一不可。單片機(jī)應(yīng)用系統(tǒng)的組成如圖1.1所示。
圖1.1單片機(jī)應(yīng)用系統(tǒng)的組成
圖1.1中,硬件包括單片機(jī)最小系統(tǒng)、接口電路及外設(shè)(人機(jī)交互通道、輸入通道、輸出通道、通信及其他電路)等;軟件包括在硬件基礎(chǔ)上實(shí)現(xiàn)各種功能的應(yīng)用程序。單片機(jī)最小系統(tǒng)由單片機(jī)、復(fù)位電路、時鐘電路以及擴(kuò)展的程序、數(shù)據(jù)存儲器等組成。
輸出通道指由單片機(jī)對外部設(shè)備發(fā)出的各種輸出信號所經(jīng)過的途徑。在通道中可對信號進(jìn)行各種處理,如隔離、放大(驅(qū)動)、轉(zhuǎn)換、濾波等。
1.2.2單片機(jī)應(yīng)用系統(tǒng)的開發(fā)
一個單片機(jī)應(yīng)用系統(tǒng)從提出任務(wù)到正式投入運(yùn)行的過程,稱為單片機(jī)應(yīng)用系統(tǒng)的開發(fā)。一般開發(fā)可按以下步驟進(jìn)行:需求分析,可行性分析,系統(tǒng)總體方案設(shè)計(jì),單元硬件/軟件設(shè)計(jì)及調(diào)試,系統(tǒng)調(diào)試及修改,完成產(chǎn)品。
1)需求分析。
(2)可行性分析。
(3)系統(tǒng)總體方案設(shè)計(jì)。
(4)單元硬件/軟件設(shè)計(jì)及調(diào)試。
(5)系統(tǒng)調(diào)試及修改。
(6)完成產(chǎn)品。
1.2.3單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)原則
1.可靠性高
高可靠性是單片機(jī)系統(tǒng)應(yīng)用的前提,在系統(tǒng)設(shè)計(jì)的每一個環(huán)節(jié),都應(yīng)該將可靠性作為首要的設(shè)計(jì)準(zhǔn)則。提高系統(tǒng)的可靠性通常從以下幾個方面考慮:
(1)使用可靠性高的元器件、典型的電路和成熟的技術(shù);
(2)采用冗余技術(shù);
(3)設(shè)計(jì)電路板時布線和接地要合理,嚴(yán)格按要求安裝硬件設(shè)備及電路;
(4)對供電電源采用抗干擾措施;
(5)輸入/輸出通道采用抗干擾措施;
(6)進(jìn)行軟、硬件濾波;
(7)使系統(tǒng)具有自診斷功能。
2.操作維護(hù)方便
在進(jìn)行系統(tǒng)的軟/硬件設(shè)計(jì)時,應(yīng)從使用者的角度考慮,盡可能地方便用戶操作和維護(hù),盡量減少對操作人員專業(yè)知識的要求,以利于系統(tǒng)的推廣。因此,在設(shè)計(jì)時,要盡可能減少人機(jī)交互接口,多采用操作內(nèi)置或簡化的方法。
3.性價比高
單片機(jī)除體積小、功耗低等特點(diǎn)外,最大的優(yōu)勢在于高性能價格比。一個單片機(jī)應(yīng)用系統(tǒng)能否被廣泛使用,性價比是其中一個關(guān)鍵因素。
4.設(shè)計(jì)周期短
只有縮短設(shè)計(jì)周期,才能有效地降低設(shè)計(jì)費(fèi)用,充分發(fā)揮新系統(tǒng)的技術(shù)優(yōu)勢和時效性,及早占領(lǐng)市場并具備一定的競爭力。
1.3單片機(jī)的學(xué)習(xí)方法
單片機(jī)是一門實(shí)踐性很強(qiáng)的實(shí)用技術(shù),實(shí)際應(yīng)用時會涉及許多有關(guān)的知識(數(shù)電、模電、傳感器、控制、通信等知識),所以要求在學(xué)習(xí)過程中不但要掌握書中的內(nèi)容,還要通過各種實(shí)踐對單片機(jī)的內(nèi)容及有關(guān)其他課程的知識進(jìn)一步加強(qiáng)、鞏固和融合,為今后單片機(jī)應(yīng)用系統(tǒng)的分析和開發(fā)打好堅(jiān)實(shí)的基礎(chǔ)。
在學(xué)習(xí)的各個階段應(yīng)注意以下幾點(diǎn):
(1)起步階段,主要是學(xué)習(xí)單片機(jī)的初期(第1章和第2章)。學(xué)習(xí)的內(nèi)容及要求主要是:了解單片機(jī)的情況,特別是目前和今后的發(fā)展情況;掌握單片機(jī)的結(jié)構(gòu)、基本性能及其工作原理;熟悉單片機(jī)的內(nèi)部資源的構(gòu)成、功能和工作原理。
(2)了解階段,主要是通過學(xué)習(xí)對單片機(jī)有一個較完整的了解(第3、4、5章)。學(xué)習(xí)的內(nèi)容及要求主要是:掌握單片機(jī)各個功能塊的組成、性能和作用;掌握單片機(jī)指令系統(tǒng)、指令的功能和編程方法,熟悉常用的基本指令;掌握常用系統(tǒng)擴(kuò)展的基本方法和技術(shù),熟悉常用擴(kuò)展芯片的結(jié)構(gòu)、工作原理和功能。
(3)入門階段,主要是通過對單片機(jī)的深入學(xué)習(xí),對單片機(jī)應(yīng)用系統(tǒng)建立一個初步的了解,具備初步的設(shè)計(jì)能力(第6、7章)。學(xué)習(xí)的內(nèi)容及要求主要是:掌握單片機(jī)應(yīng)用系統(tǒng)的構(gòu)成;熟悉軟、硬件設(shè)計(jì)的一般原則和方法。
習(xí)題1
1.什么是微型計(jì)算機(jī)及系統(tǒng)?它是由哪幾部分組成的?2.什么是單片機(jī)?它由哪幾部分組成?什么是單片機(jī)應(yīng)用系統(tǒng)?單片機(jī)和單片機(jī)應(yīng)用系統(tǒng)之間是什么關(guān)系?3.說明微型計(jì)算機(jī)及系統(tǒng)與單片機(jī)及應(yīng)用系統(tǒng)各自的特點(diǎn),并說明二者的區(qū)別。4.除了附錄?Ⅲ?的網(wǎng)站,你能否再找到與單片機(jī)有關(guān)的其他網(wǎng)站?
5.到目前為止,你見過哪幾個公司的哪些型號的單片機(jī)?請羅列其中幾種,并說明其特點(diǎn)。
6.除了書中羅列的單片機(jī)應(yīng)用領(lǐng)域外,請你再舉幾個應(yīng)用單片機(jī)的例子。
7.請你舉出在你身邊都有哪些家電、設(shè)備中使用了單片機(jī)。
8.請列舉到目前為止你知道的具有中國自主知識產(chǎn)權(quán)的單片機(jī),其特點(diǎn)是什么?
9.第一款單片機(jī)是哪個國家的哪個公司制造的?型號是什么?
10.請瀏覽本書的目錄,回答該課程的主要內(nèi)容是什么。你認(rèn)為單片機(jī)的學(xué)習(xí)和哪些已經(jīng)學(xué)習(xí)過的課程或者知識有關(guān)?
11.你現(xiàn)在已有的單片機(jī)編程軟件是什么?
12.你知道什么是電路板嗎?你會手工制作電路板嗎?如果不知道請查閱資料,找到有關(guān)這方面的資料,了解這方面的情況,掌握制作的過程和方法。
13.你去過電子市場嗎?買過電子器件(電阻、電容、晶振、發(fā)光二極管等)嗎?如果沒有,請選擇兩個以上的電子市場,購買一些與單片機(jī)有關(guān)的電子元器件。請舉例說出你已去過的電子市場及買過的有關(guān)元器件(寫下名稱、型號、功能及性能等)。
14.你過去使用過示波器、信號發(fā)生器、直流電源等設(shè)備嗎?使用過萬用表、烙鐵等工具嗎?如果使用過,你對它們的功能、性能、結(jié)構(gòu)等了解程度如何?請舉幾個實(shí)例說明你基本掌握了它們的功能、性能、結(jié)構(gòu)等知識,并能熟練地使用。
15.單片機(jī)技術(shù)發(fā)展很快,查閱有關(guān)資料,說明目前單片機(jī)都有哪些更新的功能和更高的性能指標(biāo)。
16.為了學(xué)習(xí)單片機(jī)原理,你目前有幾本參考書?其中有無原版的單片機(jī)手冊(廠家提供的)?
17.單片機(jī)和其他計(jì)算機(jī)一樣,其工作時內(nèi)部進(jìn)行著大量的二進(jìn)制數(shù)據(jù)的處理。二進(jìn)制是最簡單的數(shù)據(jù)形式,但是通過單片機(jī)處理過后,其結(jié)果變化無窮,你能說明這是為什么嗎?
18.如果同樣的產(chǎn)品既可以用單片機(jī)設(shè)計(jì)、制作,同時也可以用傳統(tǒng)的電子器件設(shè)計(jì)、制作,你想用什么來設(shè)計(jì)呢?說出自己的看法。第2章單片機(jī)基礎(chǔ)知識2.1MCS-51系列單片機(jī)的基本結(jié)構(gòu)2.2中央處理器(CPU)2.3存儲器及存儲空間2.4并行I/O口及其結(jié)構(gòu)2.5時鐘電路與CPU時序2.6單片機(jī)的工作方式習(xí)題2
2.1MCS-51系列單片機(jī)的基本結(jié)構(gòu)
2.1.1MCS-51單片機(jī)系列MCS-51系列單片機(jī)分為51子系列和52子系列。51子系列為基本型,主要有8031、8051、8751三種類型;52子系列為增強(qiáng)型,主要有8032、8052、8752三種類型。這兩大系列單片機(jī)的主要硬件配置如表2.1所示。
AT89系列單片機(jī)分為低檔型、標(biāo)準(zhǔn)型和高檔型三種。各種不同型號的單片機(jī),其主要差別在于片內(nèi)的Flash程序存儲器的容量大小、片內(nèi)數(shù)據(jù)存儲器的容量大小、并行I/O端口線以及中斷源個數(shù)不同。其常用產(chǎn)品特性如表2.2所示。
其中,“AT”是前綴,“89CXXXX”是型號,型號之后的“XXXX”是后綴。各部分含義如下所示。
(1)前綴:“AT”表示該器件是Atmel公司的產(chǎn)品。
(2)型號:可能是“89C2051”、“89LV51”、“89S52”等。
(3)后綴:由“XXXX”四個參數(shù)組成,每個參數(shù)所表示的意義不同。
2.1.2MCS-51系列單片機(jī)內(nèi)部結(jié)構(gòu)及功能部件
1.MCS-51系列單片機(jī)內(nèi)部結(jié)構(gòu)
MCS-51系列單片機(jī)內(nèi)部由中央處理器(CPU)、存儲器、輸入/輸出端口、定時/計(jì)數(shù)器、中斷系統(tǒng)以及系統(tǒng)總線等構(gòu)成,通過系統(tǒng)總線把各個部分連接起來。AT89系列單片機(jī)和MCS-51系列單片機(jī)的內(nèi)部結(jié)構(gòu)類似,AT89S51的內(nèi)部結(jié)構(gòu)框圖如圖2.1所示。圖2.1AT89S51內(nèi)部結(jié)構(gòu)框圖
2.MCS-51系列單片機(jī)功能部件
1)中央處理器(CPU)
CPU是單片機(jī)的核心部件,是一個8位二進(jìn)制數(shù)的中央處理單元,主要負(fù)責(zé)控制、指揮和調(diào)度整個單片機(jī)系統(tǒng)協(xié)調(diào)工作,完成運(yùn)算功能并控制輸入/輸出等操作。
2)程序存儲器(ROM)
程序存儲器主要用于存放用戶程序、原始數(shù)據(jù)或表格等。
3)數(shù)據(jù)存儲器(RAM)
數(shù)據(jù)存儲器主要用于存放運(yùn)算的中間結(jié)果,進(jìn)行數(shù)據(jù)暫存及數(shù)據(jù)緩沖等。
4)定時/計(jì)數(shù)器
MCS-51系列單片機(jī)有兩個16位可編程定時/計(jì)數(shù)器,通過編程可作為定時器或計(jì)數(shù)器使用,并有四種不同的工作模式。
5)并行輸入/輸出(I/O)接口
單片機(jī)對外部電路進(jìn)行控制或交換信息是通過輸入/輸出(I/O)接口完成的,MCS-51系列單片機(jī)有四組8位的并行輸入/輸出(I/O)接口,分別為P0口、P1口、P2口和P3口,它們都是8位準(zhǔn)雙向口,每次可以并行輸入或輸出8位二進(jìn)制信息,也可以按位進(jìn)行輸入或輸出信息操作。
6)全雙工串行接口
MCS-51系列單片機(jī)有一個全雙工串行通信接口,用于與外部設(shè)備進(jìn)行串行信息傳送。該串行口可編程,有四種不同的工作模式,既可以作為異步通信收發(fā)器以與其他外部設(shè)備完成信息交換,也可以作為同步移位寄存器來擴(kuò)展I/O接口電路。
7)中斷系統(tǒng)
中斷是指CPU暫停正在執(zhí)行的程序轉(zhuǎn)而處理中斷服務(wù)程序,在執(zhí)行完中斷服務(wù)程序之后再回到原來正在執(zhí)行的程序繼續(xù)執(zhí)行。
8)時鐘電路
單片機(jī)各部件之間有條不紊地協(xié)調(diào)工作,其控制信號是在一種基本節(jié)拍的指揮下按一定的時間順序發(fā)出的,這些控制信號在時間上的相互關(guān)系就是CPU時序。而產(chǎn)生這種時序的電路就是振蕩器和時鐘電路。
9)內(nèi)部總線
總線是用于傳送信息的公共途徑。根據(jù)總線上傳送的信息的不同,MCS-51系列單片機(jī)的內(nèi)部總線可分為數(shù)據(jù)總線、地址總線和控制總線。
2.1.3單片機(jī)外部引腳說明
使用HMOS制造工藝的MCS-51系列單片機(jī)大部分采用40引腳雙列直插式封裝(DIP)。CHMOS制造工藝的單片機(jī)有兩種封裝形式:雙列直插式和方形PLCC封裝,MCS-51系列單片機(jī)引腳圖如圖2.2所示。
圖2.2MCS-51系列單片機(jī)引腳圖
1.主電源線
VCC(40引腳):接+5V電源正端,正常操作和對EPROM編程及驗(yàn)證時均接+5V電源。
GND(20引腳):接電源地端。
2.外接晶體線
XTAL1(19引腳):接外部晶體振蕩器的一端。
3.I/O端口線
MCS-51系列單片機(jī)共有四組并行I/O端口P0~P3,每個端口都有8條端口線,共有32條I/O端口線,每個接口的功能和用途有一定的差別。
(1)?P0口(32~39引腳):P0.0~P0.7統(tǒng)稱為P0口,是一個8位漏極開路型雙向I/O端口,其中P0.7為最高位。
(2)?P1口(1~8引腳):P1.0~P1.7統(tǒng)稱為P1口,是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向口,P1.7為最高位。
(3)?P2口(21~28引腳):P2.0~P2.7統(tǒng)稱為P2口,也是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向口,P2.7為最高位。
(4)?P3口(10~17引腳):P3.0~P3.7統(tǒng)稱為P3口,也是一個帶內(nèi)部上拉電阻的8位準(zhǔn)雙向口,P3.7為最高位。
4.控制線
RST/VPD(9引腳):單片機(jī)復(fù)位/備用電源引腳。該引腳為單片機(jī)的上電復(fù)位或掉電保護(hù)端,該引腳上出現(xiàn)持續(xù)兩個機(jī)器周期的高電平就可實(shí)現(xiàn)復(fù)位操作,使單片機(jī)恢復(fù)到初始狀態(tài)。
MCS-51系列單片機(jī)功能多但引腳少。許多引腳具有雙重功能。這種雙重功能的設(shè)置為單片機(jī)系統(tǒng)擴(kuò)展奠定了基礎(chǔ)。MCS-51系列單片機(jī)對外呈現(xiàn)三總線的形式,由P0口分時復(fù)用為8位數(shù)據(jù)總線,P0、P2構(gòu)成16位地址總線,由ALE、RST、、、
(P3.6)、(P3.7)等信號組成控制總線,MCS-51系列單片機(jī)總線結(jié)構(gòu)框圖如圖2.3所示。
圖2.3MCS-51系列單片機(jī)總線結(jié)構(gòu)框圖
2.2中央處理器(CPU)
2.2.1運(yùn)算器運(yùn)算器以算術(shù)邏輯單元(ALU)為核心,包括布爾處理器、累加器(ACC)、寄存器B、暫存器(TMP1、TMP2)、程序狀態(tài)字寄存器(PSW)等部件(見圖2.1),用來完成數(shù)據(jù)的算術(shù)邏輯運(yùn)算、位變量處理和數(shù)據(jù)傳輸操作。
1.算術(shù)邏輯單元
ALU是由加法器和其他邏輯電路等組成的,是運(yùn)算器的核心部件,可對數(shù)據(jù)進(jìn)行算術(shù)四則運(yùn)算和邏輯運(yùn)算、移位操作、位操作等。
2.累加器
ACC是一個8位寄存器,簡稱A,用來存放參與算術(shù)運(yùn)算和邏輯運(yùn)算的一個操作數(shù)或運(yùn)算結(jié)果,是CPU執(zhí)行指令時使用最頻繁的寄存器。
3.寄存器B
寄存器B是一個8位寄存器,是為ALU進(jìn)行乘、除法運(yùn)算而設(shè)置的。
4.暫存器
TMP1、TMP2用于為ALU暫存兩個8位的二進(jìn)制操作數(shù),對用戶不開放。
5.程序狀態(tài)字寄存器
PSW是一個8位標(biāo)志寄存器,用來存放程序運(yùn)行中的各種狀態(tài)信息,以供程序查詢和判斷。PSW中各位的狀態(tài)通常是在操作過程中自動形成的,也可以由用戶根據(jù)需要按位進(jìn)行操作。其各位的定義如下(PSW字節(jié)地址為D0H):
其各位的定義如下(PSW字節(jié)地址為D0H):
RS1、RS0狀態(tài)與工作寄存器組的對應(yīng)關(guān)系如表2.4所示。
6.布爾處理器(位處理器)
布爾處理器是MCS-51單片機(jī)ALU具有的一種功能。單片機(jī)指令系統(tǒng)中的17條位處理指令、存儲器中的位地址空間以及借用程序狀態(tài)寄存器中的進(jìn)位標(biāo)志位Cy作為位操作累加器,構(gòu)成了單片機(jī)的布爾處理器。它可對直接尋址的位變量進(jìn)行位處理,如置位、清零、取反以及邏輯與、或等操作,并可以方便地設(shè)置標(biāo)志等。
2.2.2控制器
控制器是對來自存儲器中的指令進(jìn)行譯碼,通過定時控制電路,在規(guī)定的時刻發(fā)出各種操作所需的全部內(nèi)部和外部的控制信號,使各部分協(xié)調(diào)工作,完成指令所規(guī)定的功能的器件。控制器主要由程序計(jì)數(shù)器(PC)、指令寄存器(IR)、指令譯碼器(ID)和定時控制邏輯電路等組成。
1.程序計(jì)數(shù)器
PC是一個16位的、具有自動加1功能的寄存器,用來存放下一條將要執(zhí)行指令的ROM地址值。
2.指令寄存器
IR是一個8位的寄存器,用于存放CPU根據(jù)PC地址從ROM中讀出的指令操作碼,等待譯碼。
3.指令譯碼器
ID用于對指令寄存器中的指令進(jìn)行譯碼,將指令轉(zhuǎn)變?yōu)閳?zhí)行此指令所需要的電信號。
4.定時控制邏輯電路
定時部件用于產(chǎn)生脈沖序列和多種節(jié)拍脈沖;控制邏輯根據(jù)指令譯碼器產(chǎn)生的操作信號,按一定時間順序發(fā)出一系列節(jié)拍脈沖控制信號來完成指令所規(guī)定的全部操作。
2.2.3專用寄存器組
專用寄存器也稱為特殊功能寄存器(SFR),主要用來指示當(dāng)前要執(zhí)行指令的內(nèi)存地址,存放特定的操作數(shù),指示指令的運(yùn)行狀態(tài)等。MCS-51系列單片機(jī)共有21個特殊功能寄存器,離散地分布在片內(nèi)RAM的高128B地址中。前面介紹的A、B、PSW等都是特殊功能寄存器,但程序計(jì)數(shù)器不是特殊功能寄存器,不可訪問。
2.3存儲器及存儲空間
2.3.1存儲器空間MCS-51單片機(jī)的存儲器結(jié)構(gòu)框圖如圖2.4所示。
圖2.4MCS-51單片機(jī)存儲器結(jié)構(gòu)框圖
在物理結(jié)構(gòu)上,MCS-51系列單片機(jī)有四個存儲空間,分別為
(1)片內(nèi)程序存儲器。
(2)片外程序存儲器。
(3)片內(nèi)數(shù)據(jù)存儲器。
(4)片外數(shù)據(jù)存儲器(包括I/O地址空間)。
從用戶使用角度,即從邏輯上看,MCS-51系列單片機(jī)有三個存儲空間,分別為
(1)片內(nèi)、外統(tǒng)一編址的64KB程序存儲器(0000H~0FFFFH)。
(2)片內(nèi)數(shù)據(jù)存儲器(包含128B的SFR空間80H~0FFH)。
(3)?64KB的片外數(shù)據(jù)存儲器(包括I/O地址空間)。
2.3.2程序存儲器
程序存儲器一般用于存放程序、表格和常數(shù)。MCS-51單片機(jī)的程序存儲器空間最大為64KB(0000H~0FFFFH),其地址指針為16位的程序計(jì)數(shù)器PC,程序存儲器的地址是連續(xù)、統(tǒng)一的。
2.程序存儲器中的特殊單元
MCS-51單片機(jī)的程序存儲器中有一些特殊的存儲單元,這些存儲單元具有固定的用途,在使用中應(yīng)加以注意。這些存儲單元分別為
?0000H:單片機(jī)上電或復(fù)位后PC的值,即程序必須從該地址開始執(zhí)行。
?0003H:外部中斷0入口地址。
?000BH:定時/計(jì)數(shù)器0溢出中斷入口地址。
?0013H:外部中斷1入口地址。
?001BH:定時/計(jì)數(shù)器1溢出中斷入口地址。
?0023H:串行口中斷入口地址。
?002BH:定時/計(jì)數(shù)器2溢出或T2EX(P1.1)端負(fù)跳變時的入口地址(僅52子系列有)。
2.3.3內(nèi)部數(shù)據(jù)存儲器
數(shù)據(jù)存儲器用于存放運(yùn)算中間結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)志位等。MCS-51單片機(jī)片內(nèi)數(shù)據(jù)存儲器在物理上可分為兩個不同的區(qū),即為片內(nèi)RAM區(qū)和特殊功能寄存器區(qū)(SFR)。
1.片內(nèi)RAM
片內(nèi)RAM區(qū)從功能用途上又可分為三個不同的區(qū)域:工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū),如表2.5所示。
1)工作寄存器區(qū)
片內(nèi)RAM的00H~1FH區(qū)域設(shè)置為工作寄存器區(qū),該區(qū)域共有32個存儲單元,均勻地劃分為4組,每組由8個工作寄存器R0~R7構(gòu)成。工作寄存器組和RAM地址的對應(yīng)關(guān)系如表2.6所示。
2)位尋址區(qū)
片內(nèi)RAM的20H~2FH的16個字節(jié)為位尋址區(qū)。這16個地址單元共有128位,每一位都有一個位地址,即為00H~7FH,每一位可以視為一個軟件觸發(fā)器,由程序直接進(jìn)行位處理,通常用于存放各種程序的運(yùn)行標(biāo)志、位變量的狀態(tài)等。字節(jié)地址與位地址之間的關(guān)系如表2.7所示。
3)通用RAM區(qū)
片內(nèi)RAM的30H~7FH為通用RAM區(qū),用做堆棧或數(shù)據(jù)緩沖,只能按字節(jié)存取。在單片機(jī)的實(shí)際應(yīng)用中,往往需要有一個連續(xù)的先進(jìn)后出的RAM緩沖區(qū),用于保護(hù)臨時數(shù)據(jù),這種以先進(jìn)后出原則存取數(shù)據(jù)的RAM緩沖區(qū)稱為堆棧。
向堆棧中存放(壓入)數(shù)據(jù)稱為入棧,從堆棧中取出(彈出)數(shù)據(jù)稱為出棧,堆棧只有這兩種操作。不論數(shù)據(jù)是入棧還是出棧,都是對棧頂?shù)膯卧M(jìn)行操作,堆棧是向上生成的。
2.特殊功能寄存器(SFR)
所謂特殊功能寄存器,是區(qū)別于通用寄存器的寄存器。特殊功能寄存器的功能和用途有專門的規(guī)定,主要包括用于對片內(nèi)各功能模塊進(jìn)行管理、控制、監(jiān)視的控制寄存器和狀態(tài)寄存器。
MCS-51子系列單片機(jī)共有21個SFR,其名稱和字節(jié)地址如表2.8所示。
52子系列中除了具有51子系列所有的21個SFR之外,還增加了5個,如表2.9所示。
AT89S51單片機(jī)除了具有51子系列的21個特殊功能寄存器以外,還增加了5個特殊功能寄存器,分別為AUXR、WDTRST、AUXR1、DP1L和DP1H。
(1)?AUXR輔助寄存器字節(jié)地址為8EH,其各位的定義如下:
(2)?AUXR1輔助寄存器用來選擇雙數(shù)據(jù)指針寄存器,其字節(jié)地址為A2H,各位定義如下:
(3)看門狗復(fù)位寄存器WDTRST的字節(jié)地址為A6H,該寄存器為只寫寄存器。當(dāng)要打開WDT時,用戶必須按順序給該寄存器寫入1EH和0E1H。
(4)?DP1L和DP1H為16位數(shù)據(jù)指針寄存器DPTR1的低字節(jié)和高字節(jié)。
2.3.4外部數(shù)據(jù)存儲器
MCS-51單片機(jī)可通過外部擴(kuò)展電路將RAM芯片和CPU相接,片外最大可以擴(kuò)展64KB的數(shù)據(jù)存儲器。對片外RAM進(jìn)行讀、寫時,由P0、P2口提供地址信號,只能采用寄存器間接尋址方式。間接尋址寄存器可使用的寄存器有通用寄存器R0、R1以及數(shù)據(jù)指針寄存器DPTR,當(dāng)R0或R1作為間接尋址寄存器時,P0將R0或R1的內(nèi)容(8位)作為地址輸出,因此最大尋址空間為256B,地址范圍為00H~0FFH,與片內(nèi)RAM地址重疊,但由于訪問片內(nèi)和片外數(shù)據(jù)存儲器采用的尋址方式和指令不同,因此不會引起混亂。
MCS-51單片機(jī)對片外RAM和擴(kuò)展的I/O端口進(jìn)行統(tǒng)一編址,即外部擴(kuò)展的任何I/O接口和外圍設(shè)備地址均占用片外RAM的地址,因此使用時要合理安排地址范圍。CPU對片外RAM和I/O端口操作使用相同的訪問指令和控制線。有關(guān)外部數(shù)據(jù)存儲器和I/O端口的擴(kuò)展請參閱本書第5章。
2.4并行I/O口及其結(jié)構(gòu)2.4.1P0口的結(jié)構(gòu)與功能1.P0口的結(jié)構(gòu)P0口是一個三態(tài)雙向口,在系統(tǒng)擴(kuò)展時,作為低8位地址線和數(shù)據(jù)總線的分時復(fù)用口;在其他狀態(tài)下可作為通用I/O接口。P0口一位的結(jié)構(gòu)框圖如圖2.5所示,它由一個輸出鎖存器、兩個三態(tài)輸入緩沖器、一個輸出驅(qū)動電路和一個輸出控制電路組成。輸出驅(qū)動電路由一對FET(場效應(yīng)管)VT1和VT2組成,其工作狀態(tài)受輸出控制電路的控制;輸出控制電路由一個與門電路、一個反相器和一個多路開關(guān)MUX組成。
圖2.5P0口一位的結(jié)構(gòu)框圖
2.P0口的功能
1)?P0口作為一般I/O口使用時
圖2.5中的多路開關(guān)MUX的位置由CPU發(fā)出的控制信號決定。當(dāng)MCS-51片外無擴(kuò)展存儲器系統(tǒng)時,P0口作為通用I/O口使用,此時CPU內(nèi)部發(fā)出控制電平“0”封鎖與門,使輸出上拉場效應(yīng)管VT1截止,同時多路開關(guān)把輸出鎖存器端與輸出場效應(yīng)管VT2的柵極接通。此時P0即作為一般的I/O口使用。
2)?P0口作為地址/數(shù)據(jù)總線使用時
當(dāng)MCS-51片外擴(kuò)展有RAM、I/O接口、ROM時,P0端口作為地址/數(shù)據(jù)總線使用,此時可分為兩種情況。一種是以P0口引腳輸出地址/數(shù)據(jù)信息,這時CPU內(nèi)部發(fā)出高電平的控制信號,打開與門,同時使多路開關(guān)MUX把CPU內(nèi)部地址/數(shù)據(jù)總線反相后與輸出驅(qū)動場效應(yīng)管VT2的柵極接通。
2.4.2P1口的結(jié)構(gòu)與功能
P1口是一個準(zhǔn)雙向口,用作通用I/O口,P1口一位的結(jié)構(gòu)框圖如圖2.6所示。Pl口通常作為通用I/O口使用,所以在電路結(jié)構(gòu)上與P0口有一些不同。首先它不再需要多路轉(zhuǎn)換開關(guān)MUX和控制電路部分;其次是輸出驅(qū)動電路部分只有一個FET,同時內(nèi)部有上拉電阻,此電阻直接與電源相連。當(dāng)Pl口作為輸出口使用時,能向外部提供拉電流負(fù)載,無需再外接上拉電阻。
圖2.6P1口一位的結(jié)構(gòu)框圖
2.4.3P2口的結(jié)構(gòu)與功能
P2口也是一個準(zhǔn)雙向I/O口,P2口一位的結(jié)構(gòu)框圖如圖2.7所示。P2口的電路結(jié)構(gòu)與P1口類似,驅(qū)動部分與P1口相同,但P2口具有通用I/O接口或高8位地址總線輸出兩種功能,因此其輸出驅(qū)動結(jié)構(gòu)相比P1口多了一個輸出轉(zhuǎn)換開關(guān)MUX和反相器。
圖2.7P2口一位的結(jié)構(gòu)框圖
2.4.4P3口的結(jié)構(gòu)與功能
P3口也是一個準(zhǔn)雙向I/O口,P3口一位的結(jié)構(gòu)框圖如圖2.8所示。由圖可知,P3口每一位的輸出驅(qū)動由與非門、場效應(yīng)管組成,比P0、P1、P2多了一個緩沖器。除了作為通用的I/O端口外,P3口的每一位均具有第二功能。
圖2.8P3口一位的結(jié)構(gòu)框圖
2.4.5I/O口的應(yīng)用特性
1.使用原則
MCS-51單片機(jī)中的四個I/O接口在實(shí)際使用中一般遵循以下用法:P0口一般作為系統(tǒng)擴(kuò)展地址低8位/數(shù)據(jù)口分時復(fù)用;P1口一般作為I/O口使用;P2口作為系統(tǒng)擴(kuò)展地址高8位和I/O接口擴(kuò)展用的地址譯碼器的輸入;P3口作為中斷輸入、串行口、定時/計(jì)數(shù)以及讀/寫控制信號使用。
2.端口負(fù)載能力和接口要求
P0口的輸出級與P1~P3口的輸出級在結(jié)構(gòu)上不相同,因此它們的帶負(fù)載能力和接口要求也各不相同。
(1)?P0口的每一位可驅(qū)動8個LSTTL輸入,當(dāng)作通用I/O口使用時,輸出級是漏極開路電路,故需外接上拉電阻才能有高電平輸出;當(dāng)作地址/數(shù)據(jù)總線用時,不需要外接上拉電阻,此時不能作通用的I/O口使用。
(2)?P1~P3口的輸出級都接有內(nèi)部上拉電阻,它們的每一位可以驅(qū)動4個LSTTL負(fù)載。
(3)?P0~P3口都是準(zhǔn)雙向口,作輸入時,必須先向相應(yīng)的端口鎖存器寫入1。當(dāng)系統(tǒng)復(fù)位時,P0~P3口鎖存器全為1。
2.5時鐘電路與CPU時序
單片機(jī)內(nèi)各種操作都是按著節(jié)拍有序地進(jìn)行的,控制各部件協(xié)調(diào)工作的控制信號也是在一種基本節(jié)拍的指揮下按一定的順序發(fā)出的。產(chǎn)生這種基本節(jié)拍的電路就是振蕩器和時鐘電路。控制信號在時間上的相互關(guān)系稱為CPU時序。
2.5.1時鐘電路
AT89S51單片機(jī)內(nèi)部有一個高增益反相放大器,引腳XTAL1、XTAL2分別為該反相放大器的輸入和輸出端。該反相放大器外接定時反饋元件組成振蕩器或通過外接時鐘源的方法,產(chǎn)生時鐘送至單片機(jī)內(nèi)部的各部件。時鐘頻率越高,單片機(jī)控制器的控制節(jié)拍越快,運(yùn)算速度就越快。根據(jù)硬件電路的不同,單片機(jī)的時鐘電路可分為內(nèi)部時鐘和外部時鐘兩種方式。
1.內(nèi)部時鐘方式
AT89S51單片機(jī)內(nèi)部振蕩電路如圖2.9所示,但要形成時鐘還必須外接晶體或陶瓷諧振器(簡稱晶振),外接電路如圖2.10所示。
圖2.9AT89S51單片機(jī)內(nèi)部振蕩電路
圖2.10內(nèi)部時鐘方式的外接電路
2.外部時鐘方式
MCS-51單片機(jī)的內(nèi)部工作時鐘也可以由外部振蕩器產(chǎn)生,對于HMOS型和CHMOS型MCS-51單片機(jī),它們的時鐘電路接法稍有不同,其電路連接方式如圖2.11所示。圖2.11外部時鐘連接方式
2.5.2CPU時序
單片機(jī)中一條指令的執(zhí)行可以分解為若干個基本的微操作,這些微操作是在單片機(jī)提供的時鐘脈沖信號作用下,嚴(yán)格按時間的先后次序執(zhí)行的,這些次序就是CPU的時序。
1.振蕩周期
振蕩周期是由單片機(jī)片內(nèi)或片外振蕩器所產(chǎn)生的,為單片機(jī)提供時鐘源信號的周期,其值為1/fosc。
2.時鐘周期
時鐘周期又稱為狀態(tài)周期S,由內(nèi)部時鐘電路產(chǎn)生,兩個振蕩周期為一個時鐘周期。
3.機(jī)器周期
機(jī)器周期是完成一個規(guī)定操作所需的時間,是單片機(jī)執(zhí)行一種基本操作的時間單位。
4.指令周期
執(zhí)行一條指令所占用的時間稱為指令周期,一個指令周期通常由1~4個機(jī)器周期組成,依據(jù)指令的不同而不同。指令的執(zhí)行速度和它所占用的機(jī)器周期數(shù)直接相關(guān),占用的機(jī)器周期數(shù)少則執(zhí)行速度快。
四種時序單位中,振蕩周期和機(jī)器周期是單片機(jī)內(nèi)計(jì)算其他時間值的基本時序單位。下面以單片機(jī)外接晶振頻率為12MHz為例,說明各種時序單位之間的關(guān)系。
5.CPU取指令、執(zhí)行指令時序
每一條指令的執(zhí)行都包括取指令和執(zhí)行指令兩個階段。在取指令階段,CPU從程序存儲器中取出指令操作碼和操作數(shù),在指令執(zhí)行階段執(zhí)行這條指令。MCS-51單片機(jī)指令系統(tǒng)中,指令字節(jié)長度為1~3個字節(jié),按指令字節(jié)數(shù)和執(zhí)行所需時間不同,可將指令分為單字節(jié)單周期指令、單字節(jié)雙周期指令、單字節(jié)四周期指令、雙字節(jié)單周期指令、雙字節(jié)雙周期指令和三字節(jié)雙周期指令。這些指令在執(zhí)行過程中的時序是不相同的。單周期和雙周期CPU取指/執(zhí)行時序如圖2.12所示。
圖2.12CPU取指/執(zhí)行時序
2.6單片機(jī)的工作方式
2.6.1復(fù)位方式復(fù)位是單片機(jī)的硬件初始化操作。復(fù)位的作用是使中央處理器CPU以及其他功能部件都恢復(fù)到一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。除此之外,當(dāng)單片機(jī)程序運(yùn)行出錯或系統(tǒng)處于死循環(huán)狀態(tài)等情況時,需要對單片機(jī)進(jìn)行復(fù)位以重新啟動機(jī)器。復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,使單片機(jī)從0000H開始執(zhí)行程序,其他特殊功能寄存器的復(fù)位狀態(tài)如表2.10所示。
除了看門狗WDT定時器可使單片機(jī)復(fù)位,MCS-51單片機(jī)的復(fù)位還可以靠外部電路實(shí)現(xiàn),信號由RST引腳輸入,高電平有效。當(dāng)RST引腳上持續(xù)兩個機(jī)器周期以上的高電平時,單片機(jī)即完成復(fù)位。若使用頻率為6MHz的晶振,則復(fù)位信號持續(xù)時間應(yīng)超過4?μs才能完成復(fù)位操作。常用復(fù)位電路有上電復(fù)位和手動復(fù)位(外部復(fù)位)兩種,如圖2.13所示。
圖2.13常用復(fù)位電路
2.6.2程序執(zhí)行方式
程序執(zhí)行方式是單片機(jī)的基本工作方式,即執(zhí)行用戶編寫好的、存放在程序存儲器中的程序。由于單片機(jī)復(fù)位后PC的值為0000H,因此程序執(zhí)行總是從地址0000H開始。但一般程序并不是真正從0000H開始,為此往往在0000H開始的單元中存放一條無條件轉(zhuǎn)移指令,以便跳轉(zhuǎn)到實(shí)際程序的入口去執(zhí)行。
2.6.3單步執(zhí)行方式
單步執(zhí)行方式是通過外來脈沖控制程序的執(zhí)行,每產(chǎn)生一個脈沖即執(zhí)行一條指令。而外來脈沖通常是通過按鍵產(chǎn)生的,因此實(shí)際上單步執(zhí)行就是按一次鍵執(zhí)行一條指令。單步執(zhí)行需要外部電路產(chǎn)生控制脈沖信號,通常可借助單片機(jī)的外部中斷來實(shí)現(xiàn)。假定利用外部中斷1來實(shí)現(xiàn)程序的單步執(zhí)行,則應(yīng)事先做好以下兩項(xiàng)準(zhǔn)備工作。
2.6.4低功耗方式
為了適應(yīng)電源功耗要求低的應(yīng)用場合,CHMOS型的MCS-51單片機(jī)設(shè)置了低功耗工作方式。另外,在掉電保護(hù)情況下,由備用電源為單片機(jī)進(jìn)行低功耗供電,因此掉電保護(hù)方式實(shí)際上也是一種低功耗方式。故低功耗方式有兩種:空閑方式和掉電保護(hù)方式。
空閑方式和掉電保護(hù)方式是由電源控制寄存器PCON的有關(guān)位來控制的。電源控制寄存器是一個8位寄存器,不可位尋址,其格式如下:
?SMOD:串行口波特率系數(shù)控制位。在方式1、2和3時,串行通信的波特率與SMOD有關(guān)。當(dāng)SMOD=1時,通信波特率乘2;當(dāng)SMOD=0時,波特率不變。
?GF1:通用標(biāo)志1。
?GF0:通用標(biāo)志0。
?PD:掉電方式控制位,PD=1時,系統(tǒng)進(jìn)入掉電方式。
?IDL:空閑方式控制位,IDL=1時,系統(tǒng)進(jìn)入空閑方式。
顯然,要想使單片機(jī)進(jìn)入空閑或掉電工作方式,只要執(zhí)行一條能使IDL或PD位為1的指令就可以了。
1.空閑方式
通過編程將電源控制寄存器PCON的IDL位置1,單片機(jī)即進(jìn)入空閑方式。進(jìn)入空閑方式后,振蕩器仍然運(yùn)行,時鐘信號輸出到中斷系統(tǒng)、串行口以及定時/計(jì)數(shù)器模塊,但不向CPU提供時鐘,CPU停止工作。
2.掉電保護(hù)方式
進(jìn)入掉電保護(hù)方式只需使用指令將PCON的PD位置為1即可。進(jìn)入掉電保護(hù)方式,單片機(jī)的一切工作全部停止,只有片內(nèi)RAM和特殊功能寄存器中的內(nèi)容被保存,片內(nèi)其他功能部件都停止工作。
2.6.5掉電保護(hù)方式
單片機(jī)在系統(tǒng)運(yùn)行過程中,如發(fā)生掉電故障,將會丟失RAM和寄存器中程序的數(shù)據(jù),其后果有時是很嚴(yán)重的。為此,MCS-51單片機(jī)設(shè)置有掉電保護(hù)措施,進(jìn)行掉電保護(hù)處理。其具體做法是先將有用的信息轉(zhuǎn)存,再啟用備用電源維持供電。
2.接通備用電源
信息轉(zhuǎn)存后還應(yīng)維持內(nèi)部RAM的供電,才能保護(hù)轉(zhuǎn)存的信息不被破壞。為此,系統(tǒng)應(yīng)設(shè)置備用電源,并能在掉電后立即接通備用電源。備用電源由單片機(jī)的RST/VPD引腳接入。為了在掉電時能及時接通備用電源,系統(tǒng)中還需具有備用電源與Vcc的切換電路,如圖2.14所示。圖2.14備用電源與Vcc的切換電路
2.6.6Flash編程和校驗(yàn)方式
AT89S51單片機(jī)內(nèi)部有4KB的Flash存儲器,允許用戶多次編輯和擦除,用戶可以很方便地進(jìn)行程序和數(shù)據(jù)的修改。AT89S51工作在Flash編程和校驗(yàn)方式下時,主要包括以下幾個過程:讀片內(nèi)簽名字節(jié)、Flash存儲器編程、程序校驗(yàn)、程序加密和芯片擦除。
1.讀片內(nèi)簽名字節(jié)
簽名字節(jié)是生產(chǎn)廠家在生產(chǎn)產(chǎn)品時寫入到存儲器中的信息。
1)?Flash存儲器的并行編程
并行編程即通過傳統(tǒng)的EPROM編程器使用高電壓(+12V)和協(xié)調(diào)的控制信號進(jìn)行編程。AT89S51單片機(jī)的代碼是逐一字節(jié)進(jìn)行編程的。編程前,須按照圖2.15所示的Flash編程硬件邏輯電路圖連接好地址、數(shù)據(jù)和控制信號,編程方法如下:
(1)在地址線上加上要編程單元的地址信號。
(2)在數(shù)據(jù)線上加上要寫入的數(shù)據(jù)字節(jié)。
(3)激活相應(yīng)的控制信號。
(4)將EA/VPP端加上?+12V編程電壓。
(5)每對Flash存儲器寫入一個字節(jié)或每寫入一個程序加密位,加上一個編程脈沖。圖2.15Flash編程硬件邏輯電路圖
2)?Flash存儲器的串行編程
串行編程將RST接至Vcc,通過串行ISP接口進(jìn)行編程,串行接口包含SCK(串行時鐘)線P1.7、MOSI(輸入)線P1.5和MISO(輸出)線P1.6。將RST拉高后,在其他操作前必須發(fā)出編程使能指令,編程前需將芯片擦除。外部時鐘信號需接至XTAL1端或XTAL1和XTAL2接至晶體振蕩器,最高的串行時鐘(SCK)不超過1/6晶體時鐘。
編程方法如下:
(1)上電次序:將電源加在Vcc和GND引腳,RST置為高電平,如果XTAL1和XTAL2接至晶體或XTAL1接上3~33MHz的時鐘頻率,則需等候10ms。
(2)將編程使能指令發(fā)送到MOSI線,編程時鐘接至SCK,此頻率需小于晶體時鐘頻率的1/16。
(3)編程可選字節(jié)模式或頁模式,寫周期是自身定時的,一般不大于0.5ms(5V電壓時)。
(4)可回讀數(shù)據(jù)進(jìn)行校驗(yàn)。
(5)編程結(jié)束應(yīng)將RST置為低電平以結(jié)束操作。
(6)斷電次序:如果需要斷電,若沒有使用晶體振蕩器,則應(yīng)先將XTAL1置為低電平,再將RST置為低電平,關(guān)斷Vcc。
3.程序校驗(yàn)
程序校驗(yàn)是指讀出編程中寫入的程序代碼,并與程序?qū)懭肭暗拇a進(jìn)行比較驗(yàn)證。校驗(yàn)只能在程序沒有被加密的情況下進(jìn)行。
4.程序加密
程序加密是通過軟件對加密位進(jìn)行編程來實(shí)現(xiàn)的。AT89S51有三個加密位,分別為LB1、LB2和LB3。通過對這3位進(jìn)行操作可實(shí)現(xiàn)表2.11所示的功能。
習(xí)題2
1.51子系列單片機(jī)和52子系列單片機(jī)有何區(qū)別?
2.MCS-51系列單片機(jī)由哪幾部分組成?
3.MCS-51系列單片機(jī)控制線有幾根?每一根控制線的作用是什么?
4.中央處理器(CPU)由哪幾部分組成?各組成部分有什么作用?
5.MCS-51系列單片機(jī)片內(nèi)RAM的組成是如何劃分的?各有什么功能?
6.AT89S51單片機(jī)有多少個特殊功能寄存器?它們分布在何地址范圍?
7.DPTR是什么寄存器?它的作用是什么?它是由哪幾個寄存器組成的?
8.簡述程序狀態(tài)寄存器(PSW)各位的含義。單片機(jī)如何確定和改變當(dāng)前的工作寄存器區(qū)?
9.什么是堆棧?堆棧指針寄存器(SP)的作用是什么?在堆棧中存取數(shù)據(jù)時的原則是什么?
10.在MCS-51型單片機(jī)ROM空間中,0003H~002BH有什么用途?用戶應(yīng)怎樣合理安排?
11.詳細(xì)說明P0口、P1口、P2口、P3口的工作原理。
12.當(dāng)單片機(jī)外部擴(kuò)展RAM和ROM時,P0口、P1口、P2口、P3口各起何作用?
13.P0~P3口作為輸入或輸出口時,各有何要求?
14.P3口有哪些第二功能?實(shí)際應(yīng)用中第二功能是怎么分配的?
15.畫出MCS-51型單片機(jī)時鐘電路,并指出石英晶體和電容的取值范圍。
16.什么是機(jī)器周期?機(jī)器周期和振蕩頻率有何關(guān)系?當(dāng)振蕩頻率為6MHz時,機(jī)器周期是多少?
17.MCS-51型單片機(jī)常用的復(fù)位方法有幾種?應(yīng)注意的事項(xiàng)有哪些?畫出電路圖說明其工作原理。
18.看門狗定時器有什么功能?怎樣啟動看門狗定時器?
19.AT89S51型單片機(jī)的工作方式有幾種?各種工作方式有什么區(qū)別?
20.怎樣將單片機(jī)從空閑模式或掉電模式中喚醒?第3章指令系統(tǒng)及匯編語言程序設(shè)計(jì)3.1單片機(jī)的匯編語言與指令格式3.2單片機(jī)的指令尋址方式3.3單片機(jī)的指令系統(tǒng)3.4匯編語言程序設(shè)計(jì)習(xí)題3
3.1單片機(jī)的匯編語言與指令格式
3.1.1匯編語言
在計(jì)算機(jī)中,指令都是以二進(jìn)制數(shù)碼表示,并存放在程序存儲器中的。計(jì)算機(jī)按照程序規(guī)定的次序,依次從程序存儲器中取出要執(zhí)行的指令代碼,送到控制器的指令寄存器中對所取的指令進(jìn)行分析,由控制器發(fā)出完成操作所需的一系列控制電平,指揮計(jì)算機(jī)有關(guān)部件完成相應(yīng)操作。我們稱這種用二進(jìn)制代碼描述指令功能的、能被計(jì)算機(jī)直接識別的語言為機(jī)器語言(MachineLanguage)。
為了既能保持機(jī)器語言的特點(diǎn),又能方便編寫程序和閱讀程序,人們采用助記符號來代替機(jī)器指令代碼,助記符號與機(jī)器指令代碼一一對應(yīng),我們把這種編程語言稱為匯編語言(AssemblyLanguage)。需要說明的是,匯編語言是面向機(jī)器的程序設(shè)計(jì)語言,對于每種計(jì)算機(jī),都有自己的匯編語言;匯編語言中由于使用了助記符號,因此將由匯編語言編制的程序輸入計(jì)算機(jī)后,計(jì)算機(jī)不能像識別機(jī)器語言編寫的程序一樣直接識別和執(zhí)行匯編語言程序,必須通過預(yù)先放入計(jì)算機(jī)的“匯編程序”的加工和翻譯,才能把匯編語言程序變成能夠被計(jì)算機(jī)識別和處理的二進(jìn)制代碼程序。
3.1.2匯編語言的指令格式
MCS-51匯編語言的指令格式為
[標(biāo)號:]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]
其中:
[]:方括號表示該項(xiàng)是可選項(xiàng),根據(jù)指令要求確定。
標(biāo)號:用符號標(biāo)明該指令所在程序存儲器的地址,并以“:”結(jié)尾,設(shè)計(jì)者根據(jù)實(shí)際需要設(shè)置。
操作碼助記符:用來規(guī)定指令所完成的操作,用英文縮寫的指令功能助記符表示。該項(xiàng)不得省略。
目的操作數(shù):表示操作的對象,是一個目標(biāo)地址,也是存放操作結(jié)果的地址。目的操作數(shù)與操作碼助記符之間必須用一個以上的空格分隔。
源操作數(shù):表示操作的對象或者是操作數(shù)的來源,可以是一個地址或者一個立即數(shù)。源操作數(shù)與目的操作數(shù)中間用逗號分隔。
注釋:是對指令或者程序段的解釋說明,用以提高程序的可讀性,注釋前必須加分號。
3.1.3匯編語言中常用符號約定
為了便于指令的描述,對指令中常用的符號有如下約定:
(1)?Rn:表示當(dāng)前工作寄存器中的R0~R7,其中n=0~7。當(dāng)前工作寄存器組由程序狀態(tài)寄存器PSW的RS1和RS0位決定。
(2)?Ri:表示當(dāng)前工作寄存器中的R0~R1,其中i取值為0或1。
(3)?direct:表示對內(nèi)部單元直接尋址的8位地址,可以是內(nèi)部RAM區(qū)的某一單元或某一特殊功能寄存器的地址,變化范圍為00H~FFH。
(4)?@:表示間接尋址寄存器及地址寄存器的前綴。
(5)?DPTR:表示16位數(shù)據(jù)指針。
(6)?#data:表示指令中的8位立即數(shù),其中#是立即數(shù)標(biāo)識符,data表示8位數(shù),取值范圍為00H~FFH。
(7)?#data16:表示指令中的16位立即數(shù),取值范圍為0000H~FFFFH。
(8)?PC:表示16位程序計(jì)數(shù)器。
(9)?addr11:表示短轉(zhuǎn)移的11位地址,用于2KB范圍內(nèi)尋址。
(10)?addr16:表示長轉(zhuǎn)移的16位地址,用于64KB范圍內(nèi)尋址。
(11)?rel:表示相對轉(zhuǎn)移的地址偏移量。
(12)?bit:表示位尋址區(qū)的直接尋址位。
(13)?(x):表示x地址單元中的內(nèi)容。
(14)?((x)):表示將x地址單元中的內(nèi)容作為地址單元中的內(nèi)容。
(15)?←:表示操作數(shù)據(jù)的流向,用箭頭后面的內(nèi)容替代前面的內(nèi)容。
(16)?/:表示取反操作。
3.2單片機(jī)的指令尋址方式
3.2.1立即數(shù)尋址立即數(shù)尋址是指將操作數(shù)直接寫在指令中,不需要從其他的存儲空間中尋找和獲取。指令中立即數(shù)可以是8位或者16位,并且要在其前冠以“#”前綴,以區(qū)別于地址,主要用于賦值操作。該尋址方式只能用于源操作數(shù)。例如:MOVA,#00H;(A)←00H
該指令執(zhí)行的操作是將立即數(shù)00H送到累加器A中,該指令就是立即數(shù)尋址。#00H中的“H”是說明該立即數(shù)是以十六進(jìn)制表示的,實(shí)際編程時也可以用其他進(jìn)制來表示。立即數(shù)尋址示意圖如圖3.1所示。圖3.1立即數(shù)尋址示意圖
3.2.2直接尋址
直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在MCS-51單片機(jī)中,可以直接尋址的存儲器主要有內(nèi)部RAM區(qū)和特殊功能寄存器(SFR)區(qū)。例如:
MOVA,50H;(A)←(50H)
該指令執(zhí)行的操作是將內(nèi)部RAM中地址為50H單元的內(nèi)容傳送到累加器A中,其操作數(shù)50H就是存放數(shù)據(jù)的單元地址。所以該指令是直接尋址。若50H單元中的內(nèi)容是55H,則該指令執(zhí)行后A的內(nèi)容就是55H。直接尋址示意圖如圖3.2所示。
圖3.2直接尋址示意圖
3.2.3寄存器尋址
寄存器尋址是指將操作數(shù)存放于寄存器中。寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、數(shù)據(jù)指針寄存器DPTR。例如:
MOVA,R0;(A)←(R0)
該指令執(zhí)行的操作是把R0寄存器中的數(shù)據(jù)傳送到A累加器中,其操作數(shù)存放在R0中,所以尋址方式為寄存器尋址。若R0寄存器單元中的內(nèi)容是55H,則該指令執(zhí)行后A的內(nèi)容就是55H。寄存器尋址示意圖如圖3.3所示。
圖3.3寄存器尋址示意圖
3.2.4寄存器間接尋址
寄存器間接尋址是指將存放操作數(shù)的內(nèi)部RAM地址放在特定的寄存器中,指令中只給出該寄存器。MCS-51指令系統(tǒng)中,能用于寄存器間接尋址的寄存器有R0、R1和DPTR,稱為寄存器間接尋址寄存器,作為寄存器間接尋址時寄存器間接尋址寄存器的前面必須加上符號“@”。例如:
MOVA,@R0;(A)←((R0))
該指令執(zhí)行的操作是將R0的內(nèi)容作為內(nèi)部RAM的地址,再將該地址單元中的內(nèi)容取出來送到累加器A中。若R0寄存器單元中的內(nèi)容是55H,內(nèi)部RAM地址55H中的內(nèi)容是80H,則執(zhí)行該指令后A的內(nèi)容就是80H。寄存器間址尋址示意圖如圖3.4所示。
圖3.4寄存器間址尋址示意圖
3.2.5變址尋址
變址尋址是指將基址寄存器與變址寄存器的內(nèi)容相加,結(jié)果作為操作數(shù)的地址。DPTR或PC是基址寄存器,累加器A是變址寄存器。該類尋址方式主要用于查表操作。例如:
MOVCA,@A+DPTR;(A)←((A)+(DPTR))
該指令執(zhí)行的操作是將累加器A的內(nèi)容和基址寄存器DPTR的內(nèi)容相加,相加的結(jié)果作為操作數(shù)存放的地址(地址在程序存儲器中),再將操作數(shù)取出來送到累加器A中。若累加器A的內(nèi)容為80H,DPTR的內(nèi)容為1000H,程序存儲器單元1080H中的內(nèi)容是55H,則執(zhí)行該指令后A的內(nèi)容就是55H。變址尋址示意圖如圖3.5所示。
圖3.5變址尋址示意圖
3.2.6相對尋址
相對尋址是指程序計(jì)數(shù)器(PC)以當(dāng)前值(以下不做特別提示時均指的是當(dāng)前值)為基準(zhǔn)與指令中的相對偏移量(rel)相加,形成新的有效轉(zhuǎn)移地址(下一個取指令的地址)。該類尋址方式主要用于跳轉(zhuǎn)指令。
要說明的是,該指令執(zhí)行時的程序計(jì)數(shù)器當(dāng)前值是該指令的首地址加上該指令的字節(jié)數(shù);rel是一個帶符號的8位二進(jìn)制數(shù),以補(bǔ)碼表示,能表示的范圍是-128~+127個字節(jié)單元,若為負(fù)數(shù)表示從當(dāng)前地址向上轉(zhuǎn)移(小于當(dāng)前地址),反之就向下轉(zhuǎn)移(大于當(dāng)前地址)。例如:
SJMP08H;(PC)←(PC)+08H
該指令執(zhí)行的操作是將PC當(dāng)前的值與08H相加,結(jié)果再送回PC中,成為下一條將要執(zhí)行指令的地址。指令SJMP08H是雙字節(jié)指令,其機(jī)器碼為80H、08H,若存放在1000H處,當(dāng)執(zhí)行到該指令時,先從1000H和1001H單元取出指令,PC自動變?yōu)?002H(PC當(dāng)前值);再把PC的內(nèi)容與操作數(shù)08H相加,形成目標(biāo)地址100AH,再送回PC,使得程序跳轉(zhuǎn)到100AH單元繼續(xù)執(zhí)行。相對尋址示意圖如圖3.6所示。
圖3.6相對尋址示意圖
3.2.7位尋址
位尋址是指令中直接給出位地址,可以對有位地址的存儲單元進(jìn)行操作。MCS-51單片機(jī)中,操作數(shù)不僅可以按字節(jié)為單位進(jìn)行操作,也可以按位進(jìn)行操作。當(dāng)我們將某一位作為操作數(shù)時,這個操作數(shù)的地址稱為位地址。位尋址區(qū)包括在內(nèi)部RAM中的兩個特殊區(qū)域:一是內(nèi)部RAM的位尋址區(qū),字節(jié)地址范圍是20H~2FH,共16個RAM單元,對應(yīng)的位地址為00H~7FH,共128位;二是特殊功能寄存器SFR中有11個寄存器可以位尋址,可以參見第2章中有關(guān)位地址的內(nèi)容。
3.3單片機(jī)的指令系統(tǒng)
3.3.1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令是MCS-51單片機(jī)匯編語言程序設(shè)計(jì)中使用最頻繁的指令,包括內(nèi)部數(shù)據(jù)傳送、外部數(shù)據(jù)傳送、查表、數(shù)據(jù)交換、堆棧操作5種類型共29條指令,使用了8種助記符,分別為MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH和POP。數(shù)據(jù)傳送類指令有立即尋址、直接尋址、寄存器尋址、寄存器間接尋址和變址尋址5種尋址方式。
數(shù)據(jù)傳送操作是指把數(shù)據(jù)從源地址傳送到目的地址,源地址內(nèi)容不變,而目的操作數(shù)修改為源操作數(shù),或者源操作數(shù)與目的操作數(shù)互換,即源操作數(shù)變成目的操作數(shù),目的操作數(shù)變成源操作數(shù),以保存目的操作數(shù)不被丟失。
1.內(nèi)部數(shù)據(jù)傳送指令
內(nèi)部數(shù)據(jù)傳送指令共16條,主要用于內(nèi)部RAM與寄存器之間的數(shù)據(jù)傳送。指令基本格式為
MOV[目的操作數(shù)][,源操作數(shù)]
1)以累加器A為目的地址的傳送指令
此類指令共有四條,如表3.1所示。
例3.1已知執(zhí)行指令前A、R0、內(nèi)部RAM30H和50H中的內(nèi)容分別是20H、30H、80H、10H,請說明每條指令的功能,并指出執(zhí)行后相應(yīng)單元內(nèi)容和奇偶標(biāo)志位P的變化。
①?MOVA,R0
②?MOVA,50H
③?MOVA,@R0
④?MOVA,#55H
解
①該指令完成了(A)←(R0);執(zhí)行后(A)=30H,P=0,其他的內(nèi)容不變。
②該指令完成了(A)←(50H);執(zhí)行后(A)=10H,P=1,其他的內(nèi)容不變。
③該指令完成了(A)←((R0));執(zhí)行后(A)=80H,P=1,其他的內(nèi)容不變。
④該指令完成了(A)←#55H;執(zhí)行后(A)=55H,P=0,其他的內(nèi)容不變。
2)以Rn為目的地址的傳送指令
該類指令共有三條,如表3.2所示。
例3.2設(shè)目前的工作寄存器使用的是0組,R0中的內(nèi)容是55H,R2中的內(nèi)容是50H,請判斷用下面的程序是否可以完成將R2中的內(nèi)容傳送給R0。
①?MOVR0,R2
②?MOVR0,02H
③MOVA,R2
MOVR0,A
解
①由于在指令中沒有直接Rn和Rn傳送數(shù)據(jù)的指令,故該指令不存在,所以不能完成。
②由已知得R2在RAM中地址是02H,所以該指令是將R2作為內(nèi)部RAM,用直接尋址方式完成了數(shù)據(jù)的傳送。
③指令通過A作為數(shù)據(jù)的中轉(zhuǎn),先將(A)←(R2),再將(R0)←(A),完成了數(shù)據(jù)傳送。
通過上面的例子可以看出,同樣的功能可以用多個不同的程序?qū)崿F(xiàn)。
3)以直接地址為目的地址的傳送指令
該類指令共有五條,如表3.3所示。
例3.3設(shè)內(nèi)部RAM30H和40H中的內(nèi)容分別是18H和88H,請將40H的內(nèi)容傳給30H,分別用匯編語言和機(jī)器語言編寫該程序段,該段程序的起始地址為2000H。
解匯編語言程序段為
2000HMOV30H,40H;(30H)(40H)
機(jī)器語言程序段為
2000H85
2001H40
2002H30
從該程序段可以看出,匯編語言指令的目的操作數(shù)在前,源操作數(shù)在后,而機(jī)器語言剛好相反。
4)以寄存器間接地址為目的地址的傳送指令
該類指令共有三條,如表3.4所示。
例3.4已知R0、R1、內(nèi)部RAM50H和51H的內(nèi)容分別為50H、51H、30H和31H,請指出下列指令執(zhí)行后各目的操作數(shù)內(nèi)容相應(yīng)的變化。
①?MOVA,51H
????MOV@R0,A
②?MOV@R1,50H
解①?MOVA,51H執(zhí)行后(A)=(51H)=31H;?MOV@R0,A執(zhí)行后((R0))=(50H)=(A)=31H。
②?MOV@R1,50H執(zhí)行后((R1))=(50H)=30H。
5)?16位數(shù)據(jù)傳送指令
該類指令有一條,如表3.5所示。
2.外部數(shù)據(jù)傳送指令
外部數(shù)據(jù)傳送指令共四條,如表3.6所示,主要用于累加器A與外部數(shù)據(jù)存儲器或I/O端口之間的數(shù)據(jù)傳送。在此我們就可以看出內(nèi)、外部RAM的區(qū)別了,內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部RAM間則不能直接進(jìn)行數(shù)據(jù)傳遞。指令基本格式為
MOVX[目的操作數(shù)][,源操作數(shù)]
例3.5把外部數(shù)據(jù)存儲器2000H單元中的數(shù)據(jù)傳送到外部數(shù)據(jù)存儲器2100H單元中。
解MOVDPTR,#2000H
MOVXA,@DPTR ;先將2000H單元的內(nèi)容傳送到累加器A中
MOVDPTR,#2100H
MOVX@DPTR,A ;再將累加器A中的內(nèi)容傳送到2100H單元中
3.交換類指令
交換類指令共五條,主要用于累加器A與內(nèi)部數(shù)據(jù)存儲單元之間的數(shù)據(jù)傳送。與其他的數(shù)據(jù)傳送指令不同的是數(shù)據(jù)傳送是雙向的,即目的操作數(shù)和源操作數(shù)在指令執(zhí)行時互為目的地址和源地址,指令執(zhí)行后各自的操作數(shù)都修改為另一方的操作數(shù),兩個操作數(shù)都會保留而不會因數(shù)據(jù)的傳送而丟失。
1)字節(jié)交換指令
字節(jié)交換指令共三條,如表3.7所示。
2)半字節(jié)交換指令
半字節(jié)交換指令有一條,如表3.8所示。
3)累加器A中高4位和低4位交換
累加器A中高4位和低4位交換的指令有一條,如表3.9所示。
例3.6設(shè)內(nèi)部數(shù)據(jù)存儲區(qū)2AH、2BH單元中連續(xù)存放有四個BCD碼:a3a2和a1a0,試編寫一程序把這四個BCD碼倒序排序,即a0a1和a2a3。
4.查表指令
查表指令有兩條,如表3.10所示,用于將程序存儲器ROM中的數(shù)送入A中。查表指令之所以被稱為查表指令,是因?yàn)槌S脕聿橐粋€已寫好在ROM中的表格。指令基本格式為
MOVC[目的操作數(shù)][,源操作數(shù)]
例3.7有一個數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0~5),試編寫一程序段完成之。
5.堆棧操作指令
堆棧操作指令有兩條,如表3.11所示。第一條為壓入指令,就是將direct中的內(nèi)容送入堆棧中;第二條為彈出指令,就是將堆棧中的內(nèi)容送回到direct中。
3.3.2算術(shù)運(yùn)算類指令
1.加法指令
1)普通加法指令
普通加法指令即不帶進(jìn)位的加法指令,有四條,如表3.12所示。
2)帶進(jìn)位加法指令
帶進(jìn)位加法指令有四條,如表3.13所示。
例3.10設(shè)X0、Y0存放在R1和R0中,X1、Y1存放在R3和R2中,試編寫計(jì)算雙字節(jié)加法R1R0+R3R2,并將結(jié)果存在R5R4中的程序。
2.減法指令
減法指令共有四條,如表3.14所示。
例3.11設(shè)12H和34H分別存放在R1和R0中,試編寫計(jì)算R0減R1,并將結(jié)果存在60H中的程序。
3.?BCD碼調(diào)整指令
BCD碼調(diào)整指令有一條,如表3.15所示。
4.加1指令
加1指令共有五條,如表3.16所示。
5.減1指令
減1指令共有四條,如表3.17所示。
6.乘、除法指令
乘、除法指令共有二條,如表3.18所示。
3.3.3邏輯運(yùn)算類指令
1.邏輯運(yùn)算指令
1)邏輯與指令
邏輯與指令共有六條,如表3.19所示。邏輯與指令的功能是將兩個操作數(shù)的內(nèi)容按位進(jìn)行邏輯“與”操作,并將結(jié)果送回目的操作數(shù)中。邏輯與指令通常用于將一個字節(jié)中的指定位清0,其他位不變。
例3.13若(A)=01011000B,試編寫將其高4位的內(nèi)容保持不變,低4位的內(nèi)容清零的程序。
解由于“與”邏輯是按位進(jìn)行操作的,因此用立即數(shù)11110000B直接和A“與”即可。
2)邏輯或指令
邏輯或指令共有六條,如表3.20所示。
例3.14若(A)=01011000B,試編寫將其高4位的內(nèi)容保持不變,低4位的內(nèi)容置1的程序。
3)邏輯異或指令
邏輯異或指令共有六條,如表3.21所示。
例3.15若(A)=01011000B,(R1)=00001111B,求執(zhí)行過XRLA,R1指令后A的內(nèi)容。
解由于“異或”邏輯是按位進(jìn)行操作的,故有
4)累加器A清0和取反指令
累加器A清0和取反指令共有兩條,如表3.22所示。
2.循環(huán)移位指令
循環(huán)移位指令共有四條,如表3.23所示。
例3.16若(A)=10001000B=88D,試用右移指令編寫將A除以4的程序段。
解因?yàn)閳?zhí)行一次RRC相當(dāng)于除以2,因此執(zhí)行2次即可完成除4的功能。
3.3.4位操作類指令
位操作指令的操作數(shù)是“位”,其取值只能是0或1,故又稱之為布爾變量操作指令。.
位操作指令主要完成的操作是以位為對象的數(shù)據(jù)傳送、邏輯運(yùn)算和控制轉(zhuǎn)移等。
這類指令的位地址有四種表達(dá)方式:
(1)直接(位)地址方式,如00H。
(2)點(diǎn)操作符號方式,如ACC.4,P2.3。
(3)位名稱方式,如RS0。
(4)用戶定義名方式:如用偽指令bit。
1.位傳送指令
位傳送指令有兩條,如表3.24所示。
2.位復(fù)位和位置位指令
位置位和位復(fù)位指令共有四條,如表3.25所示。
例3.18如圖3.7所示電路,P1.1端口接了一個發(fā)光二極管,編寫點(diǎn)亮或熄滅該二極管的程序段。
解由圖3.7所示可知,當(dāng)P1.1是低電平時點(diǎn)亮,高電平時熄滅,所以程序?yàn)?/p>
CLRP1.1;(P1.1)←0,點(diǎn)亮二極管
SETBP1.1;(P1.1)←1,熄滅二極管圖3.7例3.18電路
3.位運(yùn)算指令
位運(yùn)算指令共有六條,如表3.26所示。
例3.19設(shè)X、Y、Z為三個位地址,試完成(Z)=(X)(Y)運(yùn)算的程序編程。
解異或運(yùn)算可分解為(Z)=(X)/(Y)+/(X)(Y),程序設(shè)計(jì)如下:
4.位轉(zhuǎn)移指令
位轉(zhuǎn)移指令共有三條,如表3.27所示。
例3.20設(shè)下列指令的首地址是1000H,位20H的內(nèi)容為1,試簡述下列指令執(zhí)行中各有關(guān)操作數(shù)的變化情況。
(1)1000HJB20H,08H
(2)1000HJB20H,F(xiàn)DH
(3)1000HJB20H,F(xiàn)AH
5.判斷Cy標(biāo)志指令
判斷Cy標(biāo)志的指令有兩條,如表3.28所示。
例3.21將JCrel指令用于例3.12中。
解由已知編寫程序段如下:
3.3.5控制轉(zhuǎn)移類指令
控制轉(zhuǎn)移類指令的本質(zhì)是改變程序計(jì)數(shù)器PC的內(nèi)容,從而改變程序的執(zhí)行方向。控制轉(zhuǎn)移指令分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令和調(diào)用、返回指令。指令豐富,共有17條。此類指令一般不影響PSW的狀態(tài)。
1.無條件轉(zhuǎn)移指令
1)長轉(zhuǎn)移指令
長轉(zhuǎn)移指令有一條,如表3.29所示。
例3.22在上電復(fù)位后,程序要跳轉(zhuǎn)到用戶程序地址標(biāo)號為START的入口程序。
解在上電復(fù)位后,單片機(jī)的第一條指令從存儲器0000H單元開始執(zhí)行,由于0003H~0023H單元對應(yīng)的是單片機(jī)各中斷源的中斷服務(wù)入口地址,一般情況下主程序不能占用,因此第一條指令一般都是跳轉(zhuǎn)指令。程序段如下:
2)絕對轉(zhuǎn)移指令
絕對轉(zhuǎn)移指令有一條,如表3.30所示。
例3.23指令2020HAJMP0FFH執(zhí)行后PC的內(nèi)容是什么?
解該指令的首地址為2020H,執(zhí)行后PC的當(dāng)前值為首地址2020H加2,即2022H,然后由2022H的高5位和11位直接地址0FFH組成新的PC值,即0010000011111111B,也即程序從20FFH開始執(zhí)行。
例3.24指令2FFFHAJMP0FFH執(zhí)行后PC的內(nèi)容是什么?
解該指令的首地址為2FFFH,執(zhí)行后PC的當(dāng)前值為首地址2FFFH加2,即3001H,然后由3001H的高5位和11位直接地址0FFH組成新的PC值,即0011000011111111B,也即程序從30FFH開始執(zhí)行。
3)相對轉(zhuǎn)移指令
相對轉(zhuǎn)移指令有一條,如表3.31所示。
4)間接尋址的無條件轉(zhuǎn)移指令
間接尋址的無條件轉(zhuǎn)移指令有一條,如表3.32所示。
例3.26累加器A中存放待處理命令,編號為0~7,試編寫程序,完成功能:根據(jù)A內(nèi)命令編號轉(zhuǎn)向相應(yīng)的命令處理程序。
2.條件轉(zhuǎn)移指令
1)累加器A判0指令
累加器A判0指令有兩條,如表3.33所示。
例3.27累加器A中存放待處理數(shù)據(jù):如果為零,將置內(nèi)部RAM30H為00H,否則將之置為FF。試編寫該數(shù)據(jù)處理程序段。
2)比較轉(zhuǎn)移指令
比較轉(zhuǎn)移指令有四條,如表3.34所示。
例3.28累加器A中存放待處理數(shù)據(jù):如果為大于或等于3CH(十進(jìn)制的60),就向內(nèi)部RAM30H加1,否則就向內(nèi)部RAM31H加1。試編寫該數(shù)據(jù)處理程序段。
3)減1非零轉(zhuǎn)移指令
減1非零轉(zhuǎn)移指令有兩條,如表3.35所示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉鼠探究活動方案
- 仙女湖景點(diǎn)活動方案
- 代辦公司企業(yè)策劃方案
- 代言活動中秋節(jié)活動方案
- 代駕公司年會策劃方案
- 以班風(fēng)促學(xué)風(fēng)活動方案
- 儀征團(tuán)建活動方案
- 任務(wù)沖刺活動方案
- 企業(yè)小型元旦活動方案
- 金昌市金川高級中學(xué)2025屆高三三模數(shù)學(xué)
- 手術(shù)患者評估制度
- 廣聯(lián)達(dá)GTJ建模進(jìn)階技能培訓(xùn)
- 色卡-CBCC中國建筑標(biāo)準(zhǔn)色卡(千色卡1026色)
- DB11∕T 2000-2022 建筑工程消防施工質(zhì)量驗(yàn)收規(guī)范
- 人臉識別門禁系統(tǒng)使用指南
- 酒店安全設(shè)施
- 水下機(jī)器人研究報(bào)告
- 建筑項(xiàng)目部考勤管理制度
- 中班健康課件《我不挑食》
- 中國鹽業(yè)集團(tuán)有限公司招聘筆試題庫2024
- 2024年人教版小學(xué)四年級信息技術(shù)(上冊)期末試卷附答案
評論
0/150
提交評論