單片微機原理與應用 教學課件 素材包 第3章 51系列單片機的指令系統(tǒng)和程序設計方法_第1頁
單片微機原理與應用 教學課件 素材包 第3章 51系列單片機的指令系統(tǒng)和程序設計方法_第2頁
單片微機原理與應用 教學課件 素材包 第3章 51系列單片機的指令系統(tǒng)和程序設計方法_第3頁
單片微機原理與應用 教學課件 素材包 第3章 51系列單片機的指令系統(tǒng)和程序設計方法_第4頁
單片微機原理與應用 教學課件 素材包 第3章 51系列單片機的指令系統(tǒng)和程序設計方法_第5頁
已閱讀5頁,還剩149頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第3章51系列單片機的指令系統(tǒng)和程序設計方法(1)理解指令的尋址方式及相應的尋址空間。

(2)理解51系列單片機的111條基本指令的含義,熟練掌握其應用方法。

(3)了解機器語言、匯編語言和高級語言的特點、匯編語言程序設計步驟。

(4)掌握匯編語言的基本格式,熟練掌握匯編語言的程序設計思想和設計方法。

(5)理解子程序的特點,掌握子程序的設計方法和設計中應該注意的問題。

3.1指令系統(tǒng)概述

3.2尋址方式

3.3數(shù)據(jù)傳送類指令

5.16位數(shù)據(jù)的傳遞指令(1條)

3.4算術運算類指令第3章51系列單片機的指令系統(tǒng)和程序設計方法(1)理解指第3章51系列單片機的指令系統(tǒng)和程序設計方法3.5邏輯運算類指令

3.6位操作類指令

3.7控制轉移類指令

3.8匯編語言程序設計第3章51系列單片機的指令系統(tǒng)和程序設計方法3.5邏輯運3.1指令系統(tǒng)概述3.1.1指令分類

3.1.2指令格式

3.1.3指令中常用縮寫符號的意義3.1指令系統(tǒng)概述3.1.1指令分類

3.1.2指令格3.1.1指令分類1.按指令功能可分為五類

2.按指令執(zhí)行所需要的時間可分為三類

3.按指令所占的字節(jié)數(shù)可分為三類3.1.1指令分類1.按指令功能可分為五類

2.按指令執(zhí)行1.按指令功能可分為五類1)數(shù)據(jù)傳送類指令(29條):內(nèi)部8位數(shù)據(jù)傳送指令15條,內(nèi)部16位數(shù)據(jù)傳送指令1條,外部數(shù)據(jù)傳送指令4條,交換、查表和堆棧操作指令9條。

2)算術傳送類指令(24條):加法指令14條(包括BCD碼調整指令1條),減法指令8條,乘/除法指令各1條。

3)邏輯運算類指令(24條):邏輯運算指令20條,循環(huán)移位指令4條。

4)位操作指令(12條):位傳送指令2條,位置位、位清“0”和位取反指令6條,位運算指令4條。

5)控制轉移類指令(22條):無條件轉移指令4條,條件轉移指令8條,調用和返回指令5條,位測試轉移指令3條,判別CY標志轉移指令2條。1.按指令功能可分為五類1)數(shù)據(jù)傳送類指令(29條):內(nèi)部82.按指令執(zhí)行所需要的時間可分為三類1)單周期指令(64條)。

2)雙周期指令(45條)。

3)四周期指令(2條)。2.按指令執(zhí)行所需要的時間可分為三類1)單周期指令(64條)3.按指令所占的字節(jié)數(shù)可分為三類1)單字節(jié)指令(49條)。

2)雙字節(jié)指令(46條)。

3)三字節(jié)指令(16條)。3.按指令所占的字節(jié)數(shù)可分為三類1)單字節(jié)指令(49條)。

3.1.2指令格式1.指令格式介紹

2.指令中數(shù)據(jù)的表示3.1.2指令格式1.指令格式介紹

2.指令中數(shù)據(jù)的表示1.指令格式介紹1)匯編語言語句由標號、操作碼、操作數(shù)和注釋四部分組成。

2)標號位于語句的開始,由1~8個ASCII字符組成,第一個字符必須是字母。

3)操作碼是用英文縮寫的指令功能助記符。

4)操作數(shù)在操作碼之后,兩者用空格分開。

5)注釋在語句的最后,以分號“;”開始,是說明性的文字,與語句的具體功能無關,但是能增加程序的可閱讀性,便于程序的調試與交流。1.指令格式介紹1)匯編語言語句由標號、操作碼、操作數(shù)和注釋2.指令中數(shù)據(jù)的表示1)十進制數(shù)以D結尾,也可以省略,如55D或55。

2)十六進制數(shù)以H結尾,如55H。

3)二進制數(shù)以B結尾,如00110011B。

4)八進制數(shù)以O或Q結尾,如55O或55Q。

5)字符串用“”括起來,如′M′表示字符M的ASCII碼。2.指令中數(shù)據(jù)的表示1)十進制數(shù)以D結尾,也可以省略,如553.1.3指令中常用縮寫符號的意義1)#data:8位立即數(shù)。

2)#data16:16位立即數(shù)。

3)Rn:工作寄存器,R0~R7,n=0~7。

4)Ri:工作寄存器,i=0或1。

5)@:間接地址符號。

6)direct:8位直接地址,可以是特殊功能寄存器(SFR)的地址或片內(nèi)RAM單元地址。

7)addr11:11位目的地址。

8)addr16:16位目的地址。

