單片機(jī)原理及應(yīng)用第3版全套課件_第1頁(yè)
單片機(jī)原理及應(yīng)用第3版全套課件_第2頁(yè)
單片機(jī)原理及應(yīng)用第3版全套課件_第3頁(yè)
單片機(jī)原理及應(yīng)用第3版全套課件_第4頁(yè)
單片機(jī)原理及應(yīng)用第3版全套課件_第5頁(yè)
已閱讀5頁(yè),還剩247頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)原理及應(yīng)用(第3版)

機(jī)械工業(yè)出版社2013-4第1章計(jì)算機(jī)基礎(chǔ)知識(shí)概述1.1數(shù)制與編碼1.2計(jì)算機(jī)系統(tǒng)組成1.3單片機(jī)與嵌入式系統(tǒng)組成1.4一個(gè)簡(jiǎn)單的單片機(jī)應(yīng)用實(shí)例1.1數(shù)制與編碼1.1.1計(jì)算機(jī)與二進(jìn)制

計(jì)算機(jī)只是一種以二進(jìn)制數(shù)據(jù)形式內(nèi)部存儲(chǔ)信息、以程序存儲(chǔ)為基礎(chǔ)、由程序自動(dòng)控制的電子設(shè)備。二進(jìn)制數(shù)是計(jì)算機(jī)硬件能直接識(shí)別并進(jìn)行處理的惟一形式。1.1.2數(shù)制及其轉(zhuǎn)換數(shù)制就是計(jì)數(shù)方式。常用的數(shù)制有二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù)據(jù)等。在計(jì)算機(jī)內(nèi)只能使用二進(jìn)制表示,因此,計(jì)算機(jī)在處理數(shù)據(jù)時(shí),必須進(jìn)行各種數(shù)制之間的相互轉(zhuǎn)換。1.二進(jìn)制數(shù)二進(jìn)制數(shù)只有兩個(gè)數(shù)字符號(hào):0和1。計(jì)數(shù)時(shí)按“逢二進(jìn)一”的原則進(jìn)行計(jì)數(shù)。二進(jìn)制數(shù)的表示形式有(110)2(110.11)210110B等。2.十六進(jìn)制數(shù)

十六進(jìn)制數(shù)有16個(gè)數(shù)字符號(hào),其中0~9與十進(jìn)制相同,剩余6個(gè)為A~F,分別表示十進(jìn)制數(shù)的10~15。十六進(jìn)制數(shù)的計(jì)數(shù)原則是逢“十六進(jìn)一”。為了便于區(qū)別不同進(jìn)制的數(shù)據(jù),一般情況下可在數(shù)據(jù)后跟一后綴:二進(jìn)制數(shù)用“B”表示(如00111010B);十六進(jìn)制數(shù)用“H”表示(如3A5H);十進(jìn)制數(shù)用“D”表示(如39D或39)。3.不同數(shù)制之間的轉(zhuǎn)換(1)二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)對(duì)任意二進(jìn)制數(shù)均可按權(quán)值展開(kāi)將其轉(zhuǎn)化為十進(jìn)制數(shù)。(10)2=1×21+0×20=(2)10對(duì)于十進(jìn)制整數(shù),可采用除2取余的方法轉(zhuǎn)化成二進(jìn)制數(shù)。對(duì)于十進(jìn)制小數(shù),可采用乘2取整的方法轉(zhuǎn)化成二進(jìn)制數(shù)。(2)二進(jìn)制數(shù)與十六進(jìn)制數(shù)的相互轉(zhuǎn)換在將二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)時(shí),其整數(shù)部分可由小數(shù)點(diǎn)開(kāi)始向左每4位為一組進(jìn)行分組,直至高位。若高位不足4位,則補(bǔ)0使其成為4位二進(jìn)制數(shù),其小數(shù)部分由小數(shù)點(diǎn)向右每4位為一組進(jìn)行分組,不足4位則末位補(bǔ)0使其成為4位二進(jìn)制數(shù)。例如:1000101B=01000101B=45H

例如:100101.101B=00100101.1010B=25.AH

需要將十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)時(shí),則為上述方法的逆過(guò)程。例如:45.AH=01000101.1010B7ABF

例如:7ABFH=0111101010111111B

7

A

B

F1.1.3編碼1.二進(jìn)制數(shù)的編碼(1)機(jī)器數(shù)與真值一個(gè)數(shù)在計(jì)算機(jī)中的表示形式叫做機(jī)器數(shù),而這個(gè)數(shù)本身(含符號(hào)“+”或“-”)稱為機(jī)器數(shù)的真值。通常在機(jī)器數(shù)中,用最高位“1”表示負(fù)數(shù),“0”表示正數(shù)(2)原碼、反碼和補(bǔ)碼

1)原碼。正數(shù)的符號(hào)位用“0”表示,負(fù)數(shù)的符號(hào)位用“1”表示,其數(shù)值部分隨后表示,稱為原碼。

2)反碼、補(bǔ)碼。在計(jì)算機(jī)中,任何有符號(hào)數(shù)都是以補(bǔ)碼形式存儲(chǔ)的。對(duì)于正數(shù),其反碼、補(bǔ)碼與原碼相同。對(duì)于負(fù)數(shù),其反碼為:原碼的符號(hào)位不變,其數(shù)值部分按位取反。負(fù)數(shù)的補(bǔ)碼為:原碼的符號(hào)位不變,其數(shù)值部分按位取反后再加1(即負(fù)數(shù)的反碼+1),稱為求補(bǔ)。如果已知一個(gè)負(fù)數(shù)的補(bǔ)碼,可以對(duì)該補(bǔ)碼再進(jìn)行求補(bǔ)碼(即一個(gè)數(shù)的補(bǔ)碼的補(bǔ)碼),即可得到該數(shù)的原碼。2.二—十進(jìn)制編碼二—十進(jìn)制編碼又稱BCD編碼,既具有二進(jìn)制數(shù)的形式,以便于存儲(chǔ),又具有十進(jìn)制數(shù)的特點(diǎn),以便于進(jìn)行運(yùn)算和顯示結(jié)果。在BCD碼中,用4位二進(jìn)制代碼表示1位十進(jìn)制數(shù)。3.ASCII碼

ASCII(AmericanStandardCodeforInformation)碼是一種國(guó)際標(biāo)準(zhǔn)信息交換碼,它利用7位二進(jìn)制代碼來(lái)表示字符,再加上1位校驗(yàn)位,故在計(jì)算機(jī)中用1個(gè)字節(jié)8位二進(jìn)制數(shù)來(lái)表示一個(gè)字符,這樣有利于對(duì)這些數(shù)據(jù)進(jìn)行處理及傳輸。1.2計(jì)算機(jī)系統(tǒng)組成1.2.1計(jì)算機(jī)硬件組成1.計(jì)算機(jī)的基本結(jié)構(gòu)一臺(tái)計(jì)算機(jī)的基本結(jié)構(gòu)如圖1-1所示。它由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五部分組成。圖1-1

計(jì)算機(jī)的基本結(jié)構(gòu)框圖2.微型計(jì)算機(jī)隨著大規(guī)模集成電路技術(shù)的迅速發(fā)展,

把運(yùn)算器、控制器和通用寄存器集成在一塊半導(dǎo)體芯片上,稱其為微處理器(機(jī)),也稱CPU。微處理器主要包括算術(shù)邏輯運(yùn)算部件(ALU)、累加器、控制邏輯部件、程序計(jì)數(shù)器及通用寄存器等組成。3.存儲(chǔ)器存儲(chǔ)器具有記憶功能,用來(lái)存放數(shù)據(jù)和程序。計(jì)算機(jī)中的存儲(chǔ)器主要有隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)兩種。存儲(chǔ)器的容量常以字節(jié)為單位表示如下:

1Byte=8bit

1024B=1KB1024KB=1MB

1024MB=1GB1024GB=1TB4.總線總線是連接計(jì)算機(jī)各部件之間的一組公共的信號(hào)線。其可分為系統(tǒng)總線和外總線。系統(tǒng)總線應(yīng)包括:地址總線(AB)控制總線(CB)數(shù)據(jù)總線(DB)5.輸入輸出(I/O)接口

CPU通過(guò)接口電路與外部輸入、輸出設(shè)備交換信息。1.2.2計(jì)算機(jī)軟件系統(tǒng)根據(jù)軟件功能的不同,軟件可分為系統(tǒng)軟件和應(yīng)用軟件。使用和管理計(jì)算機(jī)的軟件稱為系統(tǒng)軟件。應(yīng)用軟件是由用戶在計(jì)算機(jī)系統(tǒng)軟件資源的平臺(tái)上,為解決實(shí)際問(wèn)題所編寫的應(yīng)用程序。1.2.3計(jì)算機(jī)語(yǔ)言及程序設(shè)計(jì)計(jì)算機(jī)語(yǔ)言是實(shí)現(xiàn)程序設(shè)計(jì)、以便人與計(jì)算機(jī)進(jìn)行信息交流的必備工具,又稱程序設(shè)計(jì)語(yǔ)言。1.計(jì)算機(jī)語(yǔ)言計(jì)算機(jī)語(yǔ)言可分為三類:機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言。機(jī)器語(yǔ)言(又稱二進(jìn)制目標(biāo)代碼)是CPU硬件惟一能夠直接識(shí)別的語(yǔ)言,在設(shè)計(jì)CPU時(shí)就已經(jīng)確定其代碼的含義。匯編語(yǔ)言使用人們便于記憶的符號(hào)來(lái)描述與之相應(yīng)的機(jī)器語(yǔ)言,機(jī)器語(yǔ)言的每一條指令,都對(duì)應(yīng)一條匯編語(yǔ)言的指令。高級(jí)語(yǔ)言(如C51),是一種接近人們習(xí)慣的程序設(shè)計(jì)語(yǔ)言,它使用人們所熟悉的文字、符號(hào)及數(shù)學(xué)表達(dá)式來(lái)編寫程序,使程序的編寫和操作都顯得十分方便。2.程序設(shè)計(jì)程序設(shè)計(jì)的一般步驟。

