學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件_第1頁
學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件_第2頁
學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件_第3頁
學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件_第4頁
學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章單片機的指令系統(tǒng)

第2章單片機的指令系統(tǒng)

1§2.1指令系統(tǒng)概述單片機所能執(zhí)行的指令的集合稱為指令系統(tǒng)。以助記符、符號地址、標號等書寫程序的語言稱為匯編語言。2.1.1指令分類〔1〕按功能分〔2〕按字長分〔3〕按執(zhí)行時間分§2.1指令系統(tǒng)概述單片機所能執(zhí)行的指令的集合稱為指令系統(tǒng)22.1.2指令格式[標號]:操作碼[目的操作數(shù)],[源操作數(shù)];[注釋]2.1.3指令字長和指令周期指令周期是指執(zhí)行一條指令所需要的時間。

2.1.4符號約定⑴#data:8位立即數(shù),取值在00H~0FFH之間。⑵#data16:16位立即數(shù),取值在0000H~0FFFFH之間。2.1.2指令格式3⑶Rn:工作存放器,n=0~7,即工作存放器組中的一個工作存放器。⑷Ri:用于存放器間接尋址的工作存放器,i=0或1,即工作存放器R0和R1。⑸direct:8位直接地址,片內(nèi)RAM地址00H~0FFH。⑹addr11:11位目的地址。⑺addr16:16位目的地址。⑻bit:位地址。⑶Rn:工作存放器,n=0~7,即工作存放器組中的一個工作4⑼DPTR:雙數(shù)據(jù)指針存放器⑽Pi:MCS-51單片機的I/O口,i=0~3。⑾@:存放器間接尋址前綴。⑿rel:8位帶符號地址偏移量。⒀$:當(dāng)前指令的地址。⒁(X):片內(nèi)RAM單元X中的內(nèi)容。⒂((X)):X中的內(nèi)容所指向單元的內(nèi)容。⒃←:左邊的內(nèi)容被右邊的內(nèi)容所取代。⑼DPTR:雙數(shù)據(jù)指針存放器5§2.2尋址方式2.2.1直接尋址

直接尋址:指令中直接給出操作數(shù)存儲地址的尋址方式?!?.2尋址方式2.2.1直接尋址61.尋址范圍。 〔1〕片內(nèi)RAM的低128單元。 〔2〕特殊功能存放器SFR。2.使用本卷須知 尋址特殊功能存放器SFR時,可以用直接地址,也可以用存放器名。 INCA;A內(nèi)容加1,存放器尋址方式 INCACC ;直接尋址方式 INC0E0H ;直接尋址方式1.尋址范圍。72.2.2立即尋址立即尋址:在指令中直接給出操作數(shù)的尋址方式。

