單片機課件3教材_第1頁
單片機課件3教材_第2頁
單片機課件3教材_第3頁
單片機課件3教材_第4頁
單片機課件3教材_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本章主要內(nèi)容1.MCS-51單片機的尋址方式、2.數(shù)據(jù)傳送指令3.算術邏輯運算指令4.移位指令指令:計算機用于控制各功能部件完成某一指定動作的指示和命令稱為指令。指令的表示形式:

(1)指令的二進制形式

機器碼、源程序的目標代碼均為二進制形式,直接為計算機識別和執(zhí)行。讀/寫和記憶困難。(2)指令的十六進制形式

指令的十六進代碼需翻譯成二進制代碼才能被計算機識別和執(zhí)行。特點是方便讀,寫和記憶困難。

(3)指令助記符

用英文字母、單詞表征指令的功能。其源程序必須翻譯成機器碼(目標代碼)才能被計算機識別和執(zhí)行,轉(zhuǎn)換成機器語言的過程稱為匯編,特點是方便讀/寫和記憶。3.1概述

3.1.1指令的三種表示形式0010010000001000B

2408H

ADDA,#08H指令格式:指令的表示方式稱為指令格式,它規(guī)定了指令的長度和內(nèi)部信息的安排。完整的指令格式如下:[標號:]操作碼[操作數(shù)][,操作數(shù)][;注釋]標號:指本條指令起始地址的符號,也稱為指令的符號地址

代表該條指令在程序編譯時的具體地址。操作碼:又稱助記符,它一般是英文的縮寫,規(guī)定了指令具體的操作功能,描述指令的操作性質(zhì),是指令語句的關鍵,指令中不可缺少的部分。操作數(shù):可以是一個具體的數(shù)據(jù),或是存放數(shù)據(jù)的地址。注釋:可選項,是為增加程序的可讀性而設置的,是針對某指令而添加的說明性文字,不產(chǎn)生可執(zhí)行的目標代碼。3.1.2匯編語言指令格式其中符號地址和操作碼之間用“:”作為分隔符,也可再加上若干空格。操作碼和操作數(shù)之間用空格作為分隔符。操作數(shù)之間用“,”作為分隔符。注釋之前用“;”作為分隔符。MAIN:MOVA,#10H3.1.3指令的分類

MCS-51指令系統(tǒng)有111條指令,可按下列幾種方式分類:1.按指令字節(jié)數(shù)分類

每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:單字節(jié)(49條),雙字節(jié)(46條),3字節(jié)(16條)。2.按指令執(zhí)行時間分類

每條指令在執(zhí)行時要花去一定的時間,以機器周期為單位。按指令執(zhí)行時間分類:單機器周期指令(65條)、雙機器周期指令(44條)和四機器周期指令(2條)。3.按功能分類

按功能可分為5大類:數(shù)據(jù)傳送指令(29條)、算術操作指令(24條)、邏輯操作指令(24條)、控制轉(zhuǎn)移指令(17條)和位操作指令(17條)。指令的字節(jié)數(shù):

一般地,指令操作碼占1字節(jié);操作數(shù)中,直接地址direct占1字節(jié),8位數(shù)據(jù)#data占1字節(jié),16位數(shù)據(jù)#data16占兩字節(jié);操作數(shù)中的A、B、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC、SFR等均隱含在操作碼中。(1)1字節(jié)指令(單字節(jié)指令)

①指令中無操作數(shù),只有操作碼。NOPRET②操作數(shù)的寄存器號隱含在指令碼中。

MOVA,Rn;指令碼為11101rrr

INCDPTR

;指令碼為A3H(2)2字節(jié)指令(雙字節(jié)指令)

指令的第一字節(jié)為操作碼,第二字節(jié)為操作數(shù)。指令的格式:操作碼操作數(shù)

MOVA,#data;指令碼為01110100#data(3)3字節(jié)指令(三字節(jié)指令)

指令的第一字節(jié)為操作碼,第二字節(jié)為目的操作數(shù),第三字節(jié)為源操作數(shù)。指令的格式:操作碼目的操作數(shù),源操作數(shù)

ANLdirect,#data;指令碼為01010011direct#data3.1.4指令中的常用符號

Rn:表示當前工作寄存器R0~R7中的一個。@Ri:表示寄存器間接尋址,常作間接尋址的地址指針。其中Ri代表R0和R1寄存器中的一個。direct:表示內(nèi)部數(shù)據(jù)存貯器單元的地址及特殊功能寄存器SFR的地址,對SFR而言,既可使用它的物理地址,也可直接使用它的名字。