9)rel:有符號的8位偏移地址,主要用于所有的條件轉移指令和SJMP指令。

10)bit:位地址。

11)/:位操作數(shù)的前綴,表示對該位操作數(shù)取反,如/bit。3.1.3指令中常用縮寫符號的意義1)#data:8位立即3.1.3指令中常用縮寫符號的意義12):當前指令存放的地址。

13)(X):表示由X所指定的某寄存器或某單元中的內(nèi)容。

14)((X)):表示由X間接尋址單元中的內(nèi)容。

15)B:通用寄存器,常用于乘法MUL和除法DIV的指令。

16)C:進位標志位或者布爾處理器中的累加器。

17)←:表示指令的操作結果是將箭頭右邊的內(nèi)容傳送到左邊。3.1.3指令中常用縮寫符號的意義12):當前指令存放的地3.2尋址方式3.2.1立即尋址

3.2.2直接尋址

3.2.3寄存器尋址

3.2.4寄存器間接尋址

3.2.5變址尋址

3.2.6相對尋址

3.2.7位尋址3.2尋址方式3.2.1立即尋址

3.2.2直接尋址

3.2.1立即尋址立即尋址是指指令中直接給出操作數(shù)的尋址方式。立即數(shù)用前面加有#號的8位或16位數(shù)來表示。立即數(shù)是指令代碼的一部分,只能作源操作數(shù)。這種尋址方式主要用于對特殊功能寄存器和指定的存儲單元賦初值。3.2.1立即尋址立即尋址是指指令中直接給出操作數(shù)的尋址方3.2.2直接尋址1)特殊功能寄存器(SFR):直接尋址是唯一的訪問形式。

2)片內(nèi)RAM低128B單元(地址范圍00H~7FH)。

3)221個位地址空間。3.2.2直接尋址1)特殊功能寄存器(SFR):直接尋址3.2.3寄存器尋址寄存器尋址是指操作數(shù)存放于寄存器中(Rn、A、B、DPTR、CY)的尋址方式。例如:MOV

A,R7;(A)←(R7)其功能是把寄存器R7內(nèi)的操作數(shù)傳送到累加器A中。由于操作數(shù)在R7中,因此在指令中指定了R7,就能從中取得操作數(shù)。3.2.3寄存器尋址寄存器尋址是指操作數(shù)存放于寄存器中(R3.2.4寄存器間接尋址圖3-1寄存器間接尋址示意圖3.2.4寄存器間接尋址圖3-1寄存器間接尋址示意圖3.2.5變址尋址圖3-2變址尋址示意圖3.2.5變址尋址圖3-2變址尋址示意圖3.2.6相對尋址1)當前PC值是指相對轉移指令所在地址(一般稱為源地址)加上轉移指令字節(jié)數(shù),即當前PC值=源地址+轉移指令字節(jié)數(shù)。

2)偏移量rel是有符號的單字節(jié)數(shù),以補碼表示,其相對值的范圍是-128~+127,負數(shù)表示從當前地址向地址減小的方向轉移,正數(shù)表示從當前地址向地址增大的方向轉移。3.2.6相對尋址1)當前PC值是指相對轉移指令所在地址(圖3-3相對尋址示意圖

a)指令JZ08H尋址示意圖b)指令JZ0F4H尋址示意圖圖3-3相對尋址示意圖

a)指令JZ08H尋址示意圖b3.2.7位尋址1)直接使用位地址。

2)位名稱表示方法。

3)單元地址加位數(shù)的表示方法。

4)專用寄存器符號加位數(shù)的表示方法。3.2.7位尋址1)直接使用位地址。

2)位名稱表示方法。表3-17種尋址方式及尋址空間序號尋址方式尋址空間范圍1寄存器尋址R0~R7,A,B,CY,DPTR寄存器2立即尋址程序存儲器3寄存器間址片內(nèi)RAM的00H~0FFH,片外RAM4直接尋址片內(nèi)RAM的00H~7FH,SFR5變址尋址程序存儲器6相對尋址程序存儲器7位尋址片內(nèi)RAM的20H~2FH的128位,SFR中的93位表3-17種尋址方式及尋址空間序號尋址方式尋址空間范圍13.3數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令3.3數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令1.以累加器為目的操作數(shù)的指令(4條)

2.以寄存器Rn為目的操作數(shù)的指令(3條)

3.以直接地址為目的操作數(shù)的指令(5條)

4.以間接地址為目的操作數(shù)的指令(3條)3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令1.以累加器為目的操作數(shù)3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令圖3-4片內(nèi)RAM間數(shù)據(jù)傳遞關系3.3.1片內(nèi)RAM數(shù)據(jù)傳送類指令圖3-4片內(nèi)RAM間數(shù)1.以累加器為目的操作數(shù)的指令(4條)MOV

A,Rn;(A)←(Rn),(n=0~7)MOV

A,direct;(A)←(direct)MOV

A,@Ri;(A)←((Ri))(i=0、1)MOV

A,#data;(A)←data這組指令的目的操作數(shù)都是累加器A,源操作數(shù)的尋址方式采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。1.以累加器為目的操作數(shù)的指令(4條)MOVA,Rn2.以寄存器Rn為目的操作數(shù)的指令(3條)MOV

Rn,A;(Rn)←(A),(n=0~7)MOV

Rn,direct;(Rn)←(direct),(n=0~7)MOV

