單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第1頁
單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第2頁
單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第3頁
單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第4頁
單片機(jī)原理及應(yīng)用(第二版) 課件全套 (柴鈺)第1-7章 單片機(jī)系統(tǒng)概述-單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩848頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論