#data:表示8位立即數(shù),即8位常數(shù),取值范圍為#00H~#0FFH

#data16:表示16位立即數(shù),即16位常數(shù),取值范圍為#0000H~#0FFFFH。

addr16:表示16位地址。

addr11:表示11位地址rel:用補碼形式表示的地址偏移量,取值范圍為-128~+127bit:表示內(nèi)部RAM和SFR中的具有位尋址功能的位地址。@:表示間接尋址寄存器或基址寄存器的前綴符號。$: 表示當前指令的地址。/: 位操作數(shù)的前綴,表示對該位操作數(shù)取反,如:/bit。(x):表示存儲單元x的內(nèi)容。((x)):表示以寄存器或存儲單元x的內(nèi)容作為地址的存儲單元的內(nèi)容?!罕硎緮?shù)據(jù)傳送方向C:表示PSW中的進位標志位Cy。尋址方式:在計算機中,說明操作數(shù)所在地址的方法稱為指令的尋址方式?;蛘邽橹噶畎吹刂帆@得操作數(shù)的方式。MCS-51單片機的指令系統(tǒng)提供了七種尋址方式,分別為:

3.2尋址方式

立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對尋址、位尋址

定義:立即參與操作的數(shù)據(jù)直接寫在指令中,這種尋址方式稱為立即尋址。表示方法:立即數(shù)通常使用#data或#data16表示,在立即數(shù)前面加“#”標志,區(qū)別于直接尋址中的直接地址(direc或bit)。

MOVA,#64H;(A)←立即數(shù)64HADDA,#05H;(A)←(A)+立即數(shù)05H

MOVDPTR,#1000H;(DPTR)←1000H3.2.1立即尋址

3.2.3直接尋址定義:將操作數(shù)的地址直接存放在指令中,這種尋址方式稱為直接尋址。尋址范圍:片內(nèi)RAM區(qū)00H-7FH、SFRMOVR1,1FH;(R1)←(1FH)MOV30H,4AH;(30H)←(4AH)3.2.2寄存器尋址定義:操作數(shù)存放在某個工作寄存器Rn(R0~R7)或部分專用寄存器中特點:由指令指出某一個寄存器的內(nèi)容作為操作數(shù)。存放操作數(shù)的寄存器在指令代碼中不占據(jù)單獨的一個字節(jié),而是嵌入(隱含)到操作碼字節(jié)中。尋址范圍:四組通用寄存器Rn(R0~R7)、部分專用寄存器(A,B,Cy)。

MOVA,B

;(A)←(B)

MOV30H,R0;(30H)←(R0)3.2.4寄存器間接尋址定義:指令給出的寄存器中存放的是操作數(shù)據(jù)的單元地址特點:是一種二次尋找操作數(shù)地址的尋址方式,寄存器前邊必須加前綴符號“@”。不能用于尋址特殊功能寄存器SFR。

尋址范圍:內(nèi)部RAM低128B(只能使用R0或R1作間址寄存器)、外部RAM(00H-FFH)(使用R0或R1作間址寄存器或者DPTR)

外部RAM(0100H-FFFFH)(只能使用DPTR作間址寄存器)。

MOVR1,#30H;(R1)←立即數(shù)30HMOV@R1,#0FFH;(30H)←立即數(shù)FFHMOVA,@R1;(A)←((30H))=立即數(shù)FFH

3.2.5變址尋址定義:操作數(shù)存放在變址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址單元中。稱為基址加變址寄存器間接尋址,簡稱為變址尋址。特點:在執(zhí)行變址尋址指令時,MCS-51單片機先把基地址(DPTR或PC的內(nèi)容)和地址偏移量(A的內(nèi)容)相加,以形成操作數(shù)地址,再由操作數(shù)地址找到操作數(shù),并完成相應的操作。變址尋址方式是單字節(jié)指令。尋址范圍:只能對程序存儲器ROM進行尋址,主要用于查表性質(zhì)的訪問。注意:累加器A中存放的操作數(shù)為00H~FFH(無符號數(shù))。共有三條變址尋址指令:

MOVCA,@A+PC ;(A)←((A)+(PC)+1)

MOVCA,@A+DPTR;(A)←((A)+(DPTR))

JMP@A+DPTR;(PC)←(A)+(DPTR)如:(DPTR)=1234H,(A)=50H,程序存儲器(1284H)=65H。執(zhí)行