1)確定數(shù)據(jù)結(jié)構(gòu)

2)確定算法

3)編程

4)調(diào)試

5)整理源程序并總結(jié)資料。3.算法所謂算法,是為解決某一特定的問(wèn)題,所給出的一系列確切的、有限的操作步驟。在算法設(shè)計(jì)中應(yīng)遵循下面幾個(gè)準(zhǔn)則:

1)可執(zhí)行性。

2)確定性。3)有窮性。

4)輸入。

5)輸出。4.結(jié)構(gòu)化程序設(shè)計(jì)

結(jié)構(gòu)化程序設(shè)計(jì)步驟:

1)自頂向下,逐步求精。

2)模塊化設(shè)計(jì)。

3)每一個(gè)模塊可以獨(dú)立地進(jìn)行編程﹑調(diào)試。

4)除最上層外,每層功能模塊可接受上層調(diào)用。結(jié)構(gòu)化程序的每個(gè)模塊應(yīng)由3種基本結(jié)構(gòu)組成:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。1)順序結(jié)構(gòu)程序中的語(yǔ)句按先后順序逐條執(zhí)行。2)選擇結(jié)構(gòu)在執(zhí)行程序中的選擇結(jié)構(gòu)語(yǔ)句時(shí),該語(yǔ)句的執(zhí)行將根據(jù)不同的條件執(zhí)行不同分支的語(yǔ)句。3)循環(huán)結(jié)構(gòu)在執(zhí)行程序中的循環(huán)結(jié)構(gòu)語(yǔ)句時(shí),該語(yǔ)句將根據(jù)各自的條件,對(duì)循環(huán)結(jié)構(gòu)所限定的語(yǔ)句(即循環(huán)體)重復(fù)執(zhí)行多次或零次。循環(huán)結(jié)構(gòu)特點(diǎn)是:當(dāng)條件滿足時(shí),就執(zhí)行循環(huán)體,否則就退出循環(huán)結(jié)構(gòu)。1.3單片機(jī)與嵌入式系統(tǒng)組成1.3.1單片機(jī)及其發(fā)展概況1.什么是單片機(jī)單片機(jī)(Single-Chip-Microcomputer)又稱單片微控制器,其基本結(jié)構(gòu)是將微型計(jì)算機(jī)的基本功能部件:中央處理機(jī)(CPU)、存儲(chǔ)器、輸入接口、輸出接口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)等全部集成在一個(gè)半導(dǎo)體芯片上。2.單片機(jī)的發(fā)展

1976年Intel公司推出MCS-48系列8位單片機(jī),以體積小、功能全、價(jià)格低等自身的魅力,得到了廣泛的應(yīng)用,成為單片機(jī)發(fā)展過(guò)程中的一個(gè)重要標(biāo)志。世界各地廠商已相繼研制出大約50個(gè)系列300多個(gè)品種的單片機(jī)產(chǎn)品。代表產(chǎn)品有Intel公司的MCS-51系列機(jī)(8位機(jī))、Motorala公司的MC6801系列機(jī)、Zilog公司的Z-8系列機(jī)等。1.3.2單片機(jī)的特點(diǎn)和應(yīng)用1.單片機(jī)的應(yīng)用特點(diǎn)(1)具有較高的性能價(jià)格比。(2)體積小,可靠性高。(3)控制功能強(qiáng)。(4)使用方便、容易產(chǎn)品化。2.單片機(jī)的應(yīng)用領(lǐng)域單片機(jī)由于其體積小、功耗低、價(jià)格低廉,且具有邏輯判斷、定時(shí)計(jì)數(shù)、程序控制等多種功能,廣泛應(yīng)用于智能儀表、可編程序控制器、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過(guò)程控制等領(lǐng)域。單片機(jī)最常用的場(chǎng)合:(1)智能儀器。(2)工業(yè)控制。(3)家用電器。(4)機(jī)電一體化。1.3.3嵌入式系統(tǒng)從使用的角度來(lái)說(shuō),計(jì)算機(jī)應(yīng)用可分為兩類:一類是應(yīng)用廣泛的獨(dú)立使用的計(jì)算機(jī)系統(tǒng)(如個(gè)人計(jì)算機(jī)、工作站等)。一類是嵌入式計(jì)算機(jī)系統(tǒng)。所謂嵌入式系統(tǒng),是“以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁減、功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)”。嵌入式系統(tǒng)的重要特征:

1)系統(tǒng)內(nèi)核小

2)專用性強(qiáng)

3)系統(tǒng)精簡(jiǎn)

4)高實(shí)時(shí)性

5)嵌入式軟件開(kāi)發(fā)走向標(biāo)準(zhǔn)化

6)嵌入式系統(tǒng)開(kāi)發(fā)需要開(kāi)發(fā)工具和環(huán)境1.3.4單片機(jī)應(yīng)用系統(tǒng)的組成單片機(jī)應(yīng)用系統(tǒng)包括單片機(jī)硬件系統(tǒng)和軟件系統(tǒng)。單片機(jī)的硬件系統(tǒng)包括:●單片機(jī)系統(tǒng)●單片機(jī)應(yīng)用系統(tǒng)硬件組成單片機(jī)的系統(tǒng)軟件構(gòu)成有兩種模式:●監(jiān)控程序:用非常緊湊的代碼,編寫系統(tǒng)的底層軟件。這些軟件實(shí)現(xiàn)的功能,往往是實(shí)現(xiàn)系統(tǒng)硬件的管理及驅(qū)動(dòng),并內(nèi)嵌一個(gè)用于系統(tǒng)的開(kāi)機(jī)初始化等功能的引導(dǎo)(BOOT)模塊?!癫僮飨到y(tǒng):今天已有許多種適合于8位至32位單片機(jī)的操作系統(tǒng)進(jìn)入實(shí)用階段,在操作系統(tǒng)的支持下,嵌入式系統(tǒng)會(huì)具有更好的技術(shù)性能。1.4一個(gè)簡(jiǎn)單的單片機(jī)應(yīng)用實(shí)例

在設(shè)計(jì)一個(gè)單片機(jī)應(yīng)用系統(tǒng)(嵌入式系統(tǒng))時(shí),一般來(lái)說(shuō)要經(jīng)過(guò)以下步驟:①分析問(wèn)題,明確任務(wù)。②總體設(shè)計(jì),擬定出性能/價(jià)格比最高的方案。③硬件設(shè)計(jì)。④軟件設(shè)計(jì)。⑤編譯、仿真及調(diào)試。

⑥程序下載運(yùn)行。例如,某廣告燈,要求8個(gè)燈循環(huán)點(diǎn)亮,即8個(gè)燈點(diǎn)亮順序循環(huán)左移(或右移),循環(huán)不止(這里為了簡(jiǎn)化電路,用8個(gè)發(fā)光二極管替代廣告燈)。分析問(wèn)題,明確任務(wù)。(略)總體設(shè)計(jì)。(略)圖1-10廣告燈控制硬件電路③硬件設(shè)計(jì)。圖1-10廣告燈控制硬件電路圖1-10廣告燈控制硬件電路由于功能簡(jiǎn)單,故可直接由單片機(jī)的輸出口P1并行輸出驅(qū)動(dòng)8個(gè)LED發(fā)光二極管,其硬件電路如圖1-10所示。在圖1-10中,被控對(duì)象是8個(gè)發(fā)光二極管,采用共陽(yáng)極接法,8個(gè)發(fā)光二極管的陰極分別由P1.0~P1.7(即單片機(jī)端口P1的8位輸入、輸出端)控制。若P1的某位輸出為“0”(低電平),相應(yīng)位的發(fā)光二極管的陰極為低電平,則該管加正向電壓被點(diǎn)亮發(fā)光。若P1口的某位輸出為“1”,則相應(yīng)位的發(fā)光二極管截止而熄滅。④軟件設(shè)計(jì)。根據(jù)以上原理,針對(duì)其硬件電路可編程實(shí)現(xiàn):使P1口每一位依次輸出“0”(低電平),點(diǎn)亮相應(yīng)位的發(fā)光二極管,并經(jīng)軟件延時(shí)后,將“0”(低電平)左移一位后輸出,不斷循環(huán)。匯編程序如下:ORG0000HMOV A,#0FEH ;FEH為點(diǎn)亮第一個(gè)發(fā)光二極管的代碼LOOP:MOVP1,A;點(diǎn)亮P1.0位控制的發(fā)光二極管

LCALL DELAY;調(diào)用延遲一段時(shí)間的子程序

RL A;“0”左移一位

SJMP LOOP;不斷循環(huán)DELAY:MOVR1,#0FFH;延時(shí)子程序入口

LP:MOVR2,#80HLP1:NOP

NOPDJNZR2,LP1DJNZR1,LPRET ;子程序返回END

⑤編譯、仿真及調(diào)試。利用單片機(jī)開(kāi)發(fā)系統(tǒng)編譯、仿真、調(diào)試此程序,并生成.hex文件。對(duì)于初學(xué)者來(lái)講,可以使用Proteus進(jìn)行仿真。⑥程序下載運(yùn)行。將程序?qū)?yīng)的.hex文件寫入電路中單片機(jī)的程序存儲(chǔ)器ROM中,即可投入使用。AT公司的89系列單片機(jī)需要專門編程器寫入程序;STC系列單片機(jī)可以由上位機(jī)在線通過(guò)串口(P3.0/P3.1)直接下載用戶程序,然后對(duì)單片機(jī)電路直接調(diào)試運(yùn)行成功后,8個(gè)LED發(fā)光二極管燈順序左移點(diǎn)亮,循環(huán)不止。