Rn,#data;(Rn)←data,(n=0~7)這組指令都是以工作寄存器為目的操作數(shù),源操作數(shù)的尋址方式采用寄存器尋址、直接尋址和立即尋址。2.以寄存器Rn為目的操作數(shù)的指令(3條)MOVRn,A;3.以直接地址為目的操作數(shù)的指令(5條)MOV

direct,A;(direct)←(A)MOV

direct,Rn;(direct)←(Rn),(n=0~7)MOV

directl,direct2;(direct1)←(direct2)MOV

direct,@Ri;(direct)←((Ri)),(i=0、1)MOV

direct,#data;(direct)←data這組指令的目的操作數(shù)都是直接尋址單元,源操作數(shù)采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。3.以直接地址為目的操作數(shù)的指令(5條)MOVdirect4.以間接地址為目的操作數(shù)的指令(3條)MOV

@Ri,A;((Ri))←(A)MOV

@Ri,direct;((Ri))←(direct)MOV

@Ri,#data;((Ri))←data這組指令的目的操作數(shù)都是間接尋址單元,源操作數(shù)可采用寄存器尋址、直接尋址和立即尋址方式。4.以間接地址為目的操作數(shù)的指令(3條)MOV@Ri,A5.16位數(shù)據(jù)的傳遞指令(1條)(1)MOVA,R0和MOVA,@R0

(2)MOVA,#40H和MOVA,40H

3.3.2片外RAM數(shù)據(jù)傳送類指令

3.3.3程序存儲器向累加器A傳送數(shù)據(jù)類指令

3.3.4數(shù)據(jù)交換類指令

3.3.5堆棧操作類指令5.16位數(shù)據(jù)的傳遞指令(1條)(1)MOVA,R0和(2)MOVA,#40H和MOVA,40H解:它們的執(zhí)行結果為

解:運行結果為

解:上述指令均是錯誤的。

解法一:MOV55H,15H

解法二:MOVR6,15H

解法三:MOVR1,#15H

解法四:MOVA,15H

解:30H和40H單元中都裝有數(shù)據(jù),要想把其中的內(nèi)容相交換必須尋求第三個存儲單元對其中的一個數(shù)進行緩沖,這個存儲單元若選為累加器A,則相應程序如下:(2)MOVA,#40H和MOVA,40H解:它3.3.2片外RAM數(shù)據(jù)傳送類指令1)要訪問片外RAM,必須知道片外RAM單元的地址,在后兩條指令中,地址是被直接放在DPTR中,可尋址片外RAM的64KB空間。

2)使用訪問片外RAM數(shù)據(jù)傳送指令時,應當首先將要讀或寫的地址送入DPTR或Ri中,然后再用讀或者寫命令。

3)也可以由P2與R0或P2與R1組成16位地址指針,尋址片外RAM的64KB空間。3.3.2片外RAM數(shù)據(jù)傳送類指令1)要訪問片外RAM,必3.3.3程序存儲器向累加器A傳送數(shù)據(jù)類指令1)MOVCA,@A+DPTR:這條指令的執(zhí)行結果只與指針DPTR及累加器A的內(nèi)容有關,與該指令存放的地址無關。

2)MOVCA,@A+PC:這條指令的優(yōu)點是不改變SFR和PC的狀態(tài),只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。3.3.3程序存儲器向累加器A傳送數(shù)據(jù)類指令1)MOVC3.3.3程序存儲器向累加器A傳送數(shù)據(jù)類指令圖3-5查表指令3.3.3程序存儲器向累加器A傳送數(shù)據(jù)類指令圖3-5查表圖3-60~9二次方值表圖3-60~9二次方值表3.3.4數(shù)據(jù)交換類指令1.字節(jié)交換指令(Exchange,XCH

2.半字節(jié)交換指令(1條)

3.累加器A高低半字節(jié)交換指令(1條)3.3.4數(shù)據(jù)交換類指令1.字節(jié)交換指令(Exchange1.字節(jié)交換指令(Exchange,XCHXCH

A,Rn;(A)←→(Rn)XCH

A,@Ri;(A)←→((Ri))XCH

A,direct;(A)←→(direct)指令功能:將累加器A的內(nèi)容與源操作數(shù)(Rn、direct或@Ri)所指定單元的內(nèi)容相互交換。1.字節(jié)交換指令(Exchange,XCHXCHA,Rn2.半字節(jié)交換指令(1條)XCHDA,@Ri;(A)3~0←→((Ri))3~0指令功能:將累加器A中的內(nèi)容的低4位與Ri所指的片內(nèi)RAM單元中的低4位互換,但它們的高4位均不變。例如,設(A)=0ABH,(R0)=30H,(30H)=12H,執(zhí)行指令“XCHDA,@R0”后,(A)=0A2H,(30H)=1BH。2.半字節(jié)交換指令(1條)XCHDA,@Ri;(A)3.累加器A高低半字節(jié)交換指令(1條)解:本題是一個字節(jié)交換問題,故可以采用3條字節(jié)交換指令中的任何一條。若采用第三條字節(jié)交換指令,則相應程序為

解:0~9的ASCII碼為30H~39H。進行比較后發(fā)現(xiàn),兩者之間僅相差30H,故可以利用半字節(jié)指令把0~9的數(shù)裝配成相應的ASCII碼。程序如下:3.累加器A高低半字節(jié)交換指令(1條)解:本題是一個字節(jié)交換3.3.5堆棧操作類指令1)PUSH稱為壓棧指令,將指定的直接尋址單元的內(nèi)容壓入堆棧。

2)POP稱為出棧指令,它是將當前堆棧指針SP所指示的單元內(nèi)容彈出到指定的片內(nèi)RAM單元中,然后再將SP減1。3.3.5堆棧操作類指令1)PUSH稱為壓棧指令,將指定的圖3-7堆棧指令執(zhí)行過程

a)指令“PUSH40H”操作示意圖b)指令“POP30H”操作示意圖圖3-7堆棧指令執(zhí)行過程