MOVCA,@A+DPTR;(A)←((A)+(DPTR))3.2.6相對尋址定義:將程序計數(shù)器PC的當前值(取出本條指令后的PC值)與指令第二個字節(jié)給出的偏移量(rel)相加,形成新的轉(zhuǎn)移目標地址。稱為相對尋址方式。尋址范圍:只能對程序存儲器ROM進行尋址。相對地址偏移量(rel)是一個帶符號的8位二進制補碼,其取值范圍為

128~+127(以PC為中間的256個字節(jié)范圍)。在實際編程中,“rel”通常用“標號”代替。如:

SJMPrel;(PC)←(PC)+2+rel

雙字節(jié)指令

相對轉(zhuǎn)移指令的目的地址=指令地址+指令字節(jié)數(shù)+偏移量特點:相對尋址方式是為實現(xiàn)程序的相對轉(zhuǎn)移而設計的,為相對轉(zhuǎn)移指令所使用,其指令碼中含有相對地址偏移量,能生成浮動代碼。3.2.7位尋址定義:指令中給出的操作數(shù)是一個可單獨尋址的位地址特點:位尋址是直接尋址方式的一種,其特點是對8位二進制數(shù)中的某一位的地址進行操作。(3)位的符號地址(位名稱)的形式。

對于部分特殊功能寄存器,其各位均有一個特定的名字,所以可以用它們的位名稱來訪問該位。ANLC,P;(C)←(C)∧(P)(1)直接使用位地址形式。

MOVC,00H;(Cy)

←(00H)

其中:00H是片內(nèi)RAM中20H地址單元的第0位。(2)字節(jié)地址加位序號的形式

MOVC,20H.0;(Cy)

←(20H.0)尋址范圍:片內(nèi)RAM低128B中位尋址區(qū)、部分SFR(其中有83位——單元地址可被8整除的SFR的各位可以位尋址)。(4)字節(jié)符號地址(字節(jié)名稱)加位序號的形式。對于部分特殊功能寄存器(如狀態(tài)標志寄存器PSW),還可以用其字節(jié)名稱加位序號形式來訪問某一位。CPLPSW.6;(AC)←()

[例]

指出下列指令中源操作數(shù)的尋址方式

MOVA,R1;(A)←(R1)

ADDA,#05H;(A)←(A)+立即數(shù)05HMOVA,@R1;(A)←((R1))MOV30H,4AH;(30H)←(4AH)

MOVCA,@A+DPTR;(A)←((A)+(DPTR))SJMP#81H;(PC)←(PC)+2-127

MOV65H,C;(65H)←(Cy)寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址相對尋址位尋址3.3數(shù)據(jù)傳送指令

數(shù)據(jù)傳送指令共29條,可分為五類內(nèi)部RAM間傳送:(MOV——16條)外部RAM與累加器間傳送:(MOVX——4條)ROM向累加器傳送:(MOVC——2條)數(shù)據(jù)交換:(SWAP,XCH,XCHD——5條)堆棧操作:(PUSH,POP——2條)1.內(nèi)部RAM數(shù)據(jù)傳送指令(16條)(1)以累加器A為目的操作數(shù)(4條)

MOVA,<src>

其中:

<src>包括Rn、@Ri、direct、#data。

如:MOVA,30H——A

(30H)

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

MOVRn,<src>

其中:

<src>包括A、direct、#data。

如:MOVR7,#30H——R7

#30H(3)以直接地址單元為目的操作數(shù)(5條)

MOVdirect,<src>

其中:

<src>包括A、Rn、@Ri、direct、#data。

如:MOV30H,20H;30H

(20H)(4)以間址寄存器@Ri為目的操作數(shù)(3條)

MOV@Ri,<src>

其中:

<src>包括A、direct、#data。

如:MOV@R1,A;(R1)

(A)(5)16位數(shù)據(jù)傳送指令(1條)

MOVDPTR,#data16

如:MOVDPTR,#1000H;DPTR

#1000H

注:(2)、(3)、(4)、(5)均不影響標志位。內(nèi)部數(shù)據(jù)傳送指令的傳送關系如下圖所示。源和目的操作數(shù)同為一種尋址方式只有直接地址direct,即:允許在兩個內(nèi)部RAM的直接地址之間進行傳送數(shù)據(jù),不允許在兩個工作寄存器之間直接進行傳送數(shù)據(jù)。MOVA,@R0MOV30H,32HMOV32H,@R1MOV31H,A例:已知(30H)=11H,(31H)=12H,(32H)=13H,