本章結(jié)束

謝謝使用

第2章MCS-51單片機(jī)硬件結(jié)構(gòu)2.1MCS-51單片機(jī)總體結(jié)構(gòu)2.2MCS-51存儲(chǔ)結(jié)構(gòu)及位處理器2.3MCS-51工作方式和時(shí)序2.4MCS-51單片機(jī)的時(shí)序2.5單片機(jī)最小系統(tǒng)本章重點(diǎn)內(nèi)容:1MCS-51單片機(jī)硬件的功能結(jié)構(gòu)及內(nèi)部組成2單片機(jī)引腳功能及應(yīng)用特點(diǎn)3片內(nèi)數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器的組織特點(diǎn)4單片機(jī)的工作方式和典型的CPU時(shí)序2.1MCS-51單片機(jī)總體結(jié)構(gòu)

MCS-51系列單片機(jī)可分為兩大系列:51子系列(普通型)和52子系列(增強(qiáng)型)。51子系列單片機(jī)的典型產(chǎn)品有8031、8051、8751、80C51、80C31、89C51、89S51等。它們的結(jié)構(gòu)基本相同,其主要差別反映在片內(nèi)存儲(chǔ)器的配置上有所不同。52子系列及兼容單片機(jī)的典型產(chǎn)品有8032、8052、8752、89C52、89S52等,其中,8052、8752內(nèi)含8KB的掩模ROM程序存儲(chǔ)器和256B的RAM數(shù)據(jù)存儲(chǔ)器。增強(qiáng)型的存儲(chǔ)容量為普通型的一倍。2.1.1MCS-51單片機(jī)總體結(jié)構(gòu)框圖及功能8051單片機(jī)內(nèi)部由CPU、4KB的ROM、128B的RAM、4個(gè)8位的I/O并行端口、一個(gè)串行口、兩個(gè)16位定時(shí)/計(jì)數(shù)器及中斷系統(tǒng)等組成。其內(nèi)部基本結(jié)構(gòu)框圖如圖2-1所示。圖2-2為8051單片機(jī)系統(tǒng)結(jié)構(gòu)原理框圖。圖2-18051單片機(jī)內(nèi)部基本結(jié)構(gòu)框圖圖2-28051單片機(jī)系統(tǒng)結(jié)構(gòu)原理框圖下面對(duì)各功能部件的作用分述如下:1.CPUCPU是單片機(jī)內(nèi)部的核心部件,是單片機(jī)的指揮和控制中心。CPU可分為運(yùn)算器和控制器兩大部分。(1)控制器控制器的功能是:接受來(lái)自程序存儲(chǔ)器ROM存儲(chǔ)單元的指令,并對(duì)其進(jìn)行譯碼,通過(guò)定時(shí)和控制電路,按時(shí)序規(guī)定發(fā)出指令功能所需要的各種(內(nèi)部和外部)控制信息,使各部分協(xié)調(diào)工作,完成指令功能所需的操作??刂破髦饕ǔ绦蛴?jì)數(shù)器、指令寄存器、指令譯碼器及定時(shí)控制電路等。(2)運(yùn)算器ALU運(yùn)算器的功能是:對(duì)數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算和邏輯運(yùn)算。計(jì)算機(jī)對(duì)任何數(shù)據(jù)的加工、處理必須由運(yùn)算器完成。2.RAMRAM為單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器。其存儲(chǔ)空間包括隨機(jī)存儲(chǔ)器區(qū)、寄存器區(qū)、特殊功能寄存器及位尋址區(qū)。3.ROMROM為單片機(jī)內(nèi)部程序存儲(chǔ)器。4.并行I/O口P0~P3是四個(gè)8位并行I/O口,每個(gè)口既可作為輸入,也可作為輸出。單片機(jī)在與外部存儲(chǔ)器及I/O端口設(shè)備交換信息時(shí),必須由P0~P3口完成。5.定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器用于定時(shí)和對(duì)外部事件進(jìn)行計(jì)數(shù)。6.中斷系統(tǒng)MCS-51單片機(jī)有5個(gè)中斷源,中斷處理系統(tǒng)靈活、方便,使單片機(jī)處理問(wèn)題的靈活性和工作的效率大大提高。7.串行接口串行接口提供對(duì)數(shù)據(jù)各位按序一位一位地傳送。8.時(shí)鐘電路OSC時(shí)鐘電路用于產(chǎn)生單片機(jī)中最基本的時(shí)間單位。2.1.2MCS-51引腳功能MCS-51單片機(jī)采用40腳雙列直插式封裝,其引腳排列及邏輯符號(hào)如圖2-3所示。1.主電源引腳VCC和VSSVCC:接主電源+5V。VSS:電源接地端。2.時(shí)鐘電路引腳XTAL1和XTAL2XTAL1是片內(nèi)振蕩器反相放大器的輸入端,XTAL2是片內(nèi)振蕩器反相放大器的輸出端,也是內(nèi)部時(shí)鐘發(fā)生器的輸入端。圖2-3MCS-51單片機(jī)引腳圖3.控制信號(hào)引腳(1)RST/VPDRST/VPD為復(fù)位/備用電源輸入端。(2)ALE/ALE/為低8位地址鎖存使能輸出/編程脈沖輸入端。(3)為外部程序存儲(chǔ)器控制信號(hào),即讀選通信號(hào)(4)/VPP為外部程序存儲(chǔ)器允許訪問(wèn)/編程電源輸入。

4.并行I/O口P0~P4端口引腳(1)P0口(P0.0~P0.7)P0口內(nèi)部是一個(gè)8位漏極開(kāi)路型雙向I/O端口。P0口在作通用I/O口使用時(shí)應(yīng)外接10千歐的上拉電阻。在端口進(jìn)行輸入操作(即CPU讀取端口數(shù)據(jù))前,應(yīng)先向端口的輸出鎖存器寫“1”。(2)P1口(P1.0~P1.7)P1口是一個(gè)內(nèi)部帶上拉電阻的8位準(zhǔn)雙向I/O端口。當(dāng)P1輸出高電平時(shí),能向外部提供拉電流負(fù)載,因此,不需再外接上拉電阻。

(3)P2口(P2.0~P2.3)P2口也是一個(gè)內(nèi)部帶上拉電阻的8位準(zhǔn)雙向I/O端口。當(dāng)CPU訪問(wèn)外部存儲(chǔ)器時(shí),P2口自動(dòng)用于輸出高8位地址,與P0口的低8位地址一起形成外部存儲(chǔ)器的16位地址總線。(4)P3口(P2.0~P2.7)P3口是一個(gè)內(nèi)部帶上拉電阻的8位多功能雙向I/O端口。2.2MCS-51存儲(chǔ)結(jié)構(gòu)及位處理器2.2.1MCS-51存儲(chǔ)器的特點(diǎn)MCS-51的存儲(chǔ)器把程序和數(shù)據(jù)的存儲(chǔ)空間嚴(yán)格區(qū)分開(kāi)。MCS-51存儲(chǔ)器的劃分方法如下:(1)從物理結(jié)構(gòu)上劃分,有4個(gè)存儲(chǔ)空間。片內(nèi)程序存儲(chǔ)器。片外程序存儲(chǔ)器。片內(nèi)數(shù)據(jù)存儲(chǔ)器。片外數(shù)據(jù)存儲(chǔ)器。(2)從邏輯上劃分,有3個(gè)存儲(chǔ)器地址空間。片內(nèi)外統(tǒng)一編址的64KB的程序存儲(chǔ)器地址空間。片內(nèi)(128+128)B數(shù)據(jù)存儲(chǔ)器地址空間。片外64KB的數(shù)據(jù)存儲(chǔ)器地址空間。在訪問(wèn)不同的邏輯存儲(chǔ)空間時(shí),MCS-51提供了不同形式的指令:

MOV指令用于訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器。

MOVC用于訪問(wèn)片內(nèi)外程序存儲(chǔ)器。