a)指令“PUSH40H”操3.4算術運算類指令3.4.1加法指令

3.4.2減法指令

3.4.3乘法指令

3.4.4除法指令3.4算術運算類指令3.4.1加法指令

3.4.2減法3.4.1加法指令1.不帶進位位的加法指令(Addition,ADD

100110100

2.帶進位加法指令(Addition

3.增量指令(Increase,INC

4.十進制調整指令(Decimal3.4.1加法指令1.不帶進位位的加法指令(Additio1.不帶進位位的加法指令(Addition,ADD解:100001011.不帶進位位的加法指令(Addition,ADD解:2.帶進位加法指令(Addition解:參考程序如下:2.帶進位加法指令(Addition解:參考程序如下:3.增量指令(Increase,INC解:3.增量指令(Increase,INC解:4.十進制調整指令(Decimal1)這條指令必須緊跟在ADD或ADDC指令之后,對加法指令的結果進行調整,且這里的ADD或ADDC的操作是對壓縮的BCD碼表示的數(shù)進行運算。

2)DA指令不影響溢出標志。4.十進制調整指令(Decimal1)這條指令必須緊跟在AD1W4.TIF1W4.TIF3.4.2減法指令1.帶借位減法指令(Subtract

2.減1指令(Decrease,DEC3.4.2減法指令1.帶借位減法指令(Subtract

21.帶借位減法指令(Subtract圖3-8例題3-19程序

流程圖1.帶借位減法指令(Subtract圖3-8例題3-19程2.減1指令(Decrease,DEC解:首先要考慮到“DAA”指令只能對加法調整,故必須先化BCD減法為加法,關鍵是求兩位十進制減數(shù)的補碼(9AH-減數(shù)),如圖3-8所示。2.減1指令(Decrease,DEC解:首先要考慮到“DA1W5.TIF1W5.TIF1W6.TIF1W6.TIF3.4.3乘法指令1)若乘積大于255,(OV)=1;否則(OV)=0。

2)CY總是為“0”。

3)P受累加器A中的內(nèi)容影響。3.4.3乘法指令1)若乘積大于255,(OV)=1;否則圖3-9例題3-20

程序流程圖圖3-9例題3-20

程序流程圖1W7.TIF1W7.TIF3.4.4除法指令1)CY、OV,清“0”。

2)若(B)=0,(OV)=1。

3)P受累加器A中的內(nèi)容影響。

1)將要轉換的二進制數(shù)除以100,商即為百位數(shù),余數(shù)再除以10,商和余數(shù)分別為十位和個位數(shù)。

2)通過SWAP、ADD指令組成一個壓縮的BCD數(shù),其中十位數(shù)放在A7~4,個位數(shù)放在A3~0。

1)乘法指令和除法指令需要4個機器周期,是指令系統(tǒng)中執(zhí)行時間最長的指令。

2)在進行8位數(shù)乘除法運算時,必須將相應的被乘數(shù)和乘數(shù)、被除數(shù)和除數(shù)分別放入累加器A和寄存器B中,才能進行計算。

3)在51單片機中,乘法和除法指令僅適用于8位數(shù)乘法和除法運算。3.4.4除法指令1)CY、OV,清“0”。

2)若(B3.4.4除法指令圖3-10例3-21流程圖3.4.4除法指令圖3-10例3-21流程圖3.5邏輯運算類指令3.5.1累加器A的邏輯運算指令

3.5.2兩個操作數(shù)的邏輯操作運算指令3.5邏輯運算類指令3.5.1累加器A的邏輯運算指令

33.5.1累加器A的邏輯運算指令1.累加器清“0”2.累加器按位取反指令

3.循環(huán)移位指令(4條)3.5.1累加器A的邏輯運算指令1.累加器清“0”1W8.TIF1W10.TIF1W8.TIF1W10.TIF3.循環(huán)移位指令(4條)1W11.TIF1W9.TIF3.循環(huán)移位指令(4條)1W11.TIF1W9.TIF3.5.2兩個操作數(shù)的邏輯操作運算指令1.邏輯“與”操作指令(And

2.邏輯“或”操作指令(Or

3.邏輯“異或”指令(6條)3.5.2兩個操作數(shù)的邏輯操作運算指令1.邏輯“與”操作指1.邏輯“與”操作指令

ANL

A,Rn;(A)←(A)∧(Rn)ANL

A,direct;(A)←(A)∧(direct)ANL

A,@Ri;(A)←(A)∧((Ri))ANL

A,#data;(A)←(A)∧dataANL

direct,A;(direct)←(direct)∧(A)ANL

direct,#data;(direct)←(direct)∧data指令功能:將兩個操作數(shù)的內(nèi)容按位進行邏輯“與”操作,并將結果送回目的操作數(shù)的單元中。利用“與”操作可屏蔽一些位或影響標志位。例如,要將一個字節(jié)中的高4位清“0”,可用0FH進行“與”操作。1.邏輯“與”操作指令

ANLA,Rn;(A2.邏輯“或”操作指令ORL

A,Rn;(A)←(A)∨(Rn)ORL

A,direct;(A)←(A)∨(direct)ORL

A,@Ri;(A)←(A)∨((Ri))ORL

A,#data;(A)←(A)∨dataORL

direct,A;(direct)←(direct)∨(A)ORL

direct,#data;(direct)←(direct)∨data指令功能:將兩個操作數(shù)的內(nèi)容按位進行邏輯“或”操作,并將結果送回目的操作數(shù)的單元中。利用“或”操作可進行數(shù)位的組合。例如,要把數(shù)字轉換成ASCII碼,可用30H進行或操作。2.邏輯“或”操作指令ORLA,Rn;(A)3.邏輯“異或”指令(6條)解:完成本題有多種求解方法,現(xiàn)介紹其中兩種。

(1)利用MOVX

(2)利用MOVX3.邏輯“異或”指令(6條)解:完成本題有多種求解方法,現(xiàn)介(1)利用MOVX1W12.TIF(1)利用MOVX1W12.TIF(2)利用MOVX1)選用工作寄存器組中0區(qū)為工作區(qū)。

2)利用移位指令實現(xiàn)累加器A的內(nèi)容乘6。

1)ANLPSW,#11100111B;PSW的D4、D3位為00

2)CLRC(2)利用MOVX1)選用工作寄存器組中0區(qū)為工作區(qū)。

2)3.6位操作類指令3.6.1位變量傳送指令

3.6.2位變量修改指令

3.6.3位變量邏輯操作指令3.6位操作類指令3.6.1位變量傳送指令

3.6.23.6.1位變量傳送指令位變量傳送指令有互逆的2條,可實現(xiàn)進位位C與某直接尋址位bit間內(nèi)容的傳送。MOV

C,bit;(CY)←(bit)MOV

bit,C;(bit)←(CY)指令功能:把源操作數(shù)的布爾變量送到目的操作數(shù)指定的位地址單元,其中一個操作數(shù)必須為進位標志CY,另一個操作數(shù)可以是任何可直接尋址位。3.6.1位變量傳送指令位變量傳送指令有互逆的2條,可實現(xiàn)3.6.2位變量修改指令位變量修改指令共有6條,分別是對位進行清“0”、置“1”和取反指令,不影響其他標志。CLR

C;(CY)←0CLR

bit;(bit)←0CPL

C;(CY)←(/CY)CPL

bit;(bit)←(/bit)SETB

C;(CY)←1SETB

bit;(bit)←13.6.2位變量修改指令位變量修改指令共有6條,分別是對位3.6.3位變量邏輯操作指令位變量邏輯操作指令包括位變量邏輯“與”和邏輯“或”,共有4條指令。ANL

C,bit;(CY)←(CY)∧(bit)ANL

C,/bit;(CY)←(CY)∧(/bit)ORL

C,bit;(CY)←(CY)∨(bit)ORL

C,/bit;(CY)←(CY)∨(/bit)【注意】位變量邏輯運算指令中無邏輯“異或”(XRL)。3.6.3位變量邏輯操作指令位變量邏輯操作指令包括位變量邏3.6.3位變量邏輯操作指令圖3-11例3-29硬件邏輯電路3.6.3位變量邏輯操作指令圖3-11例3-29硬件邏輯3.7控制轉移類指令3.7.1無條件轉移指令

3.7.2條件轉移指令

3.7.3調用與返回指令3.7控制轉移類指令3.7.1無條件轉移指令

3.7.23.7.1無條件轉移指令1.絕對轉移指令(Absolute

2.相對轉移指令(Short

3.長轉移指令(Long

4.間接轉移指令(散轉指令)3.7.1無條件轉移指令1.絕對轉移指令(Absolute1.絕對轉移指令(Absolute1W13.TIF1.絕對轉移指令(Absolute1W13.TIF1.絕對轉移指令(Absolute1W14.TIF1.絕對轉移指令(Absolute1W14.TIF2.相對轉移指令

SJMP

rel;(PC)←(PC)+2+rel轉移范圍為當前PC值的-128~+127范圍內(nèi),共256個單元。若偏移量rel取值為0FEH(-2的補碼),則目標地址等于源地址,相當于動態(tài)停機,程序終止在這條指令上,停機指令在調試程序時很有用。51系列單片機沒有專用的停機指令,若要求動態(tài)停機可用SJMP指令來實現(xiàn):HERE:SJMP

HERE;動態(tài)停機2.相對轉移指令

SJMPrel;(PC)←(PC)+23.長轉移指令

LJMP

addr16;(PC)←addr16執(zhí)行該指令時,將16位目標地址addr16裝入PC,程序無條件轉向指定的目標地址。轉移指令的目標地址可在64KB程序存儲器地址空間的任何地方,不影響任何標志。4.間接轉移指令(散轉指令)JMP

@A+DPTR;(PC)←(A)+(DPTR)3.長轉移指令

LJMPaddr16;(PC)←addr4.間接轉移指令(散轉指令)JMP

@A+DPTR;(PC)←(A)+(DPTR)指令功能:把累加器A中的8位無符號數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,其和作為下一條指令的地址送入PC,不影響標志位。間接轉移指令采用變址方式實現(xiàn)無條件轉移,其特點是轉移地址可以在程序運行中加以改變。例如,把DPTR作為基地址時,根據(jù)A的不同值就可以實現(xiàn)多分支轉移,故一條指令可完成多條條件判斷轉移指令功能。這種功能稱為散轉功能,所以間接指令又稱為散轉指令。4.間接轉移指令(散轉指令)JMP@A+DPTR;(PC3.7.2條件轉移指令1.進位/無進位轉移指令

2.累加器內(nèi)容為零/非零轉移指令3.比較不相等轉移指令4.減1不為零轉移指令5.位測試指令3.7.2條件轉移指令1.進位/無進位轉移指令

2.累加器1.進位/無進位轉移指令JC

rel;(CY)=1,則(PC)←(PC)+2+rel

;(CY)=0,則(PC)←(PC)+2JNC

rel;(CY)=0,則(PC)←(PC)+2+rel

;(CY)=1,則(PC)←(PC)+2指令功能:第一條指令執(zhí)行時,先判斷CY中的值。若CY=1,則程序發(fā)生轉移;若(CY)=0,則程序不轉移,繼續(xù)執(zhí)行原程序。第二條指令執(zhí)行時的情況與第一條指令恰好相反:若(CY)=0,則程序發(fā)生轉移;若(CY)=1,則程序不轉移,繼續(xù)執(zhí)行原程序。1.進位/無進位轉移指令JCrel;(CY)=1,則2.累加器內(nèi)容為零/非零轉移指令圖3-12JZ和JNZ指令執(zhí)行示意圖

a)JZrel指令b)JNZrel指令2.累加器內(nèi)容為零/非零轉移指令圖3-12JZ和JNZ指令3.比較不相等轉移指令1)這4條指令都是三字節(jié)指令,指令執(zhí)行時PC3次加1,然后再加地址偏移量rel。

2)指令執(zhí)行過程中的比較操作實際上是減法操作,但不保存兩數(shù)之差,產(chǎn)生CY標志。

3)若參加比較的兩個操作數(shù)X和Y是無符號數(shù),則可以直接根據(jù)指令執(zhí)行后產(chǎn)生的CY來判斷兩個操作數(shù)的大小。

4)若參加比較的兩個操作數(shù)X和Y是有符號數(shù)補碼。3.比較不相等轉移指令1)這4條指令都是三字節(jié)指令,指令執(zhí)圖3-13帶符號數(shù)的比較方法圖3-13帶符號數(shù)的比較方法4.減1不為零轉移指令DJNZ

Rn,rel;兩字節(jié)指令DJNZ

direct,rel;三字節(jié)指令,direct可以是片內(nèi)RAM任意字節(jié)地址指令功能:把源操作數(shù)減1,結果回送到源操作數(shù)中去,如果結果不為0則轉移?!咀⒁狻窟@兩條指令均可以構成循環(huán)結構程序。4.減1不為零轉移指令DJNZRn,rel;兩字節(jié)指令5.位測試指令JB

bit,rel;(bit)=1,則(PC)←(PC)+3+rel

;(bit)=0,則(PC)←(PC)+3JNB

bit,rel;(bit)=0,則(PC)←(PC)+3+rel

;(bit)=1,則(PC)←(PC)+3JBC

bit,rel;(bit)=1,則(PC)←(PC)+3+rel且(bit)←0

;(bit)=0,則(PC)←(PC)+3指令功能:當某一特定條件滿足時,執(zhí)行轉移操作指令(相當于一條相對轉移指令);條件不滿足時,順序執(zhí)行下面的一條指令。5.位測試指令JBbit,rel;(解:程序如下:圖3-14按鍵連接圖及流程圖解:程序如下:圖3-14按鍵連接圖及流程圖解:程序如下。圖3-15主程序與子程序結構

a)二次調用b)二級子程序嵌套解:程序如下。圖3-15主程序與子程序結構

a)二次調用3.7.3調用與返回指令1.絕對調用指令(Absolute

2.長調用指令(Long

3.返回指令(2條)

4.空操作指令(1條)3.7.3調用與返回指令1.絕對調用指令(Absolute3.7.3調用與返回指令圖3-16二級子程序嵌套及斷點地址存放

a)二級子程序嵌套示意圖b)轉入子程序2時的堆棧3.7.3調用與返回指令圖3-16二級子程序嵌套及斷點地1.絕對調用指令(Absolute1)(PC)+2→(PC),并壓入堆棧,先壓入PC低8位,后壓入PC高8位。

2)PC15~11a10~0→PC,獲得子程序起始地址。1.絕對調用指令(Absolute1)(PC)+2→(P圖3-17例3-36圖圖3-17例3-36圖2.長調用指令(Long1)(PC)+3→(PC),并壓入堆棧,先壓入PC的低8位,后壓入PC的高8位。

2)addr16→PC,獲得子程序起始地址。

3)可調用64KB地址范圍內(nèi)的任意子程序。