R0=30HR1=31H,下列程序執(zhí)行完后30H,31H,32H內(nèi)存的數(shù)據(jù)分別是?2.外部RAM數(shù)據(jù)傳送指令(4條)

CPU與外部數(shù)據(jù)存儲器之間進行數(shù)據(jù)傳送時,必須使用外部傳送指令,只能通過累加器A,采用寄存器間接尋址(用R0,R1和DPTR三個間接尋址的寄存器)方式完成。指令格式:

MOVXA,<src>MOVX<dest>,A其中:

<src>、<dest>包括@DPTR、@Ri。Ri(R0,R1)只能訪問片外RAM的低256個單元;DPTR可以訪問片外RAM的全部64KB的空間。

如:MOVXA,@R1;A

((R1))

MOVX@DPTR,A;(DPTR)

(A)3.程序存儲器(ROM)數(shù)據(jù)傳送指令(查表指令)(2條)

程序存儲器的數(shù)據(jù)傳送是單向的,并且只能讀到累加器A中。這類指令專門用于查表,又稱為查表指令。

指令格式:MOVCA,@A+DPTP;

A←((A)+(DPTR))

MOVCA,@A+PC;PC←(PC)+1A←((A)+(PC))

(1)查表的位置要求不同

采用DPTR作為基地址寄存器,表可以放在64KB程序存儲器空間的任何地址,使用方便,故稱為遠程查表。采用PC作為基地址寄存器,具體的表在程序存儲器中只能在查表指令后的256B的地址空間中,故稱為近程查表。(2)偏移量的計算方法不同采用DPTR作為基地址寄存器,A為欲查數(shù)值距離表首地址的值;采用PC作為基地址寄存器,A的值必須預先加一數(shù)data:data=表首地址-當前指令的PC值-1例:已知A中有一個0-9范圍內(nèi)的數(shù),用查表指令給出該數(shù)的平方MOVDPTR,#TABLEMOVCA,@A+DPTRORG2000HTABLE:DB0,1,4,9,16,25,36,49,64,81ADDA,#data

MOVCA,@A+PCSJMP$TABLE:DB0,1,4,9,16,25,36,49,64,81data=MOVC與表首間的指令所占字節(jié)數(shù)如果表中數(shù)據(jù)每個占不止一個字節(jié)時,MOVC命令前對A適當調(diào)整4.數(shù)據(jù)交換指令(5條)(1)半字節(jié)數(shù)據(jù)交換指令(2條)

指令格式:

SWAPA;(A)3~0←→(A)7~4

XCHDA,@Ri

;(A)3~0←→((Ri))3~0

(2)字節(jié)交換指令(3條)指令格式:XCHA,<src>

其中:

<src>包括Rn、@Ri、direct。5.堆棧操作指令(2條)指令格式:

PUSHdirect;SP←(SP)+1,(SP)←(direct)

POPdirect;direct←((SP)),SP←(SP)

1PUSH和POP后一定是直接的地址

PUSHACC(不能寫成PUSHA)

POP00H(不能寫成POPR0)例:已知外部RAM的20H單元中有一個數(shù)X,內(nèi)部RAM的20H單元中有一個數(shù)Y,編程使它們相互交換MOV

R0,20HMOVXA,@R0XCH

A,R0MOVX@R0,AMOVR0,20HMOVA,R0XCHA,@R0MOVR0,A例:已知50H單元中有一個0-9的數(shù),編程轉(zhuǎn)換為其ASCII碼MOVA,#30HADDA,50HMOV50H,AMOVA,#30HMOVR0,#50HXCHDA,@R0例:設(A)=7BH;(35H)=11H

已知(SP)=60H執(zhí)行下面程序,則:

PUSHACCPUSH35HPOPACCPOP35H

;61H#7BH;62H(35H)即:62H#11H;A(62H)即:A#11H;35H(61H)即:35H#7BH3.4算術與邏輯運算和移位指令

算術運算指令的兩個參與運算的操作數(shù),一個存放在累加器A中(此操作數(shù)也為目的操作數(shù));一個存放在R0~R7、片內(nèi)RAM(direct)、@Ri(片外RAM)中,或是#data(立即數(shù))。算術運算指令可分為:加法運算:

(ADD——4條)帶進位加法運算:

(ADDC——4條)帶借位減法運算:

(SUBB——4條)加1/減1操作:

(INC,DEC——9條)單字節(jié)乘/除法運算:

(MUL,DIV——2條)十進制調(diào)整:

(DAA——1條)3.4.1算術運算1.加法指令(4條)指令格式:

ADDA,<src>;A←(A)+<src>

其中:

<src>包括Rn、@Ri、direct、#data。ADD對PSW中的所有標志位均產(chǎn)生影響。2.帶進位的加法指令(4條)指令格式:

ADDCA,<src>;A←(A)+<src>+(Cy)

其中:

<src>包括Rn、@Ri、direct、#data。對標志位的影響:ADDC對PSW中的所有標志位均產(chǎn)生影響。

3.帶借位的減法指令(4條)

指令格式:

SUBBA,<src>;A←(A)-<src>-(Cy)

其中:

<src>包括Rn、@Ri、direct、#data。對標志位的影響:SUBB對PSW中的所有標志位均產(chǎn)生影響。MCS-51中沒有不帶借位的減法指令,欲實現(xiàn)不帶借位的減法計算,應預先置Cy=0(利用CLRC指令),然后利用帶借位的減法指令SUBB實現(xiàn)計算。默認補碼格式相加,有溢處時OV置1原碼格式相加時,有溢出時,Cy為14.十進制調(diào)整指令(1條)

功能:對運算結(jié)果的十進制數(shù)進行BCD碼修正,指令格式:DAA

5.加1指令(5條)

功能:加1指令又稱為增量指令,使操作數(shù)所指定的單元的內(nèi)容加1。指令格式:INC<dest>;<dest>←<dest>+1其中:

<dest>包括A、Rn、direct、@Ri、DPTR。對標志位的影響:除對累加器A操作影響P標志位外,其他操作均不影響PSW的各標志位。

6.減1指令(4條)

功能:減1指令又稱為減量指令,操作數(shù)所指定的單元的內(nèi)容減1。指令格式:DEC<dest>;<dest>←<dest>-1

其中:

包括A、Rn、direct、@Ri。(DPTR無減1)對標志位的影響:同加1指令。十進制調(diào)整指令不能對減法指令進行修正。BCD碼減法必須采用BCD補碼運算法則,變減法為補碼加法(被減數(shù)+減數(shù)的補碼,減數(shù)的補碼=9AH-減數(shù),99H+1H=9AH)。然后對其進行十進制調(diào)整來實現(xiàn)。

1、完成85+59的BCD加法程序和一般加法程序2、已知被減數(shù)在存儲單元30H中,減數(shù)在31H中,編程的差放入32H中3、已知被減數(shù)91,減數(shù)36,編程把差放入存儲單元32H中CLRCMOVA,#5BH;#91SUBBA,#24H;#36MOV

32H,ACLRCMOVA,#9AHSUBBA,#36HADDA,#91HDAAMOV32H,AMOVA,#85ADDA,#59MOV

A,#85HADD

A,#59HDA

ACLR

CMOV

A,30HSUBBA,31HMOV

32H,A已知:M1和M2單元中存放有兩個16位無符號數(shù)X1和X2(低8位在前,高8位在后)試寫出X1+X2并把結(jié)果放在M1和M1+1單元(低8位在前,高8位在后)的程序,設兩數(shù)之和不會超過16位。MOVR0,#M1MOVR1,#M2MOVA,@R0ADDA,@R1MOV@R0,AINCR0INCR1MOVA,@R0ADDCA,@R1MOV@R0,ASJMP$7.乘除指令(2條)

功能:實現(xiàn)乘法或除法操作。特點:乘除指令在MCS-51指令系統(tǒng)中執(zhí)行時間最長,均為四周期指令。

指令格式:

MULAB

;B

A←(A)×(B)

DIVAB

;A←(A)/(B)…B

對標志位的影響:乘除指令影響PSW中的Cy,OV,P標志位。其中,Cy位總是被清0的,乘法運算中,若乘積大于FFH,則OV標志位置1,否則清0。除法運算中,若除數(shù)為0,則OV標志位置1,否則清0。例:已知兩個8位無符號乘數(shù)分別在30H和31H存儲單元中,編寫使它們相乘后,積的低8位放在32H單元,高8位放在33H單元MOV

A,30HMOV

B,31HMUL

ABMOV32H,AMOV33H,BMOV

R0,#30HMOV

A,@R0INC

R0MOV

B,@R0MUL

ABINC

R0MOV

@R0,AINC

R0MOV