MOVX用于訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器。MCS-51(8051)存儲(chǔ)結(jié)構(gòu)如圖2-4所示。圖2-4MCS-51(8051)存儲(chǔ)結(jié)構(gòu)2.2.2程序存儲(chǔ)器程序存儲(chǔ)器用于存放已編制好的程序及程序中用到的常數(shù)。程序存儲(chǔ)器由ROM構(gòu)成,單片機(jī)掉電后ROM內(nèi)容不會(huì)丟失。2.2.3數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)存儲(chǔ)器用于存放程序運(yùn)算的中間結(jié)果、狀態(tài)標(biāo)志位等。數(shù)據(jù)存儲(chǔ)器由RAM構(gòu)成,一旦掉電,其數(shù)據(jù)將丟失。1.通用寄存器區(qū)在低128B的RAM區(qū)中,將地址00~1FH共32個(gè)單元設(shè)為工作寄存器區(qū),這32個(gè)單元又分為4組,每組由8個(gè)單元按序組成通用寄存器R0~R7。通用寄存器R0~R7不僅用于暫存中間結(jié)果,而且是CPU指令中尋址方式不可缺少的工作單元。2.可位尋址區(qū)地址為20H~2FH的16個(gè)RAM(字節(jié))單元,既可以像普通RAM單元按字節(jié)地址進(jìn)行存取,又可以按位進(jìn)行存取,這16個(gè)字節(jié)共有128(16×8)個(gè)二進(jìn)制位,每一位都分配一個(gè)位地址,編址為00H~7FH。3.只能字節(jié)尋址的RAM區(qū)在30H~7FH區(qū)的80個(gè)RAM單元為用戶RAM區(qū),只能按字節(jié)存取。所以,30H~7FH區(qū)是真正的數(shù)據(jù)緩沖區(qū)。2.2.4專用寄存器區(qū)(SFR)在片內(nèi)數(shù)據(jù)存儲(chǔ)器的80H~FFH單元(高128B)中,有21個(gè)單元作為專用寄存器(SFR),又稱特殊功能寄存器。下面對(duì)部分特殊功能寄存器(SFR)作一簡(jiǎn)介:(1)累加器ACC:字節(jié)地址為E0H,并可對(duì)其D0~D7各位進(jìn)行位尋址。D0~D7位地址相應(yīng)為E0H~E7H。(2)寄存器B:字節(jié)地址為F0H,并可對(duì)其D0~D7各位進(jìn)行位尋址。D0~D7位地址相應(yīng)為F0H~F7H。主要用于暫存數(shù)據(jù)。(3)程序狀態(tài)字PSW:字節(jié)地址為D0H,并可對(duì)其D0~D7各位進(jìn)行位尋址。D0~D7數(shù)據(jù)位的位地址相應(yīng)為D0H~D7H。主要用于寄存當(dāng)前指令執(zhí)行后的某些狀態(tài)信息。(4)堆棧指針SP:字節(jié)地址為81H,不能進(jìn)行位尋址。(5)端口P1:字節(jié)地址為90H,并可對(duì)其D0~D7各位進(jìn)行位尋址。D0~D7數(shù)據(jù)位的位地址相應(yīng)為90H~97H(也可表示為P1.0~P1.7)。2.2.5位處理器MCS-51片內(nèi)CPU還是一個(gè)性能優(yōu)異的位處理器,也就是說(shuō)MCS-51實(shí)際上又是一個(gè)完整而獨(dú)立的1位單片機(jī)(也稱布爾處理機(jī))。該布爾處理機(jī)除了有自己的CPU、位寄存器、位累加器(即進(jìn)位標(biāo)志Cy)、I/O口和位尋址空間外,還有專供位操作的指令系統(tǒng),可以直接尋址對(duì)位存儲(chǔ)單元和SFR的某一位進(jìn)行操作。MCS-51單片機(jī)對(duì)于位操作(布爾處理)有置位、復(fù)位、取反、測(cè)試轉(zhuǎn)移、傳送、邏輯與和邏輯或運(yùn)算等功能。2.3MCS-51工作方式MCS-51單片機(jī)的工作方式包括:復(fù)位方式、程序執(zhí)行方式、節(jié)電方式和EPROM的編程和校驗(yàn)方式,在不同的情況下,其工作方式也不相同。2.3.1復(fù)位方式單片機(jī)在啟動(dòng)運(yùn)行時(shí)需要復(fù)位,使CPU以及其他功能部件處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作,單片機(jī)應(yīng)用程序必須以此作為設(shè)計(jì)前提。2.3.2程序執(zhí)行工作方式程序執(zhí)行方式通常可分為連續(xù)執(zhí)行和單步執(zhí)行兩種工作方式。1.連續(xù)執(zhí)行方式連續(xù)執(zhí)行方式是所有單片機(jī)執(zhí)行工作程序所需要的一種工作方式。2.單步執(zhí)行方式用戶在調(diào)試程序時(shí),常常要一條一條地執(zhí)行程序中的每一條指令。單步執(zhí)行方式就是為用戶調(diào)試程序而設(shè)計(jì)出的一種工作方式。2.3.3節(jié)電工作方式節(jié)電工作方式是一種能減少單片機(jī)功耗的工作方式,通常有空閑方式和掉電方式兩種。1.掉電方式單片機(jī)在運(yùn)行過(guò)程中,如果發(fā)生掉電,片內(nèi)RAM和SFR中的信息將會(huì)丟失。為防止信息丟失,可以把一組備用電源加到RST/VPD端,當(dāng)VCC上的電壓低于VPD上的電壓時(shí),備用電源通過(guò)VPD端,以低功耗保持內(nèi)部RAM和SFR中的數(shù)據(jù)。2.空閑方式

進(jìn)入空閑方式后,CPU停止工作,但中斷、串行口和定時(shí)器/計(jì)數(shù)器可以繼續(xù)工作。2.4MCS-51單片機(jī)的時(shí)序時(shí)序就是計(jì)算機(jī)指令執(zhí)行時(shí)各種微操作在時(shí)間上的順序關(guān)系。2.4.1時(shí)鐘計(jì)算機(jī)執(zhí)行指令的過(guò)程可分為取指令、分析指令和執(zhí)行指令三個(gè)步驟,每個(gè)步驟又由許多微操作所組成,這些微操作必須在一個(gè)統(tǒng)一的時(shí)鐘脈沖的控制下才能按照正確的順序執(zhí)行。時(shí)鐘脈沖由時(shí)鐘振蕩器產(chǎn)生。2.4.2CPU時(shí)序單片機(jī)的時(shí)序是指CPU在執(zhí)行指令時(shí)所需控制信號(hào)的時(shí)間順序。時(shí)序信號(hào)是以時(shí)鐘脈沖為基準(zhǔn)產(chǎn)生的。CPU發(fā)出的時(shí)序信號(hào)有兩類:一類用于片內(nèi)各功能部件的控制,另一類信號(hào)通過(guò)單片機(jī)的引腳送到外部。1.時(shí)鐘周期、機(jī)器周期和指令周期(1)時(shí)鐘周期時(shí)鐘周期也稱振蕩周期,即振蕩器的振蕩頻率fosc的倒數(shù),是時(shí)序中最小的時(shí)間單位。(2)機(jī)器周期執(zhí)行一條指令的過(guò)程可分為若干個(gè)階段,每一階段完成一規(guī)定的操作,完成一個(gè)規(guī)定操作所需要的時(shí)間稱為一個(gè)機(jī)器周期。(3)指令周期指令周期定義為執(zhí)行一條指令所用的時(shí)間。2.MCS-51單片機(jī)的取指/執(zhí)行時(shí)序取指令階段把程序計(jì)數(shù)器PC中的指令地址送到程序存儲(chǔ)器,選中指定單元并從中取出需要執(zhí)行的指令。指令執(zhí)行階段對(duì)指令操作碼進(jìn)行譯碼,以產(chǎn)生一系列控制信號(hào)完成指令的執(zhí)行。3.訪問(wèn)外部ROM時(shí)序4.讀外部RAM時(shí)序訪問(wèn)外部RAM的操作有兩種情況,即讀操作和寫操作,兩種操作的方式基本相同。2.5單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)硬件電路包括電源電路、時(shí)鐘電路、復(fù)位電路及擴(kuò)展部分(需要時(shí))等組成。1.必須給單片機(jī)提供穩(wěn)定可靠的工作電源。2.必須為單片機(jī)系統(tǒng)配置一個(gè)穩(wěn)定可靠的電源供電模塊。3.時(shí)鐘電路即振蕩電路,用于產(chǎn)生單片機(jī)最基本的時(shí)間單位。4.復(fù)位電路用于產(chǎn)生復(fù)位信號(hào),使單片機(jī)從固定的起始狀態(tài)開(kāi)始工作。本章結(jié)束

謝謝使用第3章MCS-51指令系統(tǒng)及匯編語(yǔ)言程序設(shè)計(jì)3.1指令系統(tǒng)簡(jiǎn)介3.2尋址方式3.3指令系統(tǒng)3.4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)3.5程序設(shè)計(jì)實(shí)例指令系統(tǒng)是一種CPU所能直接執(zhí)行的所有命令的集合,CPU的主要功能是由它的指令系統(tǒng)來(lái)體現(xiàn)的。3.1指令系統(tǒng)簡(jiǎn)介MCS-51系列單片機(jī)指令系統(tǒng)共有111條指令,其中有49條單字節(jié)指令、45條雙字節(jié)指令和17條三字節(jié)指令。MCS-51的指令系統(tǒng)中有64條指令的執(zhí)行時(shí)間為一個(gè)機(jī)器周期(12個(gè)振蕩周期),45條指令的執(zhí)行時(shí)間為兩個(gè)機(jī)器周期。3.1.1指令格式MCS-51指令系統(tǒng)中的每一條指令都有兩級(jí)指令格式:

CPU可直接識(shí)別并執(zhí)行的機(jī)器語(yǔ)言指令。匯編語(yǔ)言指令(簡(jiǎn)稱匯編指令)。機(jī)器語(yǔ)言指令由二進(jìn)制數(shù)“0”和“1”編碼而成,也稱目標(biāo)代碼,執(zhí)行速度最快。匯編語(yǔ)言指令是在機(jī)器語(yǔ)言指令的基礎(chǔ)上,用英文單詞或英文單詞縮寫表示機(jī)器語(yǔ)言指令的操作碼(助記符),用符號(hào)表示操作數(shù)或操作數(shù)的地址。匯編語(yǔ)言指令實(shí)際上是符號(hào)化的機(jī)器語(yǔ)言。MCS-51匯編語(yǔ)言指令格式由以下幾個(gè)部分組成:[標(biāo)號(hào):]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]其中,[]中的項(xiàng)表示為可選項(xiàng)。標(biāo)號(hào):又稱為指令地址符號(hào),一般是由1~6個(gè)字符組成,以字母開(kāi)頭的字母數(shù)字串,與操作碼之間用冒號(hào)分開(kāi)。操作碼:是由助記符所表示的指令的操作功能。操作數(shù):是指參加操作的數(shù)據(jù)或數(shù)據(jù)的地址。注釋:是為該條指令作的說(shuō)明,以便于閱讀。操作碼是指令的核心,不可缺少,其他幾項(xiàng)根據(jù)不同指令為可選項(xiàng)。3.1.2指令分類及符號(hào)說(shuō)明1.指令分類MSC-51的指令系統(tǒng)共有111條指令,分為五大類:(1)數(shù)據(jù)傳送指令:片內(nèi)RAM、片外RAM、程序存儲(chǔ)器的傳送指令,交換及堆棧指令。(2)算術(shù)運(yùn)算類:加法、帶進(jìn)位加、減、乘、除、加1、減1指令。(3)邏輯運(yùn)算類:邏輯與、或、異或、測(cè)試及移位指令。(4)控制程序轉(zhuǎn)移類:無(wú)條件轉(zhuǎn)移與調(diào)用、條件轉(zhuǎn)移、空操作指令。(5)布爾變量操作類:分為位數(shù)據(jù)傳送、位與、位或、位轉(zhuǎn)移指令。2.符號(hào)說(shuō)明