例如:將十進制數(shù)200傳送到累加器A中。 MOVA,#0C8H MOV A,#200 MOVA,#11001000B 2.2.2立即尋址82.2.3存放器尋址 存放器尋址:操作數(shù)存放于存放器中的尋址方式。 可用于存放器尋址的存放器有: 〔1〕四個工作存放器組中的工作存放器R0~R7,共32個工作存放器。 〔2〕特殊功能存放器,如A、B、DPTR、Pi等。2.2.3存放器尋址92.2.4存放器間接尋址 存放器間接尋址:操作數(shù)的地址存放在存放器中的尋址方式。1.尋址范圍〔1〕片內(nèi)RAM256B地址單元?!?〕對片外RAM64KB地址單元。 例如:將片內(nèi)RAM55H單元的數(shù)據(jù)50H傳送到累加器A中。指令如下: MOVR0,#55H MOVA,@R0;執(zhí)行結(jié)果〔A〕=50H2.2.4存放器間接尋址10 例如:將片外RAM0500H單元的數(shù)據(jù)50H傳送到累加器A中。指令如下: MOVDPTR,#0500H MOVXA,@DPTR 例如:將片外RAM0500H單元的數(shù)據(jù)50H傳送到累加器112.使用本卷須知 〔1〕為區(qū)別存放器尋址方式,作為存放器間接尋址的存放器前面加@。 〔2〕存放器間接尋址方式不能用于對特殊功能存放器SFR的尋址。 例如:MOVR0,#0F0H; MOVA,@R0〔3〕堆棧操作指令也是間接尋址方式,它以堆棧指針SP作為間接尋址存放器。2.使用本卷須知122.2.5變址尋址 變址尋址:以DPTR或PC中的數(shù)據(jù)為根本地址,以A中的數(shù)據(jù)為地址偏移量,基地址與地址偏移量之和作為被尋址數(shù)據(jù)地址的尋址方式。 查表操作指令為: MOVCA,@A+PC MOVCA,@A+DPTR2.2.5變址尋址13學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件14 例如:將程序存儲器050AH單元中的常數(shù)50H送到累加器A中。指令如下: MOVA,#0AH MOVDPTR,#0500H MOVCA,@A+DPTR 例如:將程序存儲器050AH單元中的常數(shù)50H送到累加器A15 幾點說明: 〔1〕變址尋址方式只能對程序存儲器進展尋址,因此只能用于讀取數(shù)據(jù),而不能用于存放數(shù)據(jù),它主要用于查表操作。 〔2〕變址尋址指令只有3條: MOVCA,@A+PC MOVCA,@A+DPTR JMP@A+DPTR 幾點說明:162.2.6相對尋址 相對尋址:在執(zhí)行程序的過程中,CPU尋找相對于當(dāng)前程序計數(shù)器PC值的下一條指令地址的尋址方式。2.2.6相對尋址17 例如:當(dāng)程序狀態(tài)字存放器PSW的最高位時,程序轉(zhuǎn)移到標號為LOOP的語句執(zhí)行。 ORG0000H SJMPMAIN ORG0030H MAIN:SETBC JCLOOP ………… LOOP:MOVA,#30H …………… 例如:當(dāng)程序狀態(tài)字存放器PSW的最高位時,程序轉(zhuǎn)移到標號為182.2.7位尋址 位尋址:針對可位地址的片內(nèi)RAM空間和可位尋址的特殊功能存放器進展尋址的方式?!?〕內(nèi)部RAM的位尋址區(qū),共16個單元的128位,單元地址為20H~7FH,位地址的表示方法可以用直接位地址或單元地址加位的表示方法。 例如:將2FH單元的最高位的值傳送到PSW.7。指令如下: MOVC,7FH MOVC,2FH.72.2.7位尋址19〔2〕特殊功能存放器SFR中可位尋址的存放器共11個,其位地址在指令中有4種表達方式。 例如:對程序狀態(tài)字PSW存放器輔助進位位AC進展操作 ①直接使用位地址:MOVC,0D6H ②位名稱表示法:MOVC,AC ③單元地址加位的表示法:MOVC,0D0H.6 ④專用存放器符號加位的表示法: MOVC,PSW.6〔2〕特殊功能存放器SFR中可位尋址的存放器共11個,其位地20§2.3數(shù)據(jù)傳送類指令2.3.1內(nèi)部數(shù)據(jù)傳送指令MOV<目的操作數(shù)>,<源操作數(shù)>;注釋 〔1〕立即尋址數(shù)據(jù)傳送指令 指令功能:把源操作數(shù)送指定單元或存放器,源操作數(shù)為立即數(shù)。 MOVA,#data MOVRn,#data MOV@Ri,#data MOVdirect,#data§2.3數(shù)據(jù)傳送類指令2.3.1內(nèi)部數(shù)據(jù)傳送指令21〔2〕片內(nèi)RAM單元與累加器A間傳送數(shù)據(jù)指令MOVA,RnMOVRn,AMOVA,@RiMOV@Ri,AMOVA,directMOVdirect,A〔2〕片內(nèi)RAM單元與累加器A間傳送數(shù)據(jù)指令22〔3〕片內(nèi)RAM單元間的數(shù)據(jù)傳送指令 MOVdirect,Rn MOVRn,direct MOVdirect,@Ri MOV@Ri,direct MOVdirect2,direct1〔3〕片內(nèi)RAM單元間的數(shù)據(jù)傳送指令23例2-1:將P1口讀得的數(shù)據(jù)傳送給P2口。指令如下: 直接尋址: MOV0A0H,90H 通過累加器A: MOVA,P1 MOVP2,A 直接傳送: MOVP2,P1例2-1:將P1口讀得的數(shù)據(jù)傳送給P2口。24例如:將R0中的數(shù)傳給R7。指令如下: MOVA,R0 MOVR7,A〔4〕十六位數(shù)據(jù)傳送指令 MOVDPTR,#data16 例2-2:將數(shù)據(jù)1000H傳送到數(shù)據(jù)指針DPTR中。指令如下: MOVDPTR,#1000H例如:將R0中的數(shù)傳給R7。指令如下:25 例2-3:設(shè)內(nèi)部RAM中〔30H〕=40H,〔40H〕=10H,P1口作輸入口,〔P1〕=0CAH,程序如下: MOVR0,#30H MOVA,@R0 MOVR1,A MOVB,@R1 MOV@R1,P1 MOVP2,P1 執(zhí)行后的結(jié)果是什么? 例2-3:設(shè)內(nèi)部RAM中〔30H〕=40H,〔40H〕262.3.2堆棧操作指令 PUSHdirect;SP←(SP)+1,(SP)←(direct) POPdirect;direct←((SP)),SP←(SP)-1例2-4:設(shè)〔30H〕=X,〔40H〕=Y,試用堆棧實現(xiàn)30H和40H單元中的數(shù)據(jù)交換。 MOVSP,#50H PUSH40H PUSH30H …………… POP40H POP30H2.3.2堆棧操作指令272.3.3數(shù)據(jù)交換指令〔1〕整字節(jié)交換指令XCHA,Rn;〔A〕←→〔Rn〕XCHA,@Ri;〔A〕←→〔〔Ri〕〕XCHA,direct;〔A〕←→〔direct〕〔2〕低半字節(jié)交換指令XCHDA,@Ri;(ACC.3~ACC.0)←→((Ri.3)~〔Ri.0))〔3〕累加器高、低半字節(jié)交換指令SWAPA;(ACC.7~ACC.4)←→(ACC.3~ACC.0)2.3.3數(shù)據(jù)交換指令28 例2-6片內(nèi)50H單元中有一個十進制數(shù)0~9,試編程把它變?yōu)橄鄳?yīng)的ASCII碼并存入50H單元。 例2-6片內(nèi)50H單元中有一個十進制數(shù)0~9,試編程把292.3.4外部數(shù)據(jù)傳送指令存儲器〔1〕用數(shù)據(jù)指針DPTR作地址存放器的存放器間接尋址指令MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;(DPTR)←〔A〕〔2〕用Ri作地址存放器的存放器間接尋址指令MOVXA,@Ri ;A←((Ri))MOVX@Ri,A ;(Ri)←〔A〕2.3.4外部數(shù)據(jù)傳送指令存儲器30例2-6:假設(shè)外部RAM中,〔20FFH〕=30H,〔2100H〕=15H。執(zhí)行以下指令后A中的內(nèi)容是多少?MOVDPTR,#20FFHMOVA,@DPTRINCDPTRMOVA,@DPTR例2-6:假設(shè)外部RAM中,〔20FFH〕=30H,〔21031 例2-7:把片外RAM的70H單元中的一個數(shù)X,送到片外RAM的1010H單元。2.3.5查表操作指令MOVCA,@A+DPTR;A←((A〕+(DPTR))MOVCA,@A+PC;A←((A)+(PC)) 例2-7:把片外RAM的70H單元中的一個數(shù)X,送到片外32例2-8:累加器A中有一個0~9范圍內(nèi)的數(shù),用以上查表指令編出能查出該數(shù)平方值的程序。設(shè)平方表表頭地址為TABLE?!?〕采用DPTR作為基址存放器MOVDPTR,#TABELMOVCA,@A+DPTRTABLE:DB0,1,4,9,16 DB25,36,49,64,81例2-8:累加器A中有一個0~9范圍內(nèi)的數(shù),用以上查表指令編33〔2〕采用PC作為基址存放器ORG1FFBH1FFBHADDA,#data;修正量1FFDHMOVCA,@A+PC ;查表1FFEHSJMP$2000HDB02001HDB12002HDB4…2021HDB81〔2〕采用PC作為基址存放器34§2.4算術(shù)運算和邏輯指令2.4.1算術(shù)運算指令§2.4算術(shù)運算和邏輯指令2.4.1算術(shù)運算指令351.加法指令〔1〕不帶進位的加法指令 ADDA,Rn ADDA,direct ADDA,@Ri ADDA,#data 例2-9:試分析8051執(zhí)行如下指令后,累加器A和PSW各標志位的變化狀況。 MOVA,#0CFH ADDA,#0A5H1.加法指令36〔2〕帶進位加法指令帶進位加法運算指令常用于多字節(jié)加法運算。ADDCA,Rn; A←(A)+(Rn)+CyADDCA,direct; A←(A)+(direct)+CyADDCA,@Ri; A←(A)+((Ri))+CyADDCA,#data; A←(A)+data+Cy 例2-10:設(shè)〔A〕=0AAH,〔R0〕=55H,Cy=1執(zhí)行如下指令后,PSW的值是多少? ADDCA,R0〔2〕帶進位加法指令372.帶借位減法指令SUBBA,Rn ;A←(A)+(Rn)-CySUBBA,direct ;A←(A)-(direct)-CySUBBA,@Ri ;A←(A)-((Ri))-CySUBBA,#data ;A←(A)-data-Cy3.加1和減1指令〔1〕加1指令I(lǐng)NCA ;A←〔A〕+1INCRn ;Rn←〔Rn〕+1INCdirect ;direct←〔direct〕+1INC@Ri ;〔Ri〕←〔〔Ri〕〕+1INCDPTR ;DPTR←〔DPTR〕+12.帶借位減法指令38〔2〕減1指令減1指令與加1指令使用方法一樣。DECA;A←〔A〕-1DECRn;Rn←〔Rn〕-1DEC@Ri;〔Ri〕←〔〔Ri〕〕-1DECdirect ;direct←〔direct〕-1〔2〕減1指令394.乘法指令MULAB〔1〕進位標志位Cy總是清“0〞?!?〕累加器A中的值影響奇偶標志位P?!?〕當(dāng)積大于255〔B中的內(nèi)容不為0〕時,OV=1,否那么OV=0。4.乘法指令405.除法指令DIVAB〔1〕對Cy和P標志的影響與乘法時一樣?!?〕當(dāng)除數(shù)為0時,除法沒有意義,OV=1,否那么OV=0。6.二~十進制調(diào)整指令DAA假設(shè)AC=1或A3~A0>9,那么A←〔A〕+06H;假設(shè)Cy=1或A7~A4>9,那么A←〔A〕+60H。5.除法指令41 2.4.2邏輯運算指令 1.邏輯“與〞、“或〞、“異或〞指令邏輯 邏輯與指令: ANLA,Rn ;A←〔A〕∧〔Rn〕 ANLA,@Ri ;A←〔A〕∧〔〔Ri〕〕 ANLA,direct ;A←〔A〕∧〔direct〕 ANLA,#data ;A←〔A〕∧#data ANLdirect,A ;direct←〔direct〕∧〔A〕 ANLdirect,#data ;direct←〔direct〕∧#data 例2-12:計算立即數(shù)#35H和#78H相與的結(jié)果。 2.4.2邏輯運算指令42 邏輯或指令: ORLA,Rn ;A←〔A〕∨〔Rn〕 ORLA,@Ri ;A←〔A〕∨〔〔Ri〕〕 ORLA,direct ;A←〔A〕∨〔direct〕 ORLA,#data ;A←〔A〕∨〔#data〕 ORLdirect,A ;direct←〔A〕∨〔Rn〕 ORLdirect,#data ;direct←(direct)∨(#data) 邏輯或指令:43 例2-13:使用AT89S51控制12位模/數(shù)轉(zhuǎn)換器AD574A進展模/數(shù)轉(zhuǎn)換,讀取12位數(shù)據(jù)時要求先讀取高8位,再讀取低4位,而低4位數(shù)據(jù)在存放單元中又處在高4位,讀取的原始數(shù)據(jù)如以下圖所示。設(shè)讀取數(shù)據(jù)的高8位存放在片內(nèi)RAM的31H單元,低8位存放在片內(nèi)RAM的30H單元。請將讀取的數(shù)據(jù)按正確的12位數(shù)據(jù)存放。 例2-13:使用AT89S51控制12位模/數(shù)轉(zhuǎn)換器AD44 邏輯異或指令: 異或指令是按位異或,即當(dāng)參與異或運算的兩個位同為“0〞或“1〞時,結(jié)果為“0〞;當(dāng)參與異或運算的兩個位不同時,結(jié)果為“1〞。 XRLA,Rn ;A←〔A〕〔Rn〕 XRLA,@Ri ;A←〔A〕〔〔Rn〕〕 XRLA,direct ;A←〔A〕〔direct〕 XRLA,#data ;A←〔A〕#data XRLdirect,A ;direct←〔direct〕〔A〕 XRLdirect,#data ;direct←〔direct〕#data 例2-14:計算立即數(shù)#35H和#78H相異或的結(jié)果。 邏輯異或指令:45 2.移位指令 RLA ;累加器內(nèi)容循環(huán)左移 RLCA ;累加器內(nèi)容帶Cy循環(huán)左移 RRA ;累加器循環(huán)右移 RRCA ;累加器內(nèi)容帶Cy循環(huán)右移 2.移位指令46學(xué)習(xí)單片機的指令系統(tǒng)教學(xué)課件47 3.清零、取反指令 CLRA;A←0,累加器A清0,不影響標志位 CPLA;A←〔/A〕,累加器A的內(nèi)容按位取反,不影響標志位 3.清零、取反指令48§2.5控制轉(zhuǎn)移和位操作指令 1.無條件轉(zhuǎn)移指令 〔1〕長轉(zhuǎn)移指令 LJMPaddr16;PC←addr16 〔2〕絕對轉(zhuǎn)移指令 AJMPaddr11;PC←addr11 〔3〕短轉(zhuǎn)移指令 SJMPrel;PC←〔PC〕+2 ;PC←〔PC〕+rel 〔4〕間接轉(zhuǎn)移指令 JMP@A+DPTR;PC←〔A〕+〔DPTR〕§2.5控制轉(zhuǎn)移和位操作指令 1.無條件轉(zhuǎn)移指令49 2.條件轉(zhuǎn)移指令 〔1〕累加器判零轉(zhuǎn)移指令 JZrel ;累加器A為0轉(zhuǎn)移 JNZrel ;累加器A不為0轉(zhuǎn)移