@R0,B3.4.2邏輯運算(20條)對標志位的影響:邏輯運算和移位指令中除了兩條帶進位的循環(huán)移位指令外,其余均不影響PSW中的各標志位。但當目的操作數(shù)是累加器A時,影響PSW中的奇偶校驗位P。分類:常用的邏輯運算和移位類指令的操作數(shù)都是8位的。有5種邏輯與運算:(ANL——6條)邏輯或運算:(ORL——6條)邏輯異或運算:(XRL——6條)累加器清零/取反:(CLR,CPL——2條)累加器移位操作:

(RL,RLC,RR,RRC—4條)功能:除用于邏輯運算外,還可用于模擬各種數(shù)字邏輯電路的功能,進行邏輯電路的設計。1.邏輯與運算指令(6條)

功能:實現(xiàn)兩個操作數(shù)的邏輯與。指令格式:ANLA,<src>

其中:

<src>包括Rn、@Ri、direct、#data。

ANLdirect,<src>

其中:

<src>包括A、#data。適用場合:實現(xiàn)邏輯與,主要用于操作數(shù)的某些位不變(這些位與“1”),某些位置0(這些位與“0”)。2.邏輯或運算指令(6條)功能:實現(xiàn)兩個操作數(shù)的邏輯或。指令格式:ORLA,<src>

其中:

<src>包括Rn、@Ri、direct、#data。

ORLdirect,<src>

其中:

<src>包括A、#data。適用場合:實現(xiàn)邏輯或,主要用于操作數(shù)的某些位不變(這些位或“0”),某些位置1(這些位或“1”)。例:已知R0=30H,(30H)=AAH,指令執(zhí)行后A和30H單元中的內(nèi)容?(1)MOVA,#0FFHANLA,R0(2)MOVA,#0FHANLA,30H(3)ANL30H,#0F0H

例:設A=EAH,P1=F1H,編程把累加器A中的低4位送入P1口低四位,P1口高4位不變MOVR1,AANLA,#0FHANLP1,#0F0HORLP1,AMOVA,R13.邏輯異或運算指令(6條)

功能:實現(xiàn)兩個操作數(shù)的邏輯異或。指令格式:XRLA,<src>

其中:

<src>包括Rn、@Ri、direct、#data。

XRLdirect,<src>

其中:

<src>包括A、#data。適用場合:實現(xiàn)邏輯異或,主要用于操作數(shù)的某些位不變(這些位異或“0”),某些位取反(這些位異或“1”)。4.累加器清0與取反指令(2條)

指令格式:CLR

A;A←00H

CPL

A

;A←()對標志位的影響:CLRA指令只影響PSW的P標志位,CPLA指令不影響PSW各標志位。

例:已知外部RAM的30H中的數(shù)是AAH,編程使其高四位不變,低4位取反MOV

R0,#30HMOVXA,@R0XRLA,#0FHMOVX

@R0,A例:已知30H中有一個正數(shù)X,編程得到-X的補碼MOVA,30HCPLAINCAMOV30H,AXRL30H,#0FH功能:累加器A中的數(shù)據(jù)逐位左移一位相當于原內(nèi)容乘2,而逐位右移一位相當于原內(nèi)容除以2。循環(huán)移位指令示意圖如右圖所示。

3.4.3.移位指令(4條)

不帶進位的循環(huán)左移RL

不帶進位的循環(huán)右移RR

帶進位的循環(huán)左移RLC帶進位的循環(huán)右移RRC特點:只能對累加器A進行循環(huán)移位。指令格式:

操作碼A例:已知30H和31H中有一個16位二進制數(shù),30H中為低8位,編程使其擴大到2倍,并且其擴大后不超過65536CLR

CMOV

A,30HRLC

AMOV

30H,AMOV

A,31HRLC

AMOV

31H,A3.5控制轉(zhuǎn)移和位操作指令功能:改變程序計數(shù)器PC中的內(nèi)容,控制程序執(zhí)行的流向,實現(xiàn)程序分支轉(zhuǎn)向。無條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP——4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ——8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)空操作:(NOP——1條)

“耗時”一個機器周期。

對標志位的影響:除了CJNE影響PSW的進位標志位Cy外,其余均不影響PSW的各標志位。

3.5.1

位操作指令(17條)

1.無條件轉(zhuǎn)移指令(4條)

定義:不規(guī)定條件的程序轉(zhuǎn)移稱為無條件轉(zhuǎn)移指令。

長轉(zhuǎn)移指令:

LJMPaddr16;PC←addr15~0

絕對轉(zhuǎn)移指令:AJMPaddr11;PC←(PC)+2,PC10~0←addr11