#data:表示指令中的8位立即數(shù)(data),“#”表示后面的數(shù)據(jù)是立即數(shù)。#data16:表示指令中的16位立即數(shù)。direct:表示8位內(nèi)部數(shù)據(jù)存儲(chǔ)器單元的地址。Rn:n=0~7,表示當(dāng)前選中的寄存器區(qū)的8個(gè)工作寄存器R0~R7。Ri:i=0或1,表示當(dāng)前選中的寄存器區(qū)中的2個(gè)寄存器R0、R1,可作地址指針即間址寄存器。Addr11:表示11位的目的地址。Addr16:表示16位的目的地址。rel:表示一個(gè)補(bǔ)碼形式的8位帶符號(hào)的偏移量。用于SJMP和所有的條件轉(zhuǎn)移指令中。DPTR:為數(shù)據(jù)指針,可用作16位的地址寄存器。bit:內(nèi)部RAM或?qū)S眉拇嫫髦械闹苯訉ぶ肺弧?:位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反。A:累加器ACC。B:專用寄存器,用于MUL和DIV指令中。C:進(jìn)位/借位標(biāo)志位,也可作為布爾處理機(jī)中的累加器。@:間址寄存器或基址寄存器的前綴。$:當(dāng)前指令的首地址?!罕硎緦⒓^右邊的內(nèi)容傳送至箭頭的左邊。3.2尋址方式所謂尋址方式就是尋找或獲得操作數(shù)的方式。MCS-51指令系統(tǒng)的尋址方式有以下7種:1.立即尋址在立即尋址方式中,操作數(shù)直接出現(xiàn)在指令中。操作數(shù)前加“#”號(hào)表示,也稱立即數(shù)。指令的操作數(shù)可以是8位或16位數(shù)。例如:MOVA,#26H ;A←26H指令執(zhí)行結(jié)果:(A)=26H,即把立即數(shù)26H直接送到A中。2.直接尋址在直接尋址方式中,操作數(shù)的單元地址直接出現(xiàn)在指令中,這一尋址方式可進(jìn)行內(nèi)部存儲(chǔ)單元的訪問(wèn)。它包括:(1)特殊功能寄存器地址空間。這也是惟一可尋址特殊功能寄存器(SFR)的尋址方式。例如:MOVTCON,A指令執(zhí)行結(jié)果:A的內(nèi)容傳送給寄存器TCON。(2)內(nèi)部RAM的低128字節(jié)例如:MOVA,76H指令執(zhí)行結(jié)果:內(nèi)部RAM地址為76H單元的內(nèi)容傳送給A。3.寄存器尋址在寄存器尋址方式中,寄存器中的內(nèi)容就是操作數(shù)。例如:MOVA,R1 ;A←(R1)指令執(zhí)行結(jié)果:把寄存器R1中的內(nèi)容送到累加器A中。4.寄存器間接尋址在寄存器間接尋址方式中,指定寄存器中的內(nèi)容是操作數(shù)的地址,該地址對(duì)應(yīng)存儲(chǔ)單元的內(nèi)容才是操作數(shù)。例如MOVA,@R0該指令的功能是將R0所指3FH單元中內(nèi)容45H送A中,執(zhí)行結(jié)果:(A)=45H。16位數(shù)據(jù)指針DPTR作為間址寄存器。訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器時(shí),用當(dāng)前工作寄存器R0和R1作間址,即@R0、@R1,在堆棧操作中則用堆棧指針SP作間址。例如:MOVXA,@R1MOVX@DPTR,A5.變址尋址變址尋址方式是以程序指針PC或數(shù)據(jù)指針DPTR為基址寄存器,以累加器A作為變址寄存器,兩者內(nèi)容相加(即基地址+偏移量)形成16位的操作數(shù)地址,變址尋址方式主要用于訪問(wèn)固化在程序存儲(chǔ)器中的某個(gè)字節(jié)。變址尋址方式有兩類:(1)用程序指針PC作基地址,A作變址,形成操作數(shù)地址:@A+PC。(2)用數(shù)據(jù)指針DPTR作基地址,A作變址,形成操作數(shù)地址:@A+DPTR。6.相對(duì)尋址相對(duì)尋址是以程序計(jì)數(shù)器PC的當(dāng)前值作為基地址,與指令中的第二字節(jié)給出的相對(duì)偏移量rel進(jìn)行相加,所得和為程序的轉(zhuǎn)移地址。7.位尋址MCS-51系列單片機(jī)中有獨(dú)立的性能優(yōu)越的布爾處理器,包括位變量操作運(yùn)算器、位累加器和位存儲(chǔ)器,可對(duì)位地址空間的每個(gè)位進(jìn)行位變量傳送、狀態(tài)控制、邏輯運(yùn)算等操作。位地址包括:內(nèi)部RAM地址空間的可進(jìn)行位尋址的128位和SFR地址空間的可位尋址的11個(gè)8位寄存器的88位。位尋址給出的是直接地址。

3.3指令系統(tǒng)3.3.1數(shù)據(jù)傳送類指令1.數(shù)據(jù)傳送類指令的特點(diǎn)數(shù)據(jù)傳送指令是最常用的一類指令,共有29條,可以通過(guò)累加器進(jìn)行數(shù)據(jù)傳送,還可以在數(shù)據(jù)存儲(chǔ)器之間或工作寄存器與數(shù)據(jù)存儲(chǔ)器之間直接進(jìn)行數(shù)據(jù)傳送。2.數(shù)據(jù)傳送類指令(1)片內(nèi)數(shù)據(jù)傳送指令1)以累加器A為目的操作數(shù)的指令有以下形式:MOVA,Rn ;A←(Rn)源操作數(shù)為寄存器尋址MOVA,@Ri ;A←((Ri))源操作數(shù)為寄存器間接尋址MOVA,direct ;A←(direct)源操作數(shù)為直接尋址MOVA,#data ;A←data源操作數(shù)為立即尋址該組指令的功能是把源操作數(shù)傳送給累加器A。2)以工作寄存器Rn為目的操作數(shù)的指令有以下形式:MOVRn,A ;Rn←(A)MOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←data3)以直接地址為目的操作數(shù)的指令有以下形式:MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#data4)以間接地址為目的操作數(shù)的指令:MOV@Ri,AMOV@Ri,directMOV@Ri,#data該組指令的功能:把源操作數(shù)所指定的內(nèi)容傳送至以R0或R1為地址指針的片內(nèi)RAM單元中。5)16位數(shù)據(jù)傳送指令有以下惟一形式:MOVDPTR,#data16該指令的功能:把16位立即數(shù)傳送至16位數(shù)據(jù)指針寄存器DPTR。(2)片外數(shù)據(jù)存儲(chǔ)器傳送指令片外數(shù)據(jù)存儲(chǔ)器傳送指令有以下形式:

MOVXA,@Ri ;A←((Ri)),為寄存器間接尋址

MOVXA,@DPTR ;A←((DPTR)),為寄存器間接尋址

MOVX@R,A ;(Ri)←(A)MOVX@DPTR,A ;(DPTR)←(A)單片機(jī)內(nèi)部與片外數(shù)據(jù)存儲(chǔ)器是通過(guò)累加器A進(jìn)行數(shù)據(jù)傳送的。(3)程序存儲(chǔ)器數(shù)據(jù)傳送指令程序存儲(chǔ)器數(shù)據(jù)傳送指令有以下兩種形式:MOVCA,@A+PC MOVCA,@A+DPTR(4)數(shù)據(jù)交換指令數(shù)據(jù)交換指令有以下形式:1)字節(jié)交換指令:XCHA,Rn ;A的內(nèi)容與Rn的內(nèi)容交換XCHA,@Ri ;A的內(nèi)容與(Ri)的內(nèi)容交換XCHA,direct ;A的內(nèi)容與(direct)的內(nèi)容交換2)低半字節(jié)交換指令:XCHDA,@Ri ;A的低四位與(Ri)的低四位交換3)累加器A的高、低半字節(jié)交換指令:SWAPA ;A的低四位與高四位互換(5)堆棧操作指令堆棧操作指令有以下形式:PUSHdirect ;SP←(SP)+1(先指針加1)

;(SP)←(direct)(再壓棧)POPdirect ;(SP)←(direct)(先彈出)