1)轉移指令不保存返回地址,而子程序調用指令在轉向目的地址的同時,必須保留返回地址(也稱為斷點地址),以便執(zhí)行返回指令時回到主程序斷點的位置。

2)堆棧是片內(nèi)RAM中一片存儲區(qū),采用先進后出的原則存取數(shù)據(jù),調用時保護斷點的工作由調用指令完成,調用后恢復斷點的工作由返回指令完成。2.長調用指令(Long1)(PC)+3→(PC),并壓3.返回指令(2條)(1)子程序的返回

(2)中斷返回指令3.返回指令(2條)(1)子程序的返回

(2)中斷返回指(1)子程序的返回RET;PC15~PC8←(SP),(SP)←(SP)-1

;PC7~PC0←(SP),(SP)←(SP)-1指令功能:RET(Return)指令從堆棧中取出16位斷點地址送回PC,使子程序返回主程序。(1)子程序的返回RET;PC15~PC8←(SP),(2)中斷返回指令RETI;PC15~PC8←(SP),(SP)←(SP)-1

;PC7~PC0←(SP),(SP)←(SP)-1指令功能:RETI(ReturnforInterrupt)將堆棧頂部2字節(jié)的內(nèi)容送到PC中,該指令用于中斷服務程序的末尾。與RET指令不同之處:RETI指令還具有清除中斷優(yōu)先級觸發(fā)器狀態(tài)、恢復中斷邏輯等功能。(2)中斷返回指令RETI;PC15~PC8←(SP),((2)中斷返回指令圖3-18紅綠燈和P1口連接圖(2)中斷返回指令圖3-18紅綠燈和P1口連接圖4.空操作指令(1條)1)該指令不執(zhí)行任何操作,僅僅將PC加1,使程序繼續(xù)向下執(zhí)行。