相對(短)轉(zhuǎn)移指令:SJMPrel;PC←(PC)+2+rel

間接(散)轉(zhuǎn)移指令:JMP@A+DPTR;PC←(DPTR)+(A)注意:(1)使用轉(zhuǎn)移指令時,指令中的地址或偏移量均可采用標號,只有在執(zhí)行前才被匯編成實際的二進制地址。(2)指令的轉(zhuǎn)移范圍:

在執(zhí)行當前轉(zhuǎn)移指令后的PC值的基礎上:

長轉(zhuǎn)移指令LJMP:64KB

絕對轉(zhuǎn)移指令AJMP:2KB

相對(短)轉(zhuǎn)移指令SJMP:-128~+127(用補碼表示)間接(散)轉(zhuǎn)移指令JMP:64KBLJMP

0110HORG2A00HBEGIN:AJMP

0110H注意:(3)相對(短)轉(zhuǎn)移指令SJMPrel中地址偏移量的計算:

rel=轉(zhuǎn)移目標地址-轉(zhuǎn)移指令地址(當前PC值)-2(4)原地踏步(暫停當前的程序,并不是真的停機)的實現(xiàn)

SJMP$

LP:SJMPLP

(5)間接(散)轉(zhuǎn)移指令:JMP@A+DPTR常用于實現(xiàn)程序的分支轉(zhuǎn)移(散轉(zhuǎn))。DPTR為轉(zhuǎn)移目的的起始地址,A為轉(zhuǎn)移目的的偏移量。(6)在編程中,經(jīng)常使用短轉(zhuǎn)移指令SJMP和相對轉(zhuǎn)移指令AJMP,以便生成浮動代碼,并不經(jīng)常使用長轉(zhuǎn)移指令LJMP。例:A中有待處理的命令編號0-4,程序存儲器中有起始地址位PMTB的三字節(jié)長轉(zhuǎn)移指令,編程可依據(jù)A中的命令號執(zhí)行相應命令程序MOVB,#03HMULABMOVDPTR,#PMTBJMP@A+DPTRPMTB:LJMPPM0;轉(zhuǎn)入0號命令LJMPPM1….指令格式:

JZrel;若A=0,則轉(zhuǎn)移PC←(PC)+2+rel

若A≠0,則順序執(zhí)行PC←(PC)+2

JNZrel;若A≠0,則轉(zhuǎn)移PC←(PC)+2+rel

若A=0,則順序執(zhí)行PC←(PC)+2指令的轉(zhuǎn)移范圍:

rel的取值范圍是在執(zhí)行當前轉(zhuǎn)移指令后的PC值基礎上的-128~+127(用補碼表示)??梢圆捎梅柕刂繁硎?。偏移量rel的計算方法:

rel=轉(zhuǎn)移目標地址-轉(zhuǎn)移指令地址(當前PC值)-22.條件轉(zhuǎn)移指令(2條)

功能:在規(guī)定的條件滿足時進行程序轉(zhuǎn)移,否則程序往下順序執(zhí)行。MCS-51單片機中,條件轉(zhuǎn)移指令實質(zhì)上是累加器A判零指令。例:已知外部RAM中以DATA1為起始地址的數(shù)據(jù)塊以零為結(jié)束標志,編程將數(shù)據(jù)傳送到以DATA2為起始地址的內(nèi)部RAM中MOVDPTR,#DATA1MOVR0,#DATA2LOOP:MOVXA,@DPTRJZOVERMOV@R0,AINCDPTR

INCR0SJMPLOOPOVER:SJMP$3.比較轉(zhuǎn)移指令(4條)

指令格式:

CJNE目的操作數(shù),源操作數(shù),rel;

三字節(jié)指令