;SP←(SP)-1(再指針減1)PUSH指令是入棧(或稱壓?;蜻M(jìn)棧)指令,其功能是先將堆棧指針SP的內(nèi)容加1,然后將直接尋址direct單元中的數(shù)壓入到SP所指示的單元中。POP是出棧(或稱彈出)指令,其功能是先將堆棧指針SP所指示的單元內(nèi)容彈出到直接尋址direct單元中,然后將SP的內(nèi)容減1,SP始終指向棧頂。3.3.2算術(shù)運(yùn)算類指令1.算術(shù)運(yùn)算類指令特點(diǎn)算術(shù)運(yùn)算類指令共有24條,包括加、減、乘、除4種基本的算術(shù)運(yùn)算指令。該類指令的主要功能:(1)對(duì)8位無(wú)符號(hào)數(shù)進(jìn)行直接的運(yùn)算。(2)借助溢出標(biāo)志對(duì)有符號(hào)的二進(jìn)制整數(shù)進(jìn)行加減運(yùn)算。(3)借助進(jìn)位標(biāo)志,可以實(shí)現(xiàn)多字節(jié)的加減運(yùn)算。(4)對(duì)壓縮的BCD數(shù)進(jìn)行運(yùn)算(壓縮BCD數(shù),是指在1個(gè)字節(jié)中存放2位BCD數(shù))。(5)算術(shù)運(yùn)算指令對(duì)程序狀態(tài)字PSW中的Cy、AC、OV三個(gè)標(biāo)志都有影響,根據(jù)運(yùn)算的結(jié)果可將它們置1或清除。但是加1和減1指令不影響這些標(biāo)志。算術(shù)運(yùn)算類指令用到的助記符有:ADD、ADDC、SUBB、INC、DEC、DA、MUL和DIV八種。2.加法指令(1)不帶進(jìn)位的加法指令不帶進(jìn)位的加法指令有以下形式:ADDA,#data ;A←(A)+dataADDA,direct ;A←(A)+(direct)ADDA,Rn ;A←(A)+(Rn)ADDA,@Ri ;A←(A)+((Ri))這4條指令的功能是完成A中的數(shù)與源操作數(shù)所確定的內(nèi)容按二進(jìn)制運(yùn)算相加,其和送入目的操作數(shù)累加器A中。(2)帶進(jìn)位加法指令帶進(jìn)位加法指令有以下形式:ADDC A,Rn ;A←(A)+(Rn)+CyADDC A,@Ri ;A←(A)+((Ri))+CyADDC A,direct ;A←(A)+(direct)+CyADDC A,#data ;A←(A)+#data+Cy該組指令的功能:將指令中指出的源操作數(shù)與A的內(nèi)容及進(jìn)位標(biāo)志位Cy的值相加,結(jié)果送A。此類指令常用于多字節(jié)加法算中。(3)加1指令加1指令有以下形式:INC A ;A←(A)+1INC Rn ;Rn←(Rn)+1INC direct ;(direct)←(direct)+1INC @Ri ;(Ri)←((Ri))+1INC DPTR ;DPTR←(DPTR)+1該組指令的功能:把操作數(shù)指定的單元或寄存器的內(nèi)容加1。(4)十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令有以下惟一形式:DA A ;A←(A)(BCD碼調(diào)整)指令的功能:將存放于A中的兩個(gè)BCD碼(十進(jìn)制數(shù))的和進(jìn)行十進(jìn)制調(diào)整,使A中的結(jié)果為正確的BCD碼數(shù)。3.減法指令(1)帶借位減法指令帶借位減法指令有以下形式:SUBB A,Rn ;A←(A)-(Rn)-CySUBB A,@Ri ;A←(A)-((Ri))-CySUBB A,direct ;A←(A)-(direct)-CySUBB A,#data ;A←(A)-data-Cy該組指令的功能:從累加器A中減去源操作數(shù)指定的內(nèi)容和標(biāo)志位Cy,結(jié)果存入累加器A中。(2)減1指令減1指令有以下形式:DECA ;A←(A)-1DECRn ;Rn←(Rn)-1DEC@Ri ;(Ri)←((Ri))-1DECdirect ;(direct)←(direct)-1該組指令的功能:將操作數(shù)指定的內(nèi)容減1。若操作數(shù)為00H,則減1后下溢為0FFH,不影響標(biāo)志位,只有DECA影響標(biāo)志位P。4.乘法指令乘法指令有以下惟一形式:MUL AB ;A←A×B低字節(jié),B←A×B高字節(jié)該指令的功能:把累加器A和寄存器B中的兩個(gè)8位無(wú)符號(hào)數(shù)相乘,乘積又送回A、B內(nèi),A中存放低位字節(jié),B中存放高位字節(jié)。除法指令有以下惟一形式:DIV AB ;A←(A)/(B)(商),B←(A)/(B)(余數(shù))該指令的功能:把A中的8位無(wú)符號(hào)數(shù)除以B中的8位無(wú)符號(hào)數(shù),商存放在A中,余數(shù)存放在B中。Cy和OV均清0。若除數(shù)為0,執(zhí)行該指令后結(jié)果不定,并將OV置1。3.3.3邏輯運(yùn)算類指令邏輯操作指令共24條,所有指令均對(duì)8位二進(jìn)制數(shù)按位進(jìn)行邏輯運(yùn)算。邏輯運(yùn)算類指令無(wú)進(jìn)位,一般不影響標(biāo)志位。1.雙操作數(shù)邏輯運(yùn)算指令(1)邏輯“與”指令邏輯“與”指令有以下形式:ANL A,Rn ;A←(A)∧(Rn)ANL A,@Ri ;A←(A)∧((Ri))ANL A,direct ;A←(A)∧(direct)ANL A,#data ;A←(A)∧dataANL direct,A ;(direct)←(direct)∧(A)ANL direct,#data ;(direct)←(direct)∧data該組指令的功能:將源操作數(shù)和目的操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯“與”運(yùn)算,并將結(jié)果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。與運(yùn)算規(guī)則是:與“0”相與,本位為“0”(即屏蔽);與“1”相與,本位不變。邏輯“與”指令常用于屏蔽操作數(shù)中的某些位。(2)邏輯“或”指令邏輯“或”指令有以下形式:ORL A,Rn ;A←(A)∨(Rn)ORL A,@Ri ;A←(A)∨((Ri))ORL A,direct ;A←(A)∨(direct)ORL A,#data ;A←(A)∨dataORL direct,A ;(direct)←(direct)∨(A)ORL direct,#data ;(direct)←(direct)∨data該組指令的功能:將源操作數(shù)和目的操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯“或”運(yùn)算,并將結(jié)果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。或運(yùn)算規(guī)則是:與“1”相或,本位為“1”;與“0”相或,本位不變。(3)邏輯“異或”指令邏輯“異或”指令有以下形式:XRL A,Rn ;A←(A)⊕(Rn)XRL A,@Ri ;A←(A)⊕((Ri))XRL A,direct ;A←(A)⊕(direct)XRL A,#data ;A←(A)⊕dataXRL direct,A ;(direct)←(direct)⊕(A)XRL direct,#data ;(direct)←(direct)⊕data該組指令的功能是:將源操作數(shù)和目的操作數(shù)按對(duì)應(yīng)位進(jìn)行邏輯“異或”運(yùn)算,并將結(jié)果存入目的地址(前4條指令為A,后2條指令為直接尋址的direct單元)中。異或運(yùn)算的運(yùn)算規(guī)則是:與“1”異或,本位為非(即求反);與“0”異或,本位不變。2.單操作數(shù)邏輯運(yùn)算指令單操作數(shù)邏輯運(yùn)算指令有以下形式:(1)累加器A清0指令CLR A ;A←0(2)累加器A求反指令CPL A ;A←()3.累加器A循環(huán)移位指令(1)累加器A循環(huán)移位指令累加器A循環(huán)移位指令有以下形式:RL A ;A的各位依次左移一位,A.0←A.7RR A ;A的各位依次右移一位,A.7←A.0該組指令不影響標(biāo)志位。當(dāng)A的最高位(D7)為0時(shí),執(zhí)行一次RL指令相當(dāng)于對(duì)A進(jìn)行一次乘2操作。當(dāng)A的最低位(D0)為0時(shí),執(zhí)行一次RR指令相當(dāng)于對(duì)A進(jìn)行一次除2操作。(2)帶進(jìn)位位Cy的累加器A循環(huán)移位指令帶進(jìn)位位Cy的累加器A循環(huán)移位指令有以下形式:RLC A ;A的各位依次左移一位,Cy←A.7,A.0←CyRRC A ;A的各位依次右移一位,Cy←A.0,A.7←Cy3.3.4控制轉(zhuǎn)移類指令

控制轉(zhuǎn)移指令共17條,可分為三類:無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令及子程序調(diào)用與返回指令。1.無(wú)條件轉(zhuǎn)移指令不受任何條件限制的轉(zhuǎn)移指令稱為無(wú)條件轉(zhuǎn)移指令。MCS-51無(wú)條件轉(zhuǎn)移指令有以下類型:(1)長(zhǎng)轉(zhuǎn)移指令長(zhǎng)轉(zhuǎn)移指令有以下惟一形式:LJMP addrl6 ;PC←(PC)+2;PC←addr16該指令功能:把16位地址(addr16)送給PC,從而實(shí)現(xiàn)程序轉(zhuǎn)移。允許轉(zhuǎn)移的目標(biāo)地址在整個(gè)程序存儲(chǔ)器空間。(2)絕對(duì)轉(zhuǎn)移指令絕對(duì)轉(zhuǎn)移指令有以下惟一形式:AJMP

