![單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第1頁](http://file4.renrendoc.com/view3/M00/20/04/wKhkFmZz-h-AagmdAAEnjLkpXXw624.jpg)
![單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第2頁](http://file4.renrendoc.com/view3/M00/20/04/wKhkFmZz-h-AagmdAAEnjLkpXXw6242.jpg)
![單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第3頁](http://file4.renrendoc.com/view3/M00/20/04/wKhkFmZz-h-AagmdAAEnjLkpXXw6243.jpg)
![單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第4頁](http://file4.renrendoc.com/view3/M00/20/04/wKhkFmZz-h-AagmdAAEnjLkpXXw6244.jpg)
![單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第5頁](http://file4.renrendoc.com/view3/M00/20/04/wKhkFmZz-h-AagmdAAEnjLkpXXw6245.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(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ī)誕生時(shí),SCM是一個(gè)準(zhǔn)確的稱謂。單片機(jī)是相對(duì)于單板機(jī)而言的,是指將CPU、并行I/O接口、定時(shí)/計(jì)數(shù)器、RAM、ROM等功能部件集成在一塊芯片上的計(jì)算機(jī)。
單片機(jī)技術(shù)的發(fā)展是與微電子技術(shù)和半導(dǎo)體技術(shù)的發(fā)展分不開的,大體分為五個(gè)階段。
第一階段(1971—1976年):初級(jí)階段。
第二階段(1976—1980年):低性能階段。
第三階段(1980—1983年):高性能階段。
第四階段(1983—1990年):16位機(jī)階段。
第五階段(1990年至今):新一代單片機(jī)階段。
1.1.2單片機(jī)的發(fā)展趨勢(shì)
1.低功耗
MCS-51系列的8031推出時(shí)的功耗達(dá)630mW,而目前的單片機(jī)隨著制造工藝、工作頻率、工作電壓等方面的改變,其功耗越來越低。NMOS工藝單片機(jī)逐漸被CMOS工藝單片機(jī)所代替,功耗得以大幅度下降。
2.多功能、微型化
目前的單片機(jī)功能強(qiáng)大,而且體積小、重量輕。常規(guī)的單片機(jī)普遍都是將中央處理器(CPU)、隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)、只讀程序存儲(chǔ)器(ROM)、并行和串行通信接口、中斷系統(tǒng)、定時(shí)電路、時(shí)鐘電路集成在一塊單一的芯片上;增強(qiáng)型的單片機(jī)集成了如A/D轉(zhuǎn)換器、PMW(脈寬調(diào)制電路)、WDT(看門狗)等功能模塊。
3.高速度
微處理器(MicroProcessorUnit,MPU)發(fā)展中表現(xiàn)出來的速度越來越快是以時(shí)鐘頻率越來越高為標(biāo)志的,而單片機(jī)則有所不同。為提高單片機(jī)抗干擾能力,降低噪聲、降低時(shí)鐘頻率而不犧牲運(yùn)算速度是單片機(jī)技術(shù)發(fā)展之追求。
4.多品種
現(xiàn)在,雖然單片機(jī)的品種繁多,各具特色,但仍以8051為核心的單片機(jī)占主流,兼容其結(jié)構(gòu)和指令系統(tǒng)的有Philips公司的產(chǎn)品、Atmel公司的產(chǎn)品和中國臺(tái)灣的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在很短的時(shí)間內(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)為一個(gè)單片機(jī)產(chǎn)品的成熟是以投產(chǎn)掩膜型單片機(jī)為標(biāo)志的。由于掩膜需要一定的生產(chǎn)周期,而OTP型單片機(jī)價(jià)格不斷下降,使得直接使用OTP完成最終產(chǎn)品制造更為流行。
8.?MTP向OTP挑戰(zhàn)
MTP是可多次編程的意思。一些單片機(jī)廠商以MTP的性能、OTP的價(jià)位推出他們的單片機(jī),如Atmel的AVR單片機(jī),片內(nèi)采用Flash存儲(chǔ)器,可多次編程;華邦(Winbond)公司生產(chǎn)的8051兼容的單片機(jī)也采用了MTP性能、OTP的價(jià)位。這些單片機(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ī),可使儀器儀表智能化,提高測(cè)試的自動(dòng)化程度和精度,簡化儀器儀表的硬件結(jié)構(gòu),提高其性能價(jià)格比。
2.在人工智能方面的應(yīng)用
人工智能是模擬人的感覺與思維的一門學(xué)科,單片機(jī)技術(shù)可以模擬人的視覺、聽覺、觸覺和聯(lián)想、啟發(fā)、推理及思維過程,例如特殊行業(yè)的機(jī)器人、醫(yī)療領(lǐng)域的專家診斷系統(tǒng)等,都是人工智能的應(yīng)用范例。
3.在實(shí)時(shí)控制系統(tǒng)中的應(yīng)用
單片機(jī)廣泛用于各種實(shí)時(shí)過程控制的系統(tǒng)中,例如工業(yè)過程控制、過程監(jiān)測(cè)、航空航天、尖端武器、機(jī)器人系統(tǒng)等各種實(shí)時(shí)控制系統(tǒng)。
4.在人們生活中的應(yīng)用
目前,國內(nèi)外各種家電已經(jīng)普遍用單片機(jī)代替?zhèn)鹘y(tǒng)的控制電路,例如洗衣機(jī)、電冰箱、空調(diào)機(jī)、微波爐、電飯煲、收音機(jī)、音響、電風(fēng)扇及許多高級(jí)電子玩具都配上了單片機(jī)。
5.在其他方面的應(yīng)用
單片機(jī)還廣泛應(yīng)用于辦公自動(dò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ǔ)上對(duì)其資源進(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ù)位電路、時(shí)鐘電路以及擴(kuò)展的程序、數(shù)據(jù)存儲(chǔ)器等組成。
輸出通道指由單片機(jī)對(duì)外部設(shè)備發(fā)出的各種輸出信號(hào)所經(jīng)過的途徑。在通道中可對(duì)信號(hào)進(jìn)行各種處理,如隔離、放大(驅(qū)動(dòng))、轉(zhuǎn)換、濾波等。
1.2.2單片機(jī)應(yīng)用系統(tǒng)的開發(fā)
一個(gè)單片機(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ì)的每一個(gè)環(huán)節(jié),都應(yīng)該將可靠性作為首要的設(shè)計(jì)準(zhǔn)則。提高系統(tǒng)的可靠性通常從以下幾個(gè)方面考慮:
(1)使用可靠性高的元器件、典型的電路和成熟的技術(shù);
(2)采用冗余技術(shù);
(3)設(shè)計(jì)電路板時(shí)布線和接地要合理,嚴(yán)格按要求安裝硬件設(shè)備及電路;
(4)對(duì)供電電源采用抗干擾措施;
(5)輸入/輸出通道采用抗干擾措施;
(6)進(jìn)行軟、硬件濾波;
(7)使系統(tǒng)具有自診斷功能。
2.操作維護(hù)方便
在進(jìn)行系統(tǒng)的軟/硬件設(shè)計(jì)時(shí),應(yīng)從使用者的角度考慮,盡可能地方便用戶操作和維護(hù),盡量減少對(duì)操作人員專業(yè)知識(shí)的要求,以利于系統(tǒng)的推廣。因此,在設(shè)計(jì)時(shí),要盡可能減少人機(jī)交互接口,多采用操作內(nèi)置或簡化的方法。
3.性價(jià)比高
單片機(jī)除體積小、功耗低等特點(diǎn)外,最大的優(yōu)勢(shì)在于高性能價(jià)格比。一個(gè)單片機(jī)應(yīng)用系統(tǒng)能否被廣泛使用,性價(jià)比是其中一個(gè)關(guān)鍵因素。
4.設(shè)計(jì)周期短
只有縮短設(shè)計(jì)周期,才能有效地降低設(shè)計(jì)費(fèi)用,充分發(fā)揮新系統(tǒng)的技術(shù)優(yōu)勢(shì)和時(shí)效性,及早占領(lǐng)市場(chǎng)并具備一定的競(jìng)爭力。
1.3單片機(jī)的學(xué)習(xí)方法
單片機(jī)是一門實(shí)踐性很強(qiáng)的實(shí)用技術(shù),實(shí)際應(yīng)用時(shí)會(huì)涉及許多有關(guān)的知識(shí)(數(shù)電、模電、傳感器、控制、通信等知識(shí)),所以要求在學(xué)習(xí)過程中不但要掌握書中的內(nèi)容,還要通過各種實(shí)踐對(duì)單片機(jī)的內(nèi)容及有關(guān)其他課程的知識(shí)進(jìn)一步加強(qiáng)、鞏固和融合,為今后單片機(jī)應(yīng)用系統(tǒng)的分析和開發(fā)打好堅(jiān)實(shí)的基礎(chǔ)。
在學(xué)習(xí)的各個(gè)階段應(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í)對(duì)單片機(jī)有一個(gè)較完整的了解(第3、4、5章)。學(xué)習(xí)的內(nèi)容及要求主要是:掌握單片機(jī)各個(gè)功能塊的組成、性能和作用;掌握單片機(jī)指令系統(tǒng)、指令的功能和編程方法,熟悉常用的基本指令;掌握常用系統(tǒng)擴(kuò)展的基本方法和技術(shù),熟悉常用擴(kuò)展芯片的結(jié)構(gòu)、工作原理和功能。
(3)入門階段,主要是通過對(duì)單片機(jī)的深入學(xué)習(xí),對(duì)單片機(jī)應(yīng)用系統(tǒng)建立一個(gè)初步的了解,具備初步的設(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.到目前為止,你見過哪幾個(gè)公司的哪些型號(hào)的單片機(jī)?請(qǐng)羅列其中幾種,并說明其特點(diǎn)。
6.除了書中羅列的單片機(jī)應(yīng)用領(lǐng)域外,請(qǐng)你再舉幾個(gè)應(yīng)用單片機(jī)的例子。
7.請(qǐng)你舉出在你身邊都有哪些家電、設(shè)備中使用了單片機(jī)。
8.請(qǐng)列舉到目前為止你知道的具有中國自主知識(shí)產(chǎn)權(quán)的單片機(jī),其特點(diǎn)是什么?
9.第一款單片機(jī)是哪個(gè)國家的哪個(gè)公司制造的?型號(hào)是什么?
10.請(qǐng)瀏覽本書的目錄,回答該課程的主要內(nèi)容是什么。你認(rèn)為單片機(jī)的學(xué)習(xí)和哪些已經(jīng)學(xué)習(xí)過的課程或者知識(shí)有關(guān)?
11.你現(xiàn)在已有的單片機(jī)編程軟件是什么?
12.你知道什么是電路板嗎?你會(huì)手工制作電路板嗎?如果不知道請(qǐng)查閱資料,找到有關(guān)這方面的資料,了解這方面的情況,掌握制作的過程和方法。
13.你去過電子市場(chǎng)嗎?買過電子器件(電阻、電容、晶振、發(fā)光二極管等)嗎?如果沒有,請(qǐng)選擇兩個(gè)以上的電子市場(chǎng),購買一些與單片機(jī)有關(guān)的電子元器件。請(qǐng)舉例說出你已去過的電子市場(chǎng)及買過的有關(guān)元器件(寫下名稱、型號(hào)、功能及性能等)。
14.你過去使用過示波器、信號(hào)發(fā)生器、直流電源等設(shè)備嗎?使用過萬用表、烙鐵等工具嗎?如果使用過,你對(duì)它們的功能、性能、結(jié)構(gòu)等了解程度如何?請(qǐng)舉幾個(gè)實(shí)例說明你基本掌握了它們的功能、性能、結(jié)構(gòu)等知識(shí),并能熟練地使用。
15.單片機(jī)技術(shù)發(fā)展很快,查閱有關(guān)資料,說明目前單片機(jī)都有哪些更新的功能和更高的性能指標(biāo)。
16.為了學(xué)習(xí)單片機(jī)原理,你目前有幾本參考書?其中有無原版的單片機(jī)手冊(cè)(廠家提供的)?
17.單片機(jī)和其他計(jì)算機(jī)一樣,其工作時(shí)內(nèi)部進(jìn)行著大量的二進(jìn)制數(shù)據(jù)的處理。二進(jìn)制是最簡單的數(shù)據(jù)形式,但是通過單片機(jī)處理過后,其結(jié)果變化無窮,你能說明這是為什么嗎?
18.如果同樣的產(chǎn)品既可以用單片機(jī)設(shè)計(jì)、制作,同時(shí)也可以用傳統(tǒng)的電子器件設(shè)計(jì)、制作,你想用什么來設(shè)計(jì)呢?說出自己的看法。第2章單片機(jī)基礎(chǔ)知識(shí)2.1MCS-51系列單片機(jī)的基本結(jié)構(gòu)2.2中央處理器(CPU)2.3存儲(chǔ)器及存儲(chǔ)空間2.4并行I/O口及其結(jié)構(gòu)2.5時(shí)鐘電路與CPU時(shí)序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)型和高檔型三種。各種不同型號(hào)的單片機(jī),其主要差別在于片內(nèi)的Flash程序存儲(chǔ)器的容量大小、片內(nèi)數(shù)據(jù)存儲(chǔ)器的容量大小、并行I/O端口線以及中斷源個(gè)數(shù)不同。其常用產(chǎn)品特性如表2.2所示。
其中,“AT”是前綴,“89CXXXX”是型號(hào),型號(hào)之后的“XXXX”是后綴。各部分含義如下所示。
(1)前綴:“AT”表示該器件是Atmel公司的產(chǎn)品。
(2)型號(hào):可能是“89C2051”、“89LV51”、“89S52”等。
(3)后綴:由“XXXX”四個(gè)參數(shù)組成,每個(gè)參數(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)、存儲(chǔ)器、輸入/輸出端口、定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)以及系統(tǒng)總線等構(gòu)成,通過系統(tǒng)總線把各個(gè)部分連接起來。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ī)的核心部件,是一個(gè)8位二進(jìn)制數(shù)的中央處理單元,主要負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單片機(jī)系統(tǒng)協(xié)調(diào)工作,完成運(yùn)算功能并控制輸入/輸出等操作。
2)程序存儲(chǔ)器(ROM)
程序存儲(chǔ)器主要用于存放用戶程序、原始數(shù)據(jù)或表格等。
3)數(shù)據(jù)存儲(chǔ)器(RAM)
數(shù)據(jù)存儲(chǔ)器主要用于存放運(yùn)算的中間結(jié)果,進(jìn)行數(shù)據(jù)暫存及數(shù)據(jù)緩沖等。
4)定時(shí)/計(jì)數(shù)器
MCS-51系列單片機(jī)有兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器,通過編程可作為定時(shí)器或計(jì)數(shù)器使用,并有四種不同的工作模式。
5)并行輸入/輸出(I/O)接口
單片機(jī)對(duì)外部電路進(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ī)有一個(gè)全雙工串行通信接口,用于與外部設(shè)備進(jìn)行串行信息傳送。該串行口可編程,有四種不同的工作模式,既可以作為異步通信收發(fā)器以與其他外部設(shè)備完成信息交換,也可以作為同步移位寄存器來擴(kuò)展I/O接口電路。
7)中斷系統(tǒng)
中斷是指CPU暫停正在執(zhí)行的程序轉(zhuǎn)而處理中斷服務(wù)程序,在執(zhí)行完中斷服務(wù)程序之后再回到原來正在執(zhí)行的程序繼續(xù)執(zhí)行。
8)時(shí)鐘電路
單片機(jī)各部件之間有條不紊地協(xié)調(diào)工作,其控制信號(hào)是在一種基本節(jié)拍的指揮下按一定的時(shí)間順序發(fā)出的,這些控制信號(hào)在時(shí)間上的相互關(guān)系就是CPU時(shí)序。而產(chǎn)生這種時(shí)序的電路就是振蕩器和時(shí)鐘電路。
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電源正端,正常操作和對(duì)EPROM編程及驗(yàn)證時(shí)均接+5V電源。
GND(20引腳):接電源地端。
2.外接晶體線
XTAL1(19引腳):接外部晶體振蕩器的一端。
3.I/O端口線
MCS-51系列單片機(jī)共有四組并行I/O端口P0~P3,每個(gè)端口都有8條端口線,共有32條I/O端口線,每個(gè)接口的功能和用途有一定的差別。
(1)?P0口(32~39引腳):P0.0~P0.7統(tǒng)稱為P0口,是一個(gè)8位漏極開路型雙向I/O端口,其中P0.7為最高位。
(2)?P1口(1~8引腳):P1.0~P1.7統(tǒng)稱為P1口,是一個(gè)帶內(nèi)部上拉電阻的8位準(zhǔn)雙向口,P1.7為最高位。
(3)?P2口(21~28引腳):P2.0~P2.7統(tǒng)稱為P2口,也是一個(gè)帶內(nèi)部上拉電阻的8位準(zhǔn)雙向口,P2.7為最高位。
(4)?P3口(10~17引腳):P3.0~P3.7統(tǒng)稱為P3口,也是一個(gè)帶內(nèi)部上拉電阻的8位準(zhǔn)雙向口,P3.7為最高位。
4.控制線
RST/VPD(9引腳):單片機(jī)復(fù)位/備用電源引腳。該引腳為單片機(jī)的上電復(fù)位或掉電保護(hù)端,該引腳上出現(xiàn)持續(xù)兩個(gè)機(jī)器周期的高電平就可實(shí)現(xiàn)復(fù)位操作,使單片機(jī)恢復(fù)到初始狀態(tài)。
MCS-51系列單片機(jī)功能多但引腳少。許多引腳具有雙重功能。這種雙重功能的設(shè)置為單片機(jī)系統(tǒng)擴(kuò)展奠定了基礎(chǔ)。MCS-51系列單片機(jī)對(duì)外呈現(xiàn)三總線的形式,由P0口分時(shí)復(fù)用為8位數(shù)據(jù)總線,P0、P2構(gòu)成16位地址總線,由ALE、RST、、、
(P3.6)、(P3.7)等信號(hào)組成控制總線,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)算器的核心部件,可對(duì)數(shù)據(jù)進(jìn)行算術(shù)四則運(yùn)算和邏輯運(yùn)算、移位操作、位操作等。
2.累加器
ACC是一個(gè)8位寄存器,簡稱A,用來存放參與算術(shù)運(yùn)算和邏輯運(yùn)算的一個(gè)操作數(shù)或運(yùn)算結(jié)果,是CPU執(zhí)行指令時(shí)使用最頻繁的寄存器。
3.寄存器B
寄存器B是一個(gè)8位寄存器,是為ALU進(jìn)行乘、除法運(yùn)算而設(shè)置的。
4.暫存器
TMP1、TMP2用于為ALU暫存兩個(gè)8位的二進(jìn)制操作數(shù),對(duì)用戶不開放。
5.程序狀態(tài)字寄存器
PSW是一個(gè)8位標(biāo)志寄存器,用來存放程序運(yùn)行中的各種狀態(tài)信息,以供程序查詢和判斷。PSW中各位的狀態(tài)通常是在操作過程中自動(dòng)形成的,也可以由用戶根據(jù)需要按位進(jìn)行操作。其各位的定義如下(PSW字節(jié)地址為D0H):
其各位的定義如下(PSW字節(jié)地址為D0H):
RS1、RS0狀態(tài)與工作寄存器組的對(duì)應(yīng)關(guān)系如表2.4所示。
6.布爾處理器(位處理器)
布爾處理器是MCS-51單片機(jī)ALU具有的一種功能。單片機(jī)指令系統(tǒng)中的17條位處理指令、存儲(chǔ)器中的位地址空間以及借用程序狀態(tài)寄存器中的進(jìn)位標(biāo)志位Cy作為位操作累加器,構(gòu)成了單片機(jī)的布爾處理器。它可對(duì)直接尋址的位變量進(jìn)行位處理,如置位、清零、取反以及邏輯與、或等操作,并可以方便地設(shè)置標(biāo)志等。
2.2.2控制器
控制器是對(duì)來自存儲(chǔ)器中的指令進(jìn)行譯碼,通過定時(shí)控制電路,在規(guī)定的時(shí)刻發(fā)出各種操作所需的全部內(nèi)部和外部的控制信號(hào),使各部分協(xié)調(diào)工作,完成指令所規(guī)定的功能的器件??刂破髦饕沙绦蛴?jì)數(shù)器(PC)、指令寄存器(IR)、指令譯碼器(ID)和定時(shí)控制邏輯電路等組成。
1.程序計(jì)數(shù)器
PC是一個(gè)16位的、具有自動(dòng)加1功能的寄存器,用來存放下一條將要執(zhí)行指令的ROM地址值。
2.指令寄存器
IR是一個(gè)8位的寄存器,用于存放CPU根據(jù)PC地址從ROM中讀出的指令操作碼,等待譯碼。
3.指令譯碼器
ID用于對(duì)指令寄存器中的指令進(jìn)行譯碼,將指令轉(zhuǎn)變?yōu)閳?zhí)行此指令所需要的電信號(hào)。
4.定時(shí)控制邏輯電路
定時(shí)部件用于產(chǎn)生脈沖序列和多種節(jié)拍脈沖;控制邏輯根據(jù)指令譯碼器產(chǎn)生的操作信號(hào),按一定時(shí)間順序發(fā)出一系列節(jié)拍脈沖控制信號(hào)來完成指令所規(guī)定的全部操作。
2.2.3專用寄存器組
專用寄存器也稱為特殊功能寄存器(SFR),主要用來指示當(dāng)前要執(zhí)行指令的內(nèi)存地址,存放特定的操作數(shù),指示指令的運(yùn)行狀態(tài)等。MCS-51系列單片機(jī)共有21個(gè)特殊功能寄存器,離散地分布在片內(nèi)RAM的高128B地址中。前面介紹的A、B、PSW等都是特殊功能寄存器,但程序計(jì)數(shù)器不是特殊功能寄存器,不可訪問。
2.3存儲(chǔ)器及存儲(chǔ)空間
2.3.1存儲(chǔ)器空間MCS-51單片機(jī)的存儲(chǔ)器結(jié)構(gòu)框圖如圖2.4所示。
圖2.4MCS-51單片機(jī)存儲(chǔ)器結(jié)構(gòu)框圖
在物理結(jié)構(gòu)上,MCS-51系列單片機(jī)有四個(gè)存儲(chǔ)空間,分別為
(1)片內(nèi)程序存儲(chǔ)器。
(2)片外程序存儲(chǔ)器。
(3)片內(nèi)數(shù)據(jù)存儲(chǔ)器。
(4)片外數(shù)據(jù)存儲(chǔ)器(包括I/O地址空間)。
從用戶使用角度,即從邏輯上看,MCS-51系列單片機(jī)有三個(gè)存儲(chǔ)空間,分別為
(1)片內(nèi)、外統(tǒng)一編址的64KB程序存儲(chǔ)器(0000H~0FFFFH)。
(2)片內(nèi)數(shù)據(jù)存儲(chǔ)器(包含128B的SFR空間80H~0FFH)。
(3)?64KB的片外數(shù)據(jù)存儲(chǔ)器(包括I/O地址空間)。
2.3.2程序存儲(chǔ)器
程序存儲(chǔ)器一般用于存放程序、表格和常數(shù)。MCS-51單片機(jī)的程序存儲(chǔ)器空間最大為64KB(0000H~0FFFFH),其地址指針為16位的程序計(jì)數(shù)器PC,程序存儲(chǔ)器的地址是連續(xù)、統(tǒng)一的。
2.程序存儲(chǔ)器中的特殊單元
MCS-51單片機(jī)的程序存儲(chǔ)器中有一些特殊的存儲(chǔ)單元,這些存儲(chǔ)單元具有固定的用途,在使用中應(yīng)加以注意。這些存儲(chǔ)單元分別為
?0000H:單片機(jī)上電或復(fù)位后PC的值,即程序必須從該地址開始執(zhí)行。
?0003H:外部中斷0入口地址。
?000BH:定時(shí)/計(jì)數(shù)器0溢出中斷入口地址。
?0013H:外部中斷1入口地址。
?001BH:定時(shí)/計(jì)數(shù)器1溢出中斷入口地址。
?0023H:串行口中斷入口地址。
?002BH:定時(shí)/計(jì)數(shù)器2溢出或T2EX(P1.1)端負(fù)跳變時(shí)的入口地址(僅52子系列有)。
2.3.3內(nèi)部數(shù)據(jù)存儲(chǔ)器
數(shù)據(jù)存儲(chǔ)器用于存放運(yùn)算中間結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)志位等。MCS-51單片機(jī)片內(nèi)數(shù)據(jù)存儲(chǔ)器在物理上可分為兩個(gè)不同的區(qū),即為片內(nèi)RAM區(qū)和特殊功能寄存器區(qū)(SFR)。
1.片內(nèi)RAM
片內(nèi)RAM區(qū)從功能用途上又可分為三個(gè)不同的區(qū)域:工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū),如表2.5所示。
1)工作寄存器區(qū)
片內(nèi)RAM的00H~1FH區(qū)域設(shè)置為工作寄存器區(qū),該區(qū)域共有32個(gè)存儲(chǔ)單元,均勻地劃分為4組,每組由8個(gè)工作寄存器R0~R7構(gòu)成。工作寄存器組和RAM地址的對(duì)應(yīng)關(guān)系如表2.6所示。
2)位尋址區(qū)
片內(nèi)RAM的20H~2FH的16個(gè)字節(jié)為位尋址區(qū)。這16個(gè)地址單元共有128位,每一位都有一個(gè)位地址,即為00H~7FH,每一位可以視為一個(gè)軟件觸發(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)用中,往往需要有一個(gè)連續(xù)的先進(jìn)后出的RAM緩沖區(qū),用于保護(hù)臨時(shí)數(shù)據(jù),這種以先進(jìn)后出原則存取數(shù)據(jù)的RAM緩沖區(qū)稱為堆棧。
向堆棧中存放(壓入)數(shù)據(jù)稱為入棧,從堆棧中取出(彈出)數(shù)據(jù)稱為出棧,堆棧只有這兩種操作。不論數(shù)據(jù)是入棧還是出棧,都是對(duì)棧頂?shù)膯卧M(jìn)行操作,堆棧是向上生成的。
2.特殊功能寄存器(SFR)
所謂特殊功能寄存器,是區(qū)別于通用寄存器的寄存器。特殊功能寄存器的功能和用途有專門的規(guī)定,主要包括用于對(duì)片內(nèi)各功能模塊進(jìn)行管理、控制、監(jiān)視的控制寄存器和狀態(tài)寄存器。
MCS-51子系列單片機(jī)共有21個(gè)SFR,其名稱和字節(jié)地址如表2.8所示。
52子系列中除了具有51子系列所有的21個(gè)SFR之外,還增加了5個(gè),如表2.9所示。
AT89S51單片機(jī)除了具有51子系列的21個(gè)特殊功能寄存器以外,還增加了5個(gè)特殊功能寄存器,分別為AUXR、WDTRST、AUXR1、DP1L和DP1H。
(1)?AUXR輔助寄存器字節(jié)地址為8EH,其各位的定義如下:
(2)?AUXR1輔助寄存器用來選擇雙數(shù)據(jù)指針寄存器,其字節(jié)地址為A2H,各位定義如下:
(3)看門狗復(fù)位寄存器WDTRST的字節(jié)地址為A6H,該寄存器為只寫寄存器。當(dāng)要打開WDT時(shí),用戶必須按順序給該寄存器寫入1EH和0E1H。
(4)?DP1L和DP1H為16位數(shù)據(jù)指針寄存器DPTR1的低字節(jié)和高字節(jié)。
2.3.4外部數(shù)據(jù)存儲(chǔ)器
MCS-51單片機(jī)可通過外部擴(kuò)展電路將RAM芯片和CPU相接,片外最大可以擴(kuò)展64KB的數(shù)據(jù)存儲(chǔ)器。對(duì)片外RAM進(jìn)行讀、寫時(shí),由P0、P2口提供地址信號(hào),只能采用寄存器間接尋址方式。間接尋址寄存器可使用的寄存器有通用寄存器R0、R1以及數(shù)據(jù)指針寄存器DPTR,當(dāng)R0或R1作為間接尋址寄存器時(shí),P0將R0或R1的內(nèi)容(8位)作為地址輸出,因此最大尋址空間為256B,地址范圍為00H~0FFH,與片內(nèi)RAM地址重疊,但由于訪問片內(nèi)和片外數(shù)據(jù)存儲(chǔ)器采用的尋址方式和指令不同,因此不會(huì)引起混亂。
MCS-51單片機(jī)對(duì)片外RAM和擴(kuò)展的I/O端口進(jìn)行統(tǒng)一編址,即外部擴(kuò)展的任何I/O接口和外圍設(shè)備地址均占用片外RAM的地址,因此使用時(shí)要合理安排地址范圍。CPU對(duì)片外RAM和I/O端口操作使用相同的訪問指令和控制線。有關(guān)外部數(shù)據(jù)存儲(chǔ)器和I/O端口的擴(kuò)展請(qǐng)參閱本書第5章。
2.4并行I/O口及其結(jié)構(gòu)2.4.1P0口的結(jié)構(gòu)與功能1.P0口的結(jié)構(gòu)P0口是一個(gè)三態(tài)雙向口,在系統(tǒng)擴(kuò)展時(shí),作為低8位地址線和數(shù)據(jù)總線的分時(shí)復(fù)用口;在其他狀態(tài)下可作為通用I/O接口。P0口一位的結(jié)構(gòu)框圖如圖2.5所示,它由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸入緩沖器、一個(gè)輸出驅(qū)動(dòng)電路和一個(gè)輸出控制電路組成。輸出驅(qū)動(dòng)電路由一對(duì)FET(場(chǎng)效應(yīng)管)VT1和VT2組成,其工作狀態(tài)受輸出控制電路的控制;輸出控制電路由一個(gè)與門電路、一個(gè)反相器和一個(gè)多路開關(guān)MUX組成。
圖2.5P0口一位的結(jié)構(gòu)框圖
2.P0口的功能
1)?P0口作為一般I/O口使用時(shí)
圖2.5中的多路開關(guān)MUX的位置由CPU發(fā)出的控制信號(hào)決定。當(dāng)MCS-51片外無擴(kuò)展存儲(chǔ)器系統(tǒng)時(shí),P0口作為通用I/O口使用,此時(shí)CPU內(nèi)部發(fā)出控制電平“0”封鎖與門,使輸出上拉場(chǎng)效應(yīng)管VT1截止,同時(shí)多路開關(guān)把輸出鎖存器端與輸出場(chǎng)效應(yīng)管VT2的柵極接通。此時(shí)P0即作為一般的I/O口使用。
2)?P0口作為地址/數(shù)據(jù)總線使用時(shí)
當(dāng)MCS-51片外擴(kuò)展有RAM、I/O接口、ROM時(shí),P0端口作為地址/數(shù)據(jù)總線使用,此時(shí)可分為兩種情況。一種是以P0口引腳輸出地址/數(shù)據(jù)信息,這時(shí)CPU內(nèi)部發(fā)出高電平的控制信號(hào),打開與門,同時(shí)使多路開關(guān)MUX把CPU內(nèi)部地址/數(shù)據(jù)總線反相后與輸出驅(qū)動(dòng)場(chǎng)效應(yīng)管VT2的柵極接通。
2.4.2P1口的結(jié)構(gòu)與功能
P1口是一個(gè)準(zhǔn)雙向口,用作通用I/O口,P1口一位的結(jié)構(gòu)框圖如圖2.6所示。Pl口通常作為通用I/O口使用,所以在電路結(jié)構(gòu)上與P0口有一些不同。首先它不再需要多路轉(zhuǎn)換開關(guān)MUX和控制電路部分;其次是輸出驅(qū)動(dòng)電路部分只有一個(gè)FET,同時(shí)內(nèi)部有上拉電阻,此電阻直接與電源相連。當(dāng)Pl口作為輸出口使用時(shí),能向外部提供拉電流負(fù)載,無需再外接上拉電阻。
圖2.6P1口一位的結(jié)構(gòu)框圖
2.4.3P2口的結(jié)構(gòu)與功能
P2口也是一個(gè)準(zhǔn)雙向I/O口,P2口一位的結(jié)構(gòu)框圖如圖2.7所示。P2口的電路結(jié)構(gòu)與P1口類似,驅(qū)動(dòng)部分與P1口相同,但P2口具有通用I/O接口或高8位地址總線輸出兩種功能,因此其輸出驅(qū)動(dòng)結(jié)構(gòu)相比P1口多了一個(gè)輸出轉(zhuǎn)換開關(guān)MUX和反相器。
圖2.7P2口一位的結(jié)構(gòu)框圖
2.4.4P3口的結(jié)構(gòu)與功能
P3口也是一個(gè)準(zhǔn)雙向I/O口,P3口一位的結(jié)構(gòu)框圖如圖2.8所示。由圖可知,P3口每一位的輸出驅(qū)動(dòng)由與非門、場(chǎng)效應(yīng)管組成,比P0、P1、P2多了一個(gè)緩沖器。除了作為通用的I/O端口外,P3口的每一位均具有第二功能。
圖2.8P3口一位的結(jié)構(gòu)框圖
2.4.5I/O口的應(yīng)用特性
1.使用原則
MCS-51單片機(jī)中的四個(gè)I/O接口在實(shí)際使用中一般遵循以下用法:P0口一般作為系統(tǒng)擴(kuò)展地址低8位/數(shù)據(jù)口分時(shí)復(fù)用;P1口一般作為I/O口使用;P2口作為系統(tǒng)擴(kuò)展地址高8位和I/O接口擴(kuò)展用的地址譯碼器的輸入;P3口作為中斷輸入、串行口、定時(shí)/計(jì)數(shù)以及讀/寫控制信號(hào)使用。
2.端口負(fù)載能力和接口要求
P0口的輸出級(jí)與P1~P3口的輸出級(jí)在結(jié)構(gòu)上不相同,因此它們的帶負(fù)載能力和接口要求也各不相同。
(1)?P0口的每一位可驅(qū)動(dòng)8個(gè)LSTTL輸入,當(dāng)作通用I/O口使用時(shí),輸出級(jí)是漏極開路電路,故需外接上拉電阻才能有高電平輸出;當(dāng)作地址/數(shù)據(jù)總線用時(shí),不需要外接上拉電阻,此時(shí)不能作通用的I/O口使用。
(2)?P1~P3口的輸出級(jí)都接有內(nèi)部上拉電阻,它們的每一位可以驅(qū)動(dòng)4個(gè)LSTTL負(fù)載。
(3)?P0~P3口都是準(zhǔn)雙向口,作輸入時(shí),必須先向相應(yīng)的端口鎖存器寫入1。當(dāng)系統(tǒng)復(fù)位時(shí),P0~P3口鎖存器全為1。
2.5時(shí)鐘電路與CPU時(shí)序
單片機(jī)內(nèi)各種操作都是按著節(jié)拍有序地進(jìn)行的,控制各部件協(xié)調(diào)工作的控制信號(hào)也是在一種基本節(jié)拍的指揮下按一定的順序發(fā)出的。產(chǎn)生這種基本節(jié)拍的電路就是振蕩器和時(shí)鐘電路??刂菩盘?hào)在時(shí)間上的相互關(guān)系稱為CPU時(shí)序。
2.5.1時(shí)鐘電路
AT89S51單片機(jī)內(nèi)部有一個(gè)高增益反相放大器,引腳XTAL1、XTAL2分別為該反相放大器的輸入和輸出端。該反相放大器外接定時(shí)反饋元件組成振蕩器或通過外接時(shí)鐘源的方法,產(chǎn)生時(shí)鐘送至單片機(jī)內(nèi)部的各部件。時(shí)鐘頻率越高,單片機(jī)控制器的控制節(jié)拍越快,運(yùn)算速度就越快。根據(jù)硬件電路的不同,單片機(jī)的時(shí)鐘電路可分為內(nèi)部時(shí)鐘和外部時(shí)鐘兩種方式。
1.內(nèi)部時(shí)鐘方式
AT89S51單片機(jī)內(nèi)部振蕩電路如圖2.9所示,但要形成時(shí)鐘還必須外接晶體或陶瓷諧振器(簡稱晶振),外接電路如圖2.10所示。
圖2.9AT89S51單片機(jī)內(nèi)部振蕩電路
圖2.10內(nèi)部時(shí)鐘方式的外接電路
2.外部時(shí)鐘方式
MCS-51單片機(jī)的內(nèi)部工作時(shí)鐘也可以由外部振蕩器產(chǎn)生,對(duì)于HMOS型和CHMOS型MCS-51單片機(jī),它們的時(shí)鐘電路接法稍有不同,其電路連接方式如圖2.11所示。圖2.11外部時(shí)鐘連接方式
2.5.2CPU時(shí)序
單片機(jī)中一條指令的執(zhí)行可以分解為若干個(gè)基本的微操作,這些微操作是在單片機(jī)提供的時(shí)鐘脈沖信號(hào)作用下,嚴(yán)格按時(shí)間的先后次序執(zhí)行的,這些次序就是CPU的時(shí)序。
1.振蕩周期
振蕩周期是由單片機(jī)片內(nèi)或片外振蕩器所產(chǎn)生的,為單片機(jī)提供時(shí)鐘源信號(hào)的周期,其值為1/fosc。
2.時(shí)鐘周期
時(shí)鐘周期又稱為狀態(tài)周期S,由內(nèi)部時(shí)鐘電路產(chǎn)生,兩個(gè)振蕩周期為一個(gè)時(shí)鐘周期。
3.機(jī)器周期
機(jī)器周期是完成一個(gè)規(guī)定操作所需的時(shí)間,是單片機(jī)執(zhí)行一種基本操作的時(shí)間單位。
4.指令周期
執(zhí)行一條指令所占用的時(shí)間稱為指令周期,一個(gè)指令周期通常由1~4個(gè)機(jī)器周期組成,依據(jù)指令的不同而不同。指令的執(zhí)行速度和它所占用的機(jī)器周期數(shù)直接相關(guān),占用的機(jī)器周期數(shù)少則執(zhí)行速度快。
四種時(shí)序單位中,振蕩周期和機(jī)器周期是單片機(jī)內(nèi)計(jì)算其他時(shí)間值的基本時(shí)序單位。下面以單片機(jī)外接晶振頻率為12MHz為例,說明各種時(shí)序單位之間的關(guān)系。
5.CPU取指令、執(zhí)行指令時(shí)序
每一條指令的執(zhí)行都包括取指令和執(zhí)行指令兩個(gè)階段。在取指令階段,CPU從程序存儲(chǔ)器中取出指令操作碼和操作數(shù),在指令執(zhí)行階段執(zhí)行這條指令。MCS-51單片機(jī)指令系統(tǒng)中,指令字節(jié)長度為1~3個(gè)字節(jié),按指令字節(jié)數(shù)和執(zhí)行所需時(shí)間不同,可將指令分為單字節(jié)單周期指令、單字節(jié)雙周期指令、單字節(jié)四周期指令、雙字節(jié)單周期指令、雙字節(jié)雙周期指令和三字節(jié)雙周期指令。這些指令在執(zhí)行過程中的時(shí)序是不相同的。單周期和雙周期CPU取指/執(zhí)行時(shí)序如圖2.12所示。
圖2.12CPU取指/執(zhí)行時(shí)序
2.6單片機(jī)的工作方式
2.6.1復(fù)位方式復(fù)位是單片機(jī)的硬件初始化操作。復(fù)位的作用是使中央處理器CPU以及其他功能部件都恢復(fù)到一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。除此之外,當(dāng)單片機(jī)程序運(yùn)行出錯(cuò)或系統(tǒng)處于死循環(huán)狀態(tài)等情況時(shí),需要對(duì)單片機(jī)進(jìn)行復(fù)位以重新啟動(dòng)機(jī)器。復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,使單片機(jī)從0000H開始執(zhí)行程序,其他特殊功能寄存器的復(fù)位狀態(tài)如表2.10所示。
除了看門狗WDT定時(shí)器可使單片機(jī)復(fù)位,MCS-51單片機(jī)的復(fù)位還可以靠外部電路實(shí)現(xiàn),信號(hào)由RST引腳輸入,高電平有效。當(dāng)RST引腳上持續(xù)兩個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)即完成復(fù)位。若使用頻率為6MHz的晶振,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過4?μs才能完成復(fù)位操作。常用復(fù)位電路有上電復(fù)位和手動(dòng)復(fù)位(外部復(fù)位)兩種,如圖2.13所示。
圖2.13常用復(fù)位電路
2.6.2程序執(zhí)行方式
程序執(zhí)行方式是單片機(jī)的基本工作方式,即執(zhí)行用戶編寫好的、存放在程序存儲(chǔ)器中的程序。由于單片機(jī)復(fù)位后PC的值為0000H,因此程序執(zhí)行總是從地址0000H開始。但一般程序并不是真正從0000H開始,為此往往在0000H開始的單元中存放一條無條件轉(zhuǎn)移指令,以便跳轉(zhuǎn)到實(shí)際程序的入口去執(zhí)行。
2.6.3單步執(zhí)行方式
單步執(zhí)行方式是通過外來脈沖控制程序的執(zhí)行,每產(chǎn)生一個(gè)脈沖即執(zhí)行一條指令。而外來脈沖通常是通過按鍵產(chǎn)生的,因此實(shí)際上單步執(zhí)行就是按一次鍵執(zhí)行一條指令。單步執(zhí)行需要外部電路產(chǎn)生控制脈沖信號(hào),通??山柚鷨纹瑱C(jī)的外部中斷來實(shí)現(xiàn)。假定利用外部中斷1來實(shí)現(xiàn)程序的單步執(zhí)行,則應(yīng)事先做好以下兩項(xiàng)準(zhǔn)備工作。
2.6.4低功耗方式
為了適應(yīng)電源功耗要求低的應(yīng)用場(chǎng)合,CHMOS型的MCS-51單片機(jī)設(shè)置了低功耗工作方式。另外,在掉電保護(hù)情況下,由備用電源為單片機(jī)進(jìn)行低功耗供電,因此掉電保護(hù)方式實(shí)際上也是一種低功耗方式。故低功耗方式有兩種:空閑方式和掉電保護(hù)方式。
空閑方式和掉電保護(hù)方式是由電源控制寄存器PCON的有關(guān)位來控制的。電源控制寄存器是一個(gè)8位寄存器,不可位尋址,其格式如下:
?SMOD:串行口波特率系數(shù)控制位。在方式1、2和3時(shí),串行通信的波特率與SMOD有關(guān)。當(dāng)SMOD=1時(shí),通信波特率乘2;當(dāng)SMOD=0時(shí),波特率不變。
?GF1:通用標(biāo)志1。
?GF0:通用標(biāo)志0。
?PD:掉電方式控制位,PD=1時(shí),系統(tǒng)進(jìn)入掉電方式。
?IDL:空閑方式控制位,IDL=1時(shí),系統(tǒng)進(jìn)入空閑方式。
顯然,要想使單片機(jī)進(jìn)入空閑或掉電工作方式,只要執(zhí)行一條能使IDL或PD位為1的指令就可以了。
1.空閑方式
通過編程將電源控制寄存器PCON的IDL位置1,單片機(jī)即進(jìn)入空閑方式。進(jìn)入空閑方式后,振蕩器仍然運(yùn)行,時(shí)鐘信號(hào)輸出到中斷系統(tǒng)、串行口以及定時(shí)/計(jì)數(shù)器模塊,但不向CPU提供時(shí)鐘,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ā)生掉電故障,將會(huì)丟失RAM和寄存器中程序的數(shù)據(jù),其后果有時(shí)是很嚴(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引腳接入。為了在掉電時(shí)能及時(shí)接通備用電源,系統(tǒng)中還需具有備用電源與Vcc的切換電路,如圖2.14所示。圖2.14備用電源與Vcc的切換電路
2.6.6Flash編程和校驗(yàn)方式
AT89S51單片機(jī)內(nèi)部有4KB的Flash存儲(chǔ)器,允許用戶多次編輯和擦除,用戶可以很方便地進(jìn)行程序和數(shù)據(jù)的修改。AT89S51工作在Flash編程和校驗(yàn)方式下時(shí),主要包括以下幾個(gè)過程:讀片內(nèi)簽名字節(jié)、Flash存儲(chǔ)器編程、程序校驗(yàn)、程序加密和芯片擦除。
1.讀片內(nèi)簽名字節(jié)
簽名字節(jié)是生產(chǎn)廠家在生產(chǎn)產(chǎn)品時(shí)寫入到存儲(chǔ)器中的信息。
1)?Flash存儲(chǔ)器的并行編程
并行編程即通過傳統(tǒng)的EPROM編程器使用高電壓(+12V)和協(xié)調(diào)的控制信號(hào)進(jìn)行編程。AT89S51單片機(jī)的代碼是逐一字節(jié)進(jìn)行編程的。編程前,須按照?qǐng)D2.15所示的Flash編程硬件邏輯電路圖連接好地址、數(shù)據(jù)和控制信號(hào),編程方法如下:
(1)在地址線上加上要編程單元的地址信號(hào)。
(2)在數(shù)據(jù)線上加上要寫入的數(shù)據(jù)字節(jié)。
(3)激活相應(yīng)的控制信號(hào)。
(4)將EA/VPP端加上?+12V編程電壓。
(5)每對(duì)Flash存儲(chǔ)器寫入一個(gè)字節(jié)或每寫入一個(gè)程序加密位,加上一個(gè)編程脈沖。圖2.15Flash編程硬件邏輯電路圖
2)?Flash存儲(chǔ)器的串行編程
串行編程將RST接至Vcc,通過串行ISP接口進(jìn)行編程,串行接口包含SCK(串行時(shí)鐘)線P1.7、MOSI(輸入)線P1.5和MISO(輸出)線P1.6。將RST拉高后,在其他操作前必須發(fā)出編程使能指令,編程前需將芯片擦除。外部時(shí)鐘信號(hào)需接至XTAL1端或XTAL1和XTAL2接至晶體振蕩器,最高的串行時(shí)鐘(SCK)不超過1/6晶體時(shí)鐘。
編程方法如下:
(1)上電次序:將電源加在Vcc和GND引腳,RST置為高電平,如果XTAL1和XTAL2接至晶體或XTAL1接上3~33MHz的時(shí)鐘頻率,則需等候10ms。
(2)將編程使能指令發(fā)送到MOSI線,編程時(shí)鐘接至SCK,此頻率需小于晶體時(shí)鐘頻率的1/16。
(3)編程可選字節(jié)模式或頁模式,寫周期是自身定時(shí)的,一般不大于0.5ms(5V電壓時(shí))。
(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.程序加密
程序加密是通過軟件對(duì)加密位進(jìn)行編程來實(shí)現(xiàn)的。AT89S51有三個(gè)加密位,分別為LB1、LB2和LB3。通過對(duì)這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ī)有多少個(gè)特殊功能寄存器?它們分布在何地址范圍?
7.DPTR是什么寄存器?它的作用是什么?它是由哪幾個(gè)寄存器組成的?
8.簡述程序狀態(tài)寄存器(PSW)各位的含義。單片機(jī)如何確定和改變當(dāng)前的工作寄存器區(qū)?
9.什么是堆棧?堆棧指針寄存器(SP)的作用是什么?在堆棧中存取數(shù)據(jù)時(shí)的原則是什么?
10.在MCS-51型單片機(jī)ROM空間中,0003H~002BH有什么用途?用戶應(yīng)怎樣合理安排?
11.詳細(xì)說明P0口、P1口、P2口、P3口的工作原理。
12.當(dāng)單片機(jī)外部擴(kuò)展RAM和ROM時(shí),P0口、P1口、P2口、P3口各起何作用?
13.P0~P3口作為輸入或輸出口時(shí),各有何要求?
14.P3口有哪些第二功能?實(shí)際應(yīng)用中第二功能是怎么分配的?
15.畫出MCS-51型單片機(jī)時(shí)鐘電路,并指出石英晶體和電容的取值范圍。
16.什么是機(jī)器周期?機(jī)器周期和振蕩頻率有何關(guān)系?當(dāng)振蕩頻率為6MHz時(shí),機(jī)器周期是多少?
17.MCS-51型單片機(jī)常用的復(fù)位方法有幾種?應(yīng)注意的事項(xiàng)有哪些?畫出電路圖說明其工作原理。
18.看門狗定時(shí)器有什么功能?怎樣啟動(dòng)看門狗定時(shí)器?
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ù)碼表示,并存放在程序存儲(chǔ)器中的。計(jì)算機(jī)按照程序規(guī)定的次序,依次從程序存儲(chǔ)器中取出要執(zhí)行的指令代碼,送到控制器的指令寄存器中對(duì)所取的指令進(jìn)行分析,由控制器發(fā)出完成操作所需的一系列控制電平,指揮計(jì)算機(jī)有關(guān)部件完成相應(yīng)操作。我們稱這種用二進(jìn)制代碼描述指令功能的、能被計(jì)算機(jī)直接識(shí)別的語言為機(jī)器語言(MachineLanguage)。
為了既能保持機(jī)器語言的特點(diǎn),又能方便編寫程序和閱讀程序,人們采用助記符號(hào)來代替機(jī)器指令代碼,助記符號(hào)與機(jī)器指令代碼一一對(duì)應(yīng),我們把這種編程語言稱為匯編語言(AssemblyLanguage)。需要說明的是,匯編語言是面向機(jī)器的程序設(shè)計(jì)語言,對(duì)于每種計(jì)算機(jī),都有自己的匯編語言;匯編語言中由于使用了助記符號(hào),因此將由匯編語言編制的程序輸入計(jì)算機(jī)后,計(jì)算機(jī)不能像識(shí)別機(jī)器語言編寫的程序一樣直接識(shí)別和執(zhí)行匯編語言程序,必須通過預(yù)先放入計(jì)算機(jī)的“匯編程序”的加工和翻譯,才能把匯編語言程序變成能夠被計(jì)算機(jī)識(shí)別和處理的二進(jìn)制代碼程序。
3.1.2匯編語言的指令格式
MCS-51匯編語言的指令格式為
[標(biāo)號(hào):]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋]
其中:
[]:方括號(hào)表示該項(xiàng)是可選項(xiàng),根據(jù)指令要求確定。
標(biāo)號(hào):用符號(hào)標(biāo)明該指令所在程序存儲(chǔ)器的地址,并以“:”結(jié)尾,設(shè)計(jì)者根據(jù)實(shí)際需要設(shè)置。
操作碼助記符:用來規(guī)定指令所完成的操作,用英文縮寫的指令功能助記符表示。該項(xiàng)不得省略。
目的操作數(shù):表示操作的對(duì)象,是一個(gè)目標(biāo)地址,也是存放操作結(jié)果的地址。目的操作數(shù)與操作碼助記符之間必須用一個(gè)以上的空格分隔。
源操作數(shù):表示操作的對(duì)象或者是操作數(shù)的來源,可以是一個(gè)地址或者一個(gè)立即數(shù)。源操作數(shù)與目的操作數(shù)中間用逗號(hào)分隔。
注釋:是對(duì)指令或者程序段的解釋說明,用以提高程序的可讀性,注釋前必須加分號(hào)。
3.1.3匯編語言中常用符號(hào)約定
為了便于指令的描述,對(duì)指令中常用的符號(hào)有如下約定:
(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:表示對(duì)內(nèi)部單元直接尋址的8位地址,可以是內(nèi)部RAM區(qū)的某一單元或某一特殊功能寄存器的地址,變化范圍為00H~FFH。
(4)?@:表示間接尋址寄存器及地址寄存器的前綴。
(5)?DPTR:表示16位數(shù)據(jù)指針。
(6)?#data:表示指令中的8位立即數(shù),其中#是立即數(shù)標(biāo)識(shí)符,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:表示相對(duì)轉(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ù)直接寫在指令中,不需要從其他的存儲(chǔ)空間中尋找和獲取。指令中立即數(shù)可以是8位或者16位,并且要在其前冠以“#”前綴,以區(qū)別于地址,主要用于賦值操作。該尋址方式只能用于源操作數(shù)。例如:MOVA,#00H;(A)←00H
該指令執(zhí)行的操作是將立即數(shù)00H送到累加器A中,該指令就是立即數(shù)尋址。#00H中的“H”是說明該立即數(shù)是以十六進(jìn)制表示的,實(shí)際編程時(shí)也可以用其他進(jìn)制來表示。立即數(shù)尋址示意圖如圖3.1所示。圖3.1立即數(shù)尋址示意圖
3.2.2直接尋址
直接尋址是指把存放操作數(shù)的內(nèi)存單元的地址直接寫在指令中。在MCS-51單片機(jī)中,可以直接尋址的存儲(chǔ)器主要有內(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,稱為寄存器間接尋址寄存器,作為寄存器間接尋址時(shí)寄存器間接尋址寄存器的前面必須加上符號(hào)“@”。例如:
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ù)存放的地址(地址在程序存儲(chǔ)器中),再將操作數(shù)取出來送到累加器A中。若累加器A的內(nèi)容為80H,DPTR的內(nèi)容為1000H,程序存儲(chǔ)器單元1080H中的內(nèi)容是55H,則執(zhí)行該指令后A的內(nèi)容就是55H。變址尋址示意圖如圖3.5所示。
圖3.5變址尋址示意圖
3.2.6相對(duì)尋址
相對(duì)尋址是指程序計(jì)數(shù)器(PC)以當(dāng)前值(以下不做特別提示時(shí)均指的是當(dāng)前值)為基準(zhǔn)與指令中的相對(duì)偏移量(rel)相加,形成新的有效轉(zhuǎn)移地址(下一個(gè)取指令的地址)。該類尋址方式主要用于跳轉(zhuǎn)指令。
要說明的是,該指令執(zhí)行時(shí)的程序計(jì)數(shù)器當(dāng)前值是該指令的首地址加上該指令的字節(jié)數(shù);rel是一個(gè)帶符號(hào)的8位二進(jìn)制數(shù),以補(bǔ)碼表示,能表示的范圍是-128~+127個(gè)字節(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í)行到該指令時(shí),先從1000H和1001H單元取出指令,PC自動(dòng)變?yōu)?002H(PC當(dāng)前值);再把PC的內(nèi)容與操作數(shù)08H相加,形成目標(biāo)地址100AH,再送回PC,使得程序跳轉(zhuǎn)到100AH單元繼續(xù)執(zhí)行。相對(duì)尋址示意圖如圖3.6所示。
圖3.6相對(duì)尋址示意圖
3.2.7位尋址
位尋址是指令中直接給出位地址,可以對(duì)有位地址的存儲(chǔ)單元進(jìn)行操作。MCS-51單片機(jī)中,操作數(shù)不僅可以按字節(jié)為單位進(jìn)行操作,也可以按位進(jìn)行操作。當(dāng)我們將某一位作為操作數(shù)時(shí),這個(gè)操作數(shù)的地址稱為位地址。位尋址區(qū)包括在內(nèi)部RAM中的兩個(gè)特殊區(qū)域:一是內(nèi)部RAM的位尋址區(qū),字節(jié)地址范圍是20H~2FH,共16個(gè)RAM單元,對(duì)應(yīng)的位地址為00H~7FH,共128位;二是特殊功能寄存器SFR中有11個(gè)寄存器可以位尋址,可以參見第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,請(qǐng)說明每條指令的功能,并指出執(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,請(qǐng)判斷用下面的程序是否可以完成將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ù)傳送。
通過上面的例子可以看出,同樣的功能可以用多個(gè)不同的程序?qū)崿F(xiàn)。
3)以直接地址為目的地址的傳送指令
該類指令共有五條,如表3.3所示。
例3.3設(shè)內(nèi)部RAM30H和40H中的內(nèi)容分別是18H和88H,請(qǐng)將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,請(qǐng)指出下列指令執(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ù)存儲(chǔ)器或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ù)存儲(chǔ)器2000H單元中的數(shù)據(jù)傳送到外部數(shù)據(jù)存儲(chǔ)器2100H單元中。
解MOVDPTR,#2000H
MOVXA,@DPTR ;先將2000H單元的內(nèi)容傳送到累加器A中
MOVDPTR,#2100H
MOVX@DPTR,A ;再將累加器A中的內(nèi)容傳送到2100H單元中
3.交換類指令
交換類指令共五條,主要用于累加器A與內(nèi)部數(shù)據(jù)存儲(chǔ)單元之間的數(shù)據(jù)傳送。與其他的數(shù)據(jù)傳送指令不同的是數(shù)據(jù)傳送是雙向的,即目的操作數(shù)和源操作數(shù)在指令執(zhí)行時(shí)互為目的地址和源地址,指令執(zhí)行后各自的操作數(shù)都修改為另一方的操作數(shù),兩個(gè)操作數(shù)都會(huì)保留而不會(huì)因數(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ù)存儲(chǔ)區(qū)2AH、2BH單元中連續(xù)存放有四個(gè)BCD碼:a3a2和a1a0,試編寫一程序把這四個(gè)BCD碼倒序排序,即a0a1和a2a3。
4.查表指令
查表指令有兩條,如表3.10所示,用于將程序存儲(chǔ)器ROM中的數(shù)送入A中。查表指令之所以被稱為查表指令,是因?yàn)槌S脕聿橐粋€(gè)已寫好在ROM中的表格。指令基本格式為
MOVC[目的操作數(shù)][,源操作數(shù)]
例3.7有一個(gè)數(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所示。邏輯與指令的功能是將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“與”操作,并將結(jié)果送回目的操作數(shù)中。邏輯與指令通常用于將一個(gè)字節(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,故又稱之為布爾變量操作指令。.
位操作指令主要完成的操作是以位為對(duì)象的數(shù)據(jù)傳送、邏輯運(yùn)算和控制轉(zhuǎn)移等。
這類指令的位地址有四種表達(dá)方式:
(1)直接(位)地址方式,如00H。
(2)點(diǎn)操作符號(hào)方式,如ACC.4,P2.3。
(3)位名稱方式,如RS0。
(4)用戶定義名方式:如用偽指令bit。
1.位傳送指令
位傳送指令有兩條,如表3.24所示。
2.位復(fù)位和位置位指令
位置位和位復(fù)位指令共有四條,如表3.25所示。
例3.18如圖3.7所示電路,P1.1端口接了一個(gè)發(fā)光二極管,編寫點(diǎn)亮或熄滅該二極管的程序段。
解由圖3.7所示可知,當(dāng)P1.1是低電平時(shí)點(diǎn)亮,高電平時(shí)熄滅,所以程序?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為三個(gè)位地址,試完成(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)號(hào)為START的入口程序。
解在上電復(fù)位后,單片機(jī)的第一條指令從存儲(chǔ)器0000H單元開始執(zhí)行,由于0003H~0023H單元對(duì)應(yīng)的是單片機(jī)各中斷源的中斷服務(wù)入口地址,一般情況下主程序不能占用,因此第一條指令一般都是跳轉(zhuǎn)指令。程序段如下:
2)絕對(duì)轉(zhuǎn)移指令
絕對(duì)轉(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)相對(duì)轉(zhuǎn)移指令
相對(duì)轉(zhuǎn)移指令有一條,如表3.31所示。
4)間接尋址的無條件轉(zhuǎn)移指令
間接尋址的無條件轉(zhuǎn)移指令有一條,如表3.32所示。
例3.26累加器A中存放待處理命令,編號(hào)為0~7,試編寫程序,完成功能:根據(jù)A內(nèi)命令編號(hào)轉(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 應(yīng)急響應(yīng)機(jī)制的建立
- 部編版一年級(jí)語文下冊(cè)第18課《棉花姑娘》精美課件
- 2025私宅房屋買賣合同附加稅費(fèi)籌劃條款3篇
- 二零二五年度能源項(xiàng)目開發(fā)合作協(xié)議合同合伙書2篇
- 二零二五年度安防設(shè)備購銷與系統(tǒng)集成服務(wù)協(xié)議3篇
- 長春石雕石欄桿施工方案
- 二零二五年度短視頻內(nèi)容創(chuàng)作團(tuán)隊(duì)視頻剪輯人員勞動(dòng)合同范本3篇
- 路橋泥漿排入河道施工方案
- 鐵路移動(dòng)寬帶施工方案
- 水泥道路方案
- 湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測(cè)試參考試題庫(含答案)
- 英漢互譯單詞練習(xí)打印紙
- 2023湖北武漢華中科技大學(xué)招聘實(shí)驗(yàn)技術(shù)人員24人筆試參考題庫(共500題)答案詳解版
- 一氯二氟甲烷安全技術(shù)說明書MSDS
- 母嬰護(hù)理員題庫
- 老年人預(yù)防及控制養(yǎng)老機(jī)構(gòu)院內(nèi)感染院內(nèi)感染基本知識(shí)
- SWITCH暗黑破壞神3超級(jí)金手指修改 版本號(hào):2.7.6.90885
- 2023高考語文全國甲卷詩歌閱讀題晁補(bǔ)之《臨江仙 身外閑愁空滿眼》講評(píng)課件
- 物流簽收回執(zhí)單
- 鋼結(jié)構(gòu)廠房造價(jià)指標(biāo)
- 安徽涵豐科技有限公司年產(chǎn)6000噸磷酸酯阻燃劑DOPO、4800噸磷酸酯阻燃劑DOPO衍生品、12000噸副產(chǎn)品鹽酸、38000噸聚合氯化鋁、20000噸固化劑項(xiàng)目環(huán)境影響報(bào)告書
評(píng)論
0/150
提交評(píng)論