2.條件轉(zhuǎn)移指令50〔2〕比較轉(zhuǎn)移指令 CJNE<目的操作數(shù)>,<源操作數(shù)>,rel CJNEA,#data,rel CJNEA,direct,rel CJNE@Ri,#data,rel CJNERn,#data,rel 如果目的操作數(shù)小于源操作數(shù),那么Cy置1,否那么Cy清0。本指令執(zhí)行后不影響任何操作數(shù)?!?〕比較轉(zhuǎn)移指令51 〔3〕減1條件轉(zhuǎn)移指令 DJNZRn,rel ;〔Rn〕←〔Rn〕-1 ;假設(shè)〔Rn〕=0,那么PC←〔PC〕+2 ;假設(shè)〔Rn〕≠0,那么PC←〔PC〕+2+rel DJNZdirect,rel;direct←〔direct〕-1 ;假設(shè)〔direct〕=0,那么PC←〔PC〕+3 ;假設(shè)〔direct〕≠0,那么PC←〔PC〕+3+rel 〔3〕減1條件轉(zhuǎn)移指令52 例2-16:設(shè)R0、R1、R2的內(nèi)容分別為01H、0AH、20H,執(zhí)行以下程序: L1:…… L2:…… L3:…… DJNZR0,L1 DJNZR1,L2 DJNZR2,L3 例2-16:設(shè)R0、R1、R2的內(nèi)容分別為01H、0A53 3.子程序調(diào)用和返回指令 〔1〕調(diào)用指令 ①長調(diào)用指令 LCALLaddr16 ;PC←(PC)+3 ;SP←(SP)+1,(SP)←PC7~PC0 ;SP←(SP)+1,(SP)←PC15~PC8 ;PC←addr16

3.子程序調(diào)用和返回指令54②絕對調(diào)用指令

ACALLaddr11 ;PC←(PC)+2 ;SP←(SP)+1,(SP)←PC7~PC0 ;SP←(SP)+1,(SP)←PC15~PC8 ;PC10~0←addr11②絕對調(diào)用指令55〔2〕子程序返回指令RET RET ;PC15~PC8←〔SP〕 ;SP←〔SP〕-1 ;PC7~PC0←〔SP〕 ;SP←〔SP〕-1〔2〕子程序返回指令RET56〔3〕中斷報務(wù)程序返回指令 RETI ;PC15~PC8←〔SP〕 ;SP←〔SP〕-1 ;PC7~

溫馨提示

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

評論

0/150

提交評論