addr11 ;PC←(PC)+2 ;PC10~0←addr10~0,PC15~11不變?cè)撝噶罟δ埽喊裀C當(dāng)前值(加2修改后的值)的高5位與指令中的11位地址拼接在一起,共同形成16位目標(biāo)地址送給PC,從而使程序轉(zhuǎn)移。(3)相對(duì)轉(zhuǎn)移指令(亦稱短轉(zhuǎn)移指令)相對(duì)轉(zhuǎn)移指令有以下惟一形式:SJMP rel ;PC←(PC)+2+rel該指令的功能:根據(jù)指令中給出的相對(duì)偏移量rel(相對(duì)于當(dāng)前PC=(PC)+2),計(jì)算出程序?qū)⒁D(zhuǎn)移的目標(biāo)地址(PC)+2+rel,把該目標(biāo)地址送給PC。(4)間接長(zhǎng)轉(zhuǎn)移指令(相對(duì)長(zhǎng)轉(zhuǎn)移指令)間接長(zhǎng)轉(zhuǎn)移指令有以下惟一形式:JMP @A+DPTR ;PC←(A)+(DPTR)該指令也稱散轉(zhuǎn)指令,其功能是把累加器A中8位無(wú)符號(hào)數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,結(jié)果作為下一條指令地址送入PC,指令執(zhí)行后不改變A和DPTR中的內(nèi)容,也不影響標(biāo)志位。2.條件轉(zhuǎn)移指令所謂條件轉(zhuǎn)移指令是指根據(jù)指令中給定的判斷條件決定程序是否轉(zhuǎn)移。當(dāng)條件滿足時(shí),就按指令給定的相對(duì)偏移量進(jìn)行轉(zhuǎn)移;否則,程序順序執(zhí)行。MCS-51的條件轉(zhuǎn)移指令有以下類型:(1)累加器判零轉(zhuǎn)移指令累加器判零轉(zhuǎn)移指令有以下形式:JZ rel JNZ rel這兩條指令均為雙字節(jié)指令,以累加器A的內(nèi)容是否為0作為轉(zhuǎn)移的條件。本指令執(zhí)行前,累加器A應(yīng)有確定的值。(2)比較不相等轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令有以下形式:1)指令格式為:CJNE A,#data,rel該指令的功能:若A>data,則PC←(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(A)<data,則PC←(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC←(PC)+3且Cy=0(順序執(zhí)行)。

2)指令格式為:CJNE A,direct,rel該指令的功能:若(A)>(direct),則PC←(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(A)<(direct),則PC←(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC←(PC)+3且Cy=0(順序執(zhí)行)。3)指令格式為:CJNE Rn,#data,rel該指令的功能:若(Rn)>data,則PC←(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若(Rn)<data,則PC←(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC←(PC)+3且Cy=0(順序執(zhí)行)。4)指令格式為:CJNE @Ri,data,rel該指令的功能:若((Ri))>data,則PC←(PC)+3+rel,且Cy=0(滿足條件相對(duì)轉(zhuǎn)移)。若((Ri))<data,則PC←(PC)+3+rel,且Cy=1(滿足條件相對(duì)轉(zhuǎn)移)。否則,PC←(PC)+3且Cy=0(順序執(zhí)行)。(3)減1不為0轉(zhuǎn)移指令減1不為0轉(zhuǎn)移指令有以下形式:DJNZ Rn,rel DJNZ direct,rel 該組指令中第一條指令為兩字節(jié)指令,第二條指令為三字節(jié)指令。3.空操作指令空操作指令有以下惟一形式:NOP ;PC←(PC)+1空操作指令是惟一的一條不使CPU產(chǎn)生任何操作控制的指令,NOP指令的功能是使程序計(jì)數(shù)器PC加1,在執(zhí)行時(shí)間上消耗12個(gè)時(shí)鐘周期。 3.3.5位操作類指令

位操作指令共17條,所有的位操作指令均采用位(直接)尋址方式,在進(jìn)行位操作時(shí),MCS-51匯編語(yǔ)言中的位地址可用以下四種方式表示:(1)直接位地址方式。(2)點(diǎn)操作符表示方式。(3)位名稱方式。(4)用戶定義名方式。1.位傳送指令位傳送指令有以下形式:MOV C,bit ;Cy←(bit)MOV bit,C ;(bit)←(Cy)指令中其中一個(gè)操作數(shù)必須是進(jìn)位標(biāo)志C,bit可表示任何直接位地址。2.位置位和復(fù)位指令(1)位置位指令位置位指令有以下形式:SETB C ;Cy←1SETB bit ;(bit)←1(2)位復(fù)位指令位復(fù)位指令有以下形式:CLR C ;Cy←0CLR bit ;(bit)←0采用這類指令可以對(duì)布爾累加器C和指定位置1或清零。3.位邏輯運(yùn)算指令(1)位邏輯“與”指令位邏輯“與”指令有以下形式:ANL C,bit ;C←(C)∧(bit)ANL C,/bit ;C←(C)∧()該組指令的功能是:進(jìn)位標(biāo)志Cy與直接尋址位的布爾值進(jìn)行位邏輯“與”運(yùn)算,結(jié)果送入Cy。(2)位邏輯“或”指令位邏輯“或”指令有以下形式:ORL C,bit ;C←(C)∨(bit)ORL C,/bit ;C←(C)∨()該組指令的功能是:進(jìn)位標(biāo)志Cy與直接尋址位的布爾值進(jìn)行位邏輯“或”運(yùn)算,結(jié)果送入Cy。(3)位邏輯“非”指令位邏輯“非”指令有以下形式:CPL C ;Cy←()CPL bit ;(bit)←()該組指令的功能是:對(duì)進(jìn)位標(biāo)志Cy或直接尋址位bit的布爾值進(jìn)行位邏輯“非”運(yùn)算,結(jié)果送入Cy或bit。4.位條件轉(zhuǎn)移指令(1)位累加器Cy狀態(tài)判斷轉(zhuǎn)移指令位累加器Cy狀態(tài)判斷轉(zhuǎn)移指令有以下形式:JC rel JNC rel 該組指令通常與CJNE指令一起使用,可以比較出兩個(gè)數(shù)的大小,從而形成大于、小于、等于三個(gè)分支。(2)位狀態(tài)判斷轉(zhuǎn)移指令位狀態(tài)判斷轉(zhuǎn)移指令有以下形式:JB bit,rel JNB bit,rel JBC bit,rel 該組指令為三字節(jié)指令。3.3.6子程序調(diào)用與返回指令在調(diào)用子程序過(guò)程中需要解決以下方面的問(wèn)題:(1)保護(hù)斷點(diǎn)。所謂斷點(diǎn)是指子程序調(diào)用指令的下一條指令的第一個(gè)字節(jié)地址。(2)建立子程序入口。子程序入口是指子程序中第一條指令的第一個(gè)字節(jié)地址,即子程序調(diào)用指令給出的目標(biāo)地址。(3)保護(hù)現(xiàn)場(chǎng)。所謂保護(hù)現(xiàn)場(chǎng)是指在執(zhí)行子程序前,需要保存程序中正在使用的存儲(chǔ)單元和寄存器的內(nèi)容。MCS-51子程序調(diào)用與返回指令有以下形式:1)絕對(duì)調(diào)用指令A(yù)CALL addrl1其功能是:首先保護(hù)斷點(diǎn),將PC的值壓棧保護(hù)(先壓低位,后壓高位),接著將指令中的11位目標(biāo)地址(addr11)送入PC的低11位與PC的高5位合成一個(gè)程序要轉(zhuǎn)移的目標(biāo)地址。2)長(zhǎng)調(diào)用指令LCALL addrl6其功能是:首先保護(hù)斷點(diǎn),將PC的值壓棧保護(hù)(先壓低位,后壓高位),接著將指令中的16位目標(biāo)地址(addr16)送入PC,即子程序入口地址,從而轉(zhuǎn)去執(zhí)行被調(diào)用的子程序。3)一般子程序返回指令RET 當(dāng)程序執(zhí)行到本指令時(shí),自動(dòng)從堆棧中取出斷點(diǎn)地址送給PC,程序返回?cái)帱c(diǎn)的下一條指令處,繼續(xù)往下執(zhí)行。4)中斷子程序返回指令RETI該指令除具有RET指令的功能外,RETI在返回?cái)帱c(diǎn)的同時(shí),還要釋放中斷邏輯以接受新的中斷請(qǐng)求。中斷服務(wù)程序(中斷子程序)必須用RETI返回。3.4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)匯編語(yǔ)言是一種采用助記符表示的機(jī)器語(yǔ)言。匯編語(yǔ)言與高級(jí)語(yǔ)言相比有以下特點(diǎn):(1)在功能相同的條件下,匯編語(yǔ)言生成的目標(biāo)程序,所占用的存儲(chǔ)單元比較少,而且執(zhí)行的速度也比較快。(2)由于單片機(jī)應(yīng)用的許多場(chǎng)合主要是輸入/輸出、檢測(cè)及控制,而匯編語(yǔ)言具有直接針對(duì)輸入/輸出端口的操作指令,便于自控系統(tǒng)及檢測(cè)系統(tǒng)中數(shù)據(jù)的采集與發(fā)送。3.4.1匯編語(yǔ)言程序的組成匯編語(yǔ)言語(yǔ)句可分為:指令性語(yǔ)句(即匯編指令)和指示性語(yǔ)句(即偽指令)。1.指令性語(yǔ)句指令性語(yǔ)句(可簡(jiǎn)稱指令)是進(jìn)行匯編語(yǔ)言程序設(shè)計(jì)的可執(zhí)行語(yǔ)句,每條指令都產(chǎn)生相應(yīng)的機(jī)器語(yǔ)言的目標(biāo)代碼。2.指示性語(yǔ)句指示性語(yǔ)句(偽指令)又稱匯編控制指令。它是控制匯編(翻譯)過(guò)程的一些命令,程序員通過(guò)偽指令要求匯編程序在進(jìn)行匯編時(shí)的一些操作。因此,偽指令不產(chǎn)生機(jī)器語(yǔ)言的目標(biāo)代碼,是匯編語(yǔ)言程序中的不可執(zhí)行語(yǔ)句。偽指令主要用于指定源程序存放的起始地址、定義符號(hào)、指定暫存數(shù)據(jù)的存儲(chǔ)區(qū)以及將數(shù)據(jù)存入存儲(chǔ)器、結(jié)束匯編等。3.4.2偽指令MCS-51單片機(jī)匯編語(yǔ)言中常用的偽指令如下:1.ORG(匯編起始地址)格式:ORG16位地址功能:規(guī)定緊跟在該偽指令后的源程序經(jīng)匯編后產(chǎn)生的目標(biāo)程序在程序存儲(chǔ)器中存放的起始地址。2.END(結(jié)束匯編)格式:END或END標(biāo)號(hào)功能:匯編語(yǔ)言源程序的結(jié)束標(biāo)志,即通知匯編程序不再繼續(xù)往下匯編。3.EQU(等值)格式:標(biāo)識(shí)符EQU數(shù)或匯編符號(hào)功能:把數(shù)或匯編符號(hào)賦給標(biāo)識(shí)符,且只能賦值一次。4.DB(定義字節(jié))格式:[標(biāo)號(hào):]DB項(xiàng)或項(xiàng)表功能:將項(xiàng)或項(xiàng)表中的字節(jié)(8位)數(shù)據(jù)依次存入標(biāo)號(hào)所指示的存儲(chǔ)單元中。5.DW(定義字)格式:[標(biāo)號(hào):]DW項(xiàng)或項(xiàng)表功能:將項(xiàng)或項(xiàng)表中的字(16位)數(shù)據(jù)依次存入標(biāo)號(hào)所指示的存儲(chǔ)單元中。6.DS(定義存儲(chǔ)單元)格式:標(biāo)號(hào):DS數(shù)字功能:從標(biāo)號(hào)所指示的單元開(kāi)始,根據(jù)數(shù)字的值保留一定數(shù)量的字節(jié)存儲(chǔ)單元,留給以后存儲(chǔ)數(shù)據(jù)用。7.BIT(地址符號(hào)命令)格式:標(biāo)識(shí)符BIT位地址功能:將位地址賦以標(biāo)識(shí)符(注意,不是標(biāo)號(hào))。3.4.3程序設(shè)計(jì)步驟及技術(shù)1.程序設(shè)計(jì)步驟匯編語(yǔ)言程序設(shè)計(jì)一般經(jīng)過(guò)以下幾個(gè)步驟:(1)分析問(wèn)題,明確任務(wù)要求,對(duì)于復(fù)雜的問(wèn)題,還要將要解決的問(wèn)題抽象成數(shù)學(xué)模型。(2)確定算法,即根據(jù)實(shí)際問(wèn)題和指令系統(tǒng)的特點(diǎn)確定完成這一任務(wù)需經(jīng)歷的步驟。(3)根據(jù)所選擇的算法,確定內(nèi)存單元的分配;使用哪些存儲(chǔ)器單元;使用哪些寄存器;程序運(yùn)行中的中間數(shù)據(jù)及結(jié)果存放在哪些單元,以利于提高程序的效率和運(yùn)行速度。(4)根據(jù)流程圖,編寫源程序。(5)上機(jī)對(duì)源程序進(jìn)行匯編、調(diào)試。2.程序設(shè)計(jì)技術(shù)在進(jìn)行匯編語(yǔ)言程序設(shè)計(jì)時(shí),對(duì)于同一個(gè)問(wèn)題,會(huì)有不同的編程方式,但應(yīng)按照結(jié)構(gòu)化程序設(shè)計(jì)的要求,即程序的基本結(jié)構(gòu)應(yīng)采用順序、選擇和循環(huán)3種基本結(jié)構(gòu)。在進(jìn)行程序設(shè)計(jì)時(shí),應(yīng)注意以下事項(xiàng)和技巧:1)把要解決的問(wèn)題化成一個(gè)個(gè)具有一定獨(dú)立性的功能模塊,各模塊盡量采用子程序完成其功能。2)力求少用無(wú)條件轉(zhuǎn)移指令,盡量采用循環(huán)結(jié)構(gòu)。3)對(duì)主要的程序段要下功夫精心設(shè)計(jì),這樣會(huì)收到事半功倍的效果。4)由于MCS-51程序存儲(chǔ)器的某些初始單元已有定義,因此,在需要使用這些單元或附近單元時(shí),應(yīng)在該單元內(nèi)安排一條轉(zhuǎn)移指令。5)能用8位數(shù)據(jù)解決問(wèn)題的就不要使用16位數(shù)據(jù)。6)在中斷處理程序中,要保護(hù)好現(xiàn)場(chǎng)(包括標(biāo)志寄存器的內(nèi)容),中斷結(jié)束前要恢復(fù)現(xiàn)場(chǎng)。7)累加器是信息傳遞的樞紐,在調(diào)用子程序時(shí)應(yīng)通過(guò)累加器傳送子程序的參數(shù),通過(guò)累加器向主程序傳送返回參數(shù)。8)為了保證程序運(yùn)行的安全可靠,應(yīng)考慮使用軟件抗干擾技術(shù),如數(shù)字濾波技術(shù)、指令冗余技術(shù)、軟件陷井技術(shù),用匯編語(yǔ)言程序?qū)崿F(xiàn)這些技術(shù),不需要增加硬件成本,可靠性高,穩(wěn)定性好,方便靈活。用匯編語(yǔ)言編寫程序,對(duì)于初學(xué)者來(lái)說(shuō)是會(huì)遇到困難的,程序設(shè)計(jì)者只有通過(guò)實(shí)踐,不斷積累經(jīng)驗(yàn),才能編寫出較高質(zhì)量的程序。3.5程序設(shè)計(jì)實(shí)例3.5.1匯編語(yǔ)言基本程序設(shè)計(jì)1.簡(jiǎn)單程序簡(jiǎn)單程序是按照程序編寫的順序逐條依次執(zhí)行的,是程序的最基本的結(jié)構(gòu)。【例3-39】將片內(nèi)RAM的30H和31H的內(nèi)容相加,結(jié)果存入32H。假設(shè)整個(gè)程序存放在存儲(chǔ)器中以2000H為起始地址的單元。程序1:ORG2000HMOVA,30H ;取第一個(gè)操作數(shù)ADDA,31H ;兩個(gè)操作數(shù)相加MOV32H,A ;存放結(jié)果END本程序采用直接尋址方式傳送數(shù)據(jù)進(jìn)行兩個(gè)操作數(shù)相加運(yùn)算。2.分支程序分支程序是根據(jù)程序中給定的條件進(jìn)行判斷,然后根據(jù)條件的“真”與“假”決定程序是否轉(zhuǎn)移?!纠?-41】把片外RAM的首地址為10H開(kāi)始存放的數(shù)據(jù)塊,傳送給片內(nèi)RAM首地址為20H開(kāi)始的數(shù)據(jù)塊中去,如果數(shù)據(jù)為“0”,就停止傳送。程序如下:ORG 2000H MOVR0,#10H MOVR1,#20HLOOP: MOVXA,@R0 ;A←片外RAM數(shù)據(jù)HERE: JZHERE ;數(shù)據(jù)=0終止,程序原地踏步