2)該指令為單周期指令,所以在時間上占用一個機器周期,常用于程序的等待或時間的延遲。4.空操作指令(1條)1)該指令不執(zhí)行任何操作,僅僅將PC3.8匯編語言程序設計3.8.1匯編語言程序設計概述

3.8.2常用偽指令

3.8.3順序結構程序設計

3.8.4分支結構程序設計

3.8.5循環(huán)結構程序設計

3.8.6子程序設計

3.8.7綜合編程舉例3.8匯編語言程序設計3.8.1匯編語言程序設計概述

33.8.1匯編語言程序設計概述1.程序設計的三種語言

2.匯編語言程序設計思路3.8.1匯編語言程序設計概述1.程序設計的三種語言

2.1.程序設計的三種語言(1)機器語言

(2)匯編語言

(3)高級語言1.程序設計的三種語言(1)機器語言

(2)匯編語言

((1)機器語言在計算機中,用二進制代碼表示的指令、數(shù)字和符號簡稱為機器語言。直接用機器語言編寫的程序稱為機器語言程序。但是用機器語言編制的程序不易看懂,難于編寫、難于查錯和難于交流,容易出錯。(1)機器語言在計算機中,用二進制代碼表示的指令、數(shù)字和符(2)匯編語言匯編語言是一種面向機器的程序設計語言,它用英文字符來代替對應的機器語言。例如,用ADD代替機器語言中的加法運算,這些英文字符被稱為助記符。(2)匯編語言匯編語言是一種面向機器的程序設計語言,它用英(3)高級語言計算機高級語言是一種面向算法、過程和對象的程序設計語言,它采用更接近人們習慣的自然語言和數(shù)學語言描述算法、過程和對象,如BASIC、C、Java等都是常用的高級語言。(3)高級語言計算機高級語言是一種面向算法、過程和對象的程2.匯編語言程序設計思路(1)分析問題,確定算法

(2)畫程序流程圖

(3)編寫源程序

(4)匯編和調試2.匯編語言程序設計思路(1)分析問題,確定算法

(2)(1)分析問題,確定算法先對所需解決的問題進行分析,明確目的和任務,了解現(xiàn)有條件和目標要求后再確定解決該問題的方法和步驟,即通常所說的算法。對于一個問題,一般有多種不同的解決方案,通過比較從中挑選最優(yōu)方案。(1)分析問題,確定算法先對所需解決的問題進行分析,明確目(2)畫程序流程圖把算法用流程圖描述出來,即用流程圖中的各種圖形、符號、流向線等來描述程序設計的過程,它可以清晰表達程序的設計思路。起止框:開始和結束框,在程序的開始和結束時使用。判斷框:進行條件判斷,以決定程序的流向。處理框:表示各種處理和運算。流向線:表示程序執(zhí)行的流向。連接點:圈中標注相同數(shù)字或符號的,表示連接在一起。(2)畫程序流程圖把算法用流程圖描述出來,即用流程圖中的(3)編寫源程序根據(jù)流程圖中各部分的功能,選取合適的指令和結構編寫出具體程序。(3)編寫源程序根據(jù)流程圖中各部分的功能,選取合適的指令和(4)匯編和調試對已編寫好的程序,先進行匯編。在匯編過程中,若還有語法錯誤,需要對源程序進行修改。匯編工作完成后,上機調試運行。先輸入給定的數(shù)據(jù),運行程序,檢查運行結果是否正確,若發(fā)現(xiàn)錯誤,通過分析,再對源程序進行修改。(4)匯編和調試對已編寫好的程序,先進行匯編。在匯編過程中3.8.2常用偽指令1.匯編起始地址偽指令

2.匯編結束偽指令

3.定義字節(jié)數(shù)據(jù)偽指令

4.定義字數(shù)據(jù)偽指令

5.賦值偽指令

6.數(shù)據(jù)地址賦值偽指令

7.位地址符號定義偽指令3.8.2常用偽指令1.匯編起始地址偽指令

2.匯編結束偽1.匯編起始地址偽指令對已編寫好的程序,先進行匯編。在匯編過程中,若還有語法錯誤,需要對源程序進行修改。匯編工作完成后,上機調試運行。先輸入給定的數(shù)據(jù),運行程序,檢查運行結果是否正確,若發(fā)現(xiàn)錯誤,通過分析,再對源程序進行修改。1.匯編起始地址偽指令對已編寫好的程序,先進行匯編。在匯編過2.匯編結束偽指令格式:END指令功能:END是匯編源程序的結束標志,在整個源程序中只能有一條END命令,且位于程序的最后。如果END命令出現(xiàn)在中間,則其后的源程序匯編時將不予處理。2.匯編結束偽指令格式:3.定義字節(jié)數(shù)據(jù)偽指令格式:[標號:]DB

8位字數(shù)據(jù)表指令功能:DB(DefinitionByte)命令用于定義從指定的地址開始,在程序存儲器的連續(xù)單元中定義字數(shù)據(jù)。常用于存放數(shù)據(jù)表格。說明:字節(jié)數(shù)據(jù)可以是一字節(jié)常數(shù)或字符,或用逗號分開的字符串,或用引號括起來的字符串。3.定義字節(jié)數(shù)據(jù)偽指令格式:4.定義字數(shù)據(jù)偽指令格式:[標號:]DW

16位字數(shù)據(jù)表指令功能:DW(DefinitionWord)命令用于定義從指定地址開始,在程序存儲器的連續(xù)單元中定義16位的字數(shù)據(jù)。說明:存放時,數(shù)據(jù)的高8位在前(低地址),低8位在后(高地址)。4.定義字數(shù)據(jù)偽指令格式:5.賦值偽指令格式:字符名稱EQU賦值項指令功能:EQU(Equate)用于給字符名稱賦值。賦值后,其符號值在整個程序中有效。說明:賦值項可以是常數(shù)、地址、標號或表達式。其值為8位或16位二進制數(shù)。賦值以后的字符名稱既可以作立即數(shù)使用,也可以作地址使用。必須先定義后使用,放在程序開頭。5.賦值偽指令格式:6.數(shù)據(jù)地址賦值偽指令1)EQU指令可以把一個匯編符號賦給一個字符名稱,而DATA指令不能。