CJNEA,direct,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel(源為#data時,目的為A、Rn、@Ri;源為direct,目的為A。)功能:把兩個操作數(shù)進行比較,以比較的結(jié)果作為條件來控制程序的轉(zhuǎn)移。指令的轉(zhuǎn)移范圍:rel的取值范圍是在執(zhí)行當前轉(zhuǎn)移指令后的PC值基礎上的-128~+127(用補碼表示)??梢圆捎梅柕刂繁硎尽H簦康牟僮鲾?shù))=(源操作數(shù)),則程序繼續(xù)執(zhí)行,(PC)←(PC)+3若(目的操作數(shù))>(源操作數(shù)),則程序轉(zhuǎn)移,(PC)←(PC)+rel+3,Cy←0若(目的操作數(shù))<(源操作數(shù)),則程序轉(zhuǎn)移,(PC)←(PC)+rel+3,Cy←1例:比較兩數(shù)大小x存放在片內(nèi)存儲單元DATA1,y存放在DATA2,結(jié)果存放在DATA3如果x=y,結(jié)果為0如果x>y,結(jié)果為1如果x<y,結(jié)果為-1MOVA,DATA1

CJNE

A,DATA2,D1MOVDATA3,#00HSJMPOVERD1:JCD2MOVDATA3,#01HSJMPOVERD2:MOVDATA3,#0FFHOVER:SJMP$指令格式:

DJNZ<dest>,rel;<dest>←<dest>-1

若<dest>≠0,則轉(zhuǎn)移(PC)←(PC)+2+rel

<dest>=0,則不轉(zhuǎn)移(PC)←(PC)+2

其中:

<dest>為Rn、direct,為direct時為3字節(jié)指令4.循環(huán)(減1條件)轉(zhuǎn)移指令(2條)功能:具有減1判非0則轉(zhuǎn)移的功能。主要用于控制程序循環(huán),實現(xiàn)按循環(huán)次數(shù)控制循環(huán)的目的。例:編程令片內(nèi)RAM中以DAT為起始地址的數(shù)據(jù)塊中的連續(xù)10個無符號數(shù)相加,并將累加和送到SUM單元,累加和不超過8位。MOVR0,#DATMOVR1,#0AHCLRALOOP:ADDA,@R0INCR0DJNZR1,LOOPMOVSUM,A主程序與子程序之間的調(diào)用關系如左圖所示,兩級子程序嵌套的示意圖如右圖所示。

5.子程序調(diào)用與返回指令(4條)定義:具有完整功能的程序段定義為子程序,供主程序調(diào)用。功能:供主程序在需要時調(diào)用。子程序可以在程序中反復多次使用,以簡化源程序的書寫。特點:子程序可以嵌套,有利于模塊化程序設計。指令格式:(1)絕對短調(diào)用指令

ACALLaddr11;(PC)←(PC)+2,

(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)10~0←addr11

其中:

addr11為11位地址,實際編程時可以用符號地址。并且只能在2KB范圍以內(nèi)調(diào)用子程序。(2)絕對長調(diào)用指令

LCALLaddr16;(PC)←(PC)+3,

(SP)←(SP)+1,(SP)←(PC)7~0(SP)←(SP)+1,(SP)←(PC)15~8,(PC)15~0←addr16

其中:

addr16為16位地址,實際編程時可以用符號地址??梢栽?4KB范圍以內(nèi)調(diào)用子程序。子程序調(diào)用指令的功能:必須具有自動把程序計數(shù)器PC中的斷點地址保護到堆棧中,且將子程序入口地址自動送入程序計數(shù)器PC中的功能。子程序返回指令的功能:必須具有自動把堆棧中的斷點地址恢復到程序計數(shù)器PC中的功能。(3)子程序返回指令

RET;(PC)15~8←((SP)),(SP)←(SP)

1,

(PC)7~0←((SP)),(SP)←(SP)

1(4)中斷返回指令

RET

I;(PC)15~8←((SP)),(SP)←(SP)

1,

(PC)7~0←((SP)),(SP)←(SP)

1注:中斷服務程序是一種特殊的子程序,它是在計算機響應中斷時,由硬件完成調(diào)用而進入相應的中斷服務程序。區(qū)別在于RET是從子程序返回,RETI是從中斷服務程序返回。無論是RET還是RETI都是子程序執(zhí)行的最后一條指令。6.空操作指令NOP(1條)指令格式:

NOP;(PC)←(PC)+1功能:不執(zhí)行任何操作,消耗了一個機器周期,常用于軟件延時或在程序可靠性設計中用來穩(wěn)定程序。例:編程使20H~2AH、30H~3EH和40H~4FH三個區(qū)域被清零MOVR0,#20HMOVR1,#0AH

ACALL

QL

MOVR0,#30HMOVR1,#0EH

ACALL

QLMOVR0,#40HMOVR1,#0FH

ACALL

QLSJMP$QL:MOV

@R0,#00HINC

R0DJNZ

R1,QL

RET3.5.2位操作指令

位操作(布爾變量操作):字節(jié)中的某個位。每位只能取0或1。指令的尋址范圍:片內(nèi)RAM位尋址區(qū)20H~2FH,SFR中的11個可位尋址特殊寄存器中的83個可尋址位。

溫馨提示

  • 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

提交評論