MOV@R1,A ;片內(nèi)RAM←A INCR0INCR1SJMPLOOP ;循環(huán)傳送

END3.循環(huán)程序在程序執(zhí)行過(guò)程中,當(dāng)需要多次反復(fù)執(zhí)行某段程序時(shí),可采用循環(huán)程序。循環(huán)程序一般由三部分組成:(1)初始化。(2)循環(huán)體。(3)循環(huán)控制。【例3-43】有20個(gè)數(shù)存放在內(nèi)部RAM從41H開(kāi)始的連續(xù)單元中,試求其和并將結(jié)果存放在40H單元(和數(shù)是一個(gè)8位二進(jìn)制數(shù),不考慮進(jìn)位問(wèn)題)。程序流程圖如圖3-3所示。程序如下:ORG 2000HMOV A,#00H ;清累加器AMOV R7,#14H ;建立循環(huán)計(jì)數(shù)器R7初值MOV R0,#41H ;建立內(nèi)存數(shù)據(jù)指針LOOP: ADDA,@R0 ;累加INC R0 ;指向下一個(gè)內(nèi)存單元DJNZR7,LOOP;修改循環(huán)計(jì)數(shù)器,判循環(huán)結(jié)束條件MOV 40H,A ;存累加結(jié)果于40HSJMP $END3.5.2延時(shí)程序設(shè)計(jì)【例3-45】較長(zhǎng)時(shí)間的延時(shí)子程序,可以采用多重循環(huán)來(lái)實(shí)現(xiàn)。利用CPU中每執(zhí)行一條指令都有固定的時(shí)序這一特征,令其重復(fù)執(zhí)行某些指令從而達(dá)到延時(shí)的目的。子程序如下:源程序 機(jī)器周期數(shù)DELAY: MOV R7, #0FFH 1LOOP1: MOV R6, #0FFH 1LOOP2: NOP 1 NOP 1DJNZ R6, LOOP2 2 DJNZ R7, LOOP1 2 RET 23.5.3代碼轉(zhuǎn)換程序設(shè)計(jì)【例3-46】編寫一子程序,將8位二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼。設(shè)要轉(zhuǎn)換的二進(jìn)制數(shù)在累加器A中,子程序的入口地址為BCD1,轉(zhuǎn)換結(jié)果存入R0所指示的RAM中。程序如下:BCD1: MOV B,#100DIV AB ;A←百位數(shù),B←余數(shù)

MOV @R0,A ;(R0)←百位數(shù)

INC R0 MOV A,#10 XCH A,B DIV AB ;A←十位數(shù),B←個(gè)位數(shù)

SWAP A ADD A,B ;十位數(shù)和個(gè)位數(shù)組合到A MOV @R0,A;存入(R0)RET3.5.4查表程序設(shè)計(jì)查表是程序設(shè)計(jì)中使用的基本方法。只要適當(dāng)?shù)亟M織表格,就可以十分方便地利用表格進(jìn)行多種代碼轉(zhuǎn)換和算術(shù)運(yùn)算等?!纠?-49】利用表格計(jì)算內(nèi)部RAM的40H單元中一位BCD數(shù)的平方值,并將結(jié)果存入41H單元。首先組織平方表,且把它作為程序的一部分。

程序如下:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論