2)EQU指令應先定義后使用,而DATA指令可以先使用后定義。6.數(shù)據(jù)地址賦值偽指令1)EQU指令可以把一個匯編符號賦給7.位地址符號定義偽指令格式:字符名稱BIT位地址指令功能:用于給字符名稱賦以位地址。說明:位地址可以是絕對地址,也可以是符號地址(即位符號名稱)。例如:KEY0

BIT

P1.0表示把P1.0的位地址賦給變量KEY0,在其后的編程過程中,KEY0就可以作為位地址(P1.0)使用。7.位地址符號定義偽指令格式:3.8.3順序結構程序設計解:兩位壓縮BCD碼轉換成二進制數(shù)的算法為:(a1a0)BCD=10×a1+a0,程序流程圖如圖3-19所示。3.8.3順序結構程序設計解:兩位壓縮BCD碼轉換成二進制3.8.3順序結構程序設計圖3-19例3-38流程圖3.8.3順序結構程序設計圖3-19例3-38流程圖3.8.4分支結構程序設計1)建立測試條件。

2)選用合適的條件轉移指令。

3)在轉移的目的地址處設定標號。

1.單分支程序

2.多分支程序3.8.4分支結構程序設計1)建立測試條件。

2)選用3.8.4分支結構程序設計圖3-20分支結構圖3.8.4分支結構程序設計圖3-20分支結構圖圖3-21分支程序結構圖

a)單分支結構圖b)雙分支結構圖c)多支結構圖圖3-21分支程序結構圖

a)單分支結構圖b)雙分支結構1.單分支程序單分支程序是通過條件轉移指令實現(xiàn)的,即根據(jù)條件對程序的執(zhí)行結果進行判斷,條件滿足則進行程序轉移,條件不滿足則程序順序執(zhí)行。在51系列單片機指令系統(tǒng)中,可利用JZ、JNZ、CJNE、DJNZ、JC、JNC、JB、JNB、JBC等指令,完成為0、為1、為正、為負以及相等、不相等各種條件判斷。1.單分支程序單分支程序是通過條件轉移指令實現(xiàn)的,即根據(jù)條件解:根據(jù)題意,程序流程如圖3-22所示。圖3-22例3-39流程圖解:根據(jù)題意,程序流程如圖3-22所示。圖3-22例3-32.多分支程序1)使用多條CJNE指令,通過逐次比較,實現(xiàn)多分支程序轉移。

2)使用查地址表方法實現(xiàn)多分支程序轉移。2.多分支程序1)使用多條CJNE指令,通過逐次比較,實現(xiàn)圖3-23例題3-41程序流程圖圖3-23例題3-41程序流程圖3.8.5循環(huán)結構程序設計1)循環(huán)初始化。

2)循環(huán)體。

3)循環(huán)控制。

4)循環(huán)結束。

1.單重循環(huán)程序

2.多重循環(huán)程序3.8.5循環(huán)結構程序設計1)循環(huán)初始化。

2)循環(huán)體圖3-24循環(huán)程序結構

a)先處理后控制b)先控制后處理圖3-24循環(huán)程序結構

a)先處理后控制b)先控制后處理圖3-25例3-42流程圖圖3-25例3-42流程圖圖3-26例3-43流程圖圖3-26例3-43流程圖圖3-27例3-44圖

a)硬件連線圖b)程序流程圖圖3-27例3-44圖

a)硬件連線圖b)程序流程圖3.8.6子程序設計1.子程序的調用與返回

2.保存與恢復寄存器內(nèi)容

3.子程序的參數(shù)傳遞

4.子程序的嵌套

5.典型子程序設計

0123456789ABCDEF3.8.6子程序設計1.子程序的調用與返回

2.保存與恢復1.子程序的調用與返回(1)子程序的調用

(2)子程序的返回1.子程序的調用與返回(1)子程序的調用

(2)子程序的2.保存與恢復寄存器內(nèi)容(1)保護現(xiàn)場

溫馨提示

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

評論

0/150

提交評論