系列單片機的指令系統(tǒng).ppt_第1頁
系列單片機的指令系統(tǒng).ppt_第2頁
系列單片機的指令系統(tǒng).ppt_第3頁
系列單片機的指令系統(tǒng).ppt_第4頁
系列單片機的指令系統(tǒng).ppt_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章 51單片機的指令系統(tǒng),單片機原理、接口及應用,內 容 提 要,尋址方式 數據傳送與交換指令 算術運算、邏輯運算指令 控制轉移指令 位操作指令,計算機通過執(zhí)行程序完成人們指定的任務,程序由一條一條指令構成,能為CPU識別并執(zhí)行的指令的集合就是該CPU的指令系統(tǒng)。 MCS-51單片機匯編語言指令格式: 操作符 目的操作數,源操作數,操作符指明該指令完成什么操作; 操作數是指明該指令的操作對象。 目的操作數是存放結果的。 指令中操作數提供的方式稱為尋址方式。,指令中的常用符號 Rn: n=(07),表示當前工作寄存器R0R7中的一個 Ri: i=(0、1),代表R0和R1寄存器中的一個,用作間接尋址寄存器 dir : 8 位直接字節(jié)地址(片內 RAM 和 SFR ) #data: 8位立即數,即8位常數??梢詾?進制(B)、10進制、 16進制(H)、 字符( ) #data16: 表示16位立即數,即16位常數,取值范圍為#0000H#0FFFFH addr16 : 表示16位地址 addr11 : 表示11位地址 rel : 相對偏移量(為一字節(jié)補碼)用于相對轉移指令中 bit :位地址,在位地址空間中。 $: 表示當前指令的地址。,2.1 尋址方式,1、立即尋址 指令中直接給出操作數的尋址方式。在51系列單片機的指令系統(tǒng)中,立即數用一個前面加 “#“號的8位數(#data,如#30H)或16位數(#data16,如#2052H)表示。立即尋址中的數,稱為立即數。 例如指令:MOV A,#30H,2、直接尋址 操作數的地址直接出現在指令中。 尋址對象: 內部數據存貯器:使用它的地址。 特殊功能寄存器:既可使用它的地址,也可以 直接使用寄存器名。,例:MOV A,40H ; A=56H 機器碼 E540,MOV P0,#45H ;45HP0, P0為直接尋址的 SFR,其地址為 80H, 機器碼為758045,MOV 40H,41H ; 機器碼為854140 內部RAM (41H)(40H) (40H)=(41H)=78H,3、寄存器尋址 操作數存放在寄存器中。 尋址對象:A,B,DPTR,R0R7 。 B 僅在乘除法指令中為寄存器尋址,在其他指令中為直接尋址。 A 可以寄存器尋址又可以直接尋址,直接尋址時寫作ACC 例如:MOV A,R0 ;R0A,A、R0均為寄 存器尋址,機器碼E8 MUL AB ;A*BBA,A、B為寄 存器尋址,機器碼A4,MOV B,R0 ;R0B,R0為寄存器尋 址,B為直接尋址 機器碼 88F0,其中 F0為B的 字節(jié)地址(見表1-2) PUSH ACC ;A的內容壓入堆棧 機器碼C0E0,4、寄存器間址 操作數存放在以寄存器內容為地址的單元中。 例如: MOV R0,#20H MOV R0,A ;A(20H) 地址的內部RAM MOVX A,R1 ;外部RAM(地址為P2 R1 ) 的 內容A MOVX DPTR,A ;A以DPTR內容為地址的 外部RAM,5、變址尋址 以DPTR或PC寄存器內容為基地址,和A的內容為相加形成操作數的地址。其中累加器A內容是可變的。 例如: MOVC A, A+DPTR 6、相對尋址 相對尋址是將程序計數器PC的當前值與指令第二字節(jié)給出的偏移量相加,從而形成轉移的目標地址。 例如:JZ 61H,7、位尋址 對片內RAM中20H2FH中的128個位地址及SFR中的可位尋址的位地址尋址。 例如: MOV C,20H;20H位的內容送CY標志 位,C稱為位累加器。 MOV A,20H ;字節(jié)尋址,將內部 RAM中20H單元中的 內容送給累加器A。 以上兩條指令均為尋址,究竟是位尋址還是字節(jié)尋址,根據兩操作數類型一致的原則,由另一個操作數決定。,dir,Ri,Rn,#data,A,MOV A ,Rn #data dir Ri,MOV dir ,A Rn Ri #data dir,MOV Rn ,MOV Ri,A dir #data,1、內部RAM、SFR之間的傳送MOV指令,A dir #data,2.2 數據傳送與交換指令,2.2.1 傳送類指令,例 R1=20H,(20H)=55H, 指令MOV A,R1執(zhí)行后,A=55H。 例 (40H)=30H,指令 MOV R7,40H 執(zhí)行后,R7=30H。 例 MOV R7,40H 執(zhí)行后,R7=40H。,例 判斷下列指令的正誤: MOV 29H,R7 MOV 25H,P1 MOV 56H,#70H MOV 34H,28H MOV R3,R7 MOV R3,R7 MOV R3,#D2H MOV #34H,28H MOV A,#280H MOV P3,P1,編程將R3的內容送R1。 MOV A,R3 MOV R1,A, , ,A,外部數據 存儲器,程序 存儲器,Ri , A DPTR , A A , Ri A , DPTR,MOVX,MOVC,A , A+PC A , A+DPTR,2、外部存儲器和A累加器之間的傳送,MOVX,MOVC,MOVX指令舉例 例: 實現片外數據存儲器數據傳送 (2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,; DPTR= 2000H,; DPTR= 2100H,; A X,;(2100H) X,x,片外數據存儲器不能直接尋址。下列為非法指令: MOVX A,2000H MOVX 2100H,2000H ,使用P2口和8位寄存器Ri間址: MOV P2,#20H ;高位地址 MOV R0,#00 ;低位地址 MOVX A,R0 ;讀片外RAM MOV P2,#21H ;改變高位地址 MOVX R0,A ;寫片外RAM,查表指令MOVC 注:只能從程序存儲器讀取數據到A累加器。 只能使用變址間接尋址方式 多用于查常數表程序,直接求取常數表中的函數值,1)DPTR為基址寄存器 MOVC A,A+DPTR ;A(A+DPTR) 查表范圍為 64KB 程序存儲器任意空間。,2)PC為基址寄存器 MOVC A,A+PC ;A (A+PC) 常數表只能在查表指令后 256B 范圍內。,例 查表法求 Y=X2。設 X(0X15)在片內 RAM 20H單元,要求將查表求 Y,存入片內 RAM 21H單元,1)用DPTR作基址寄存器 ORG 0100H SQU: MOV DPTR,#TAB ;確定表首地址 MOV A,20H ;取 X MOVC A,A+DPTR ;查表求 Y=X2 MOV 21H,A ;保存Y RET ;子程序結束 ;其它程序段,ORG 0200H ;常數表格首地址 TAB: DB 00,01,04,09,225 ;平方表,2)用PC作基址寄存器 指令地址 源程序 ORG 0100H ;程序起始地址 0100H SQU: MOV A,20H ;取X 0102H ADD A,#3 ;修正偏移量 0104H MOVC A,A+PC ;查表求Y=X2 0105H MOV 21H,A ;存結果 0107H RET ;子程序結束 0108H TAB: DB 00,01,04 ;平方表 010BH DB 09,225,思考題 當0X255時,如何用查表法編程求Y=X2,3.堆棧操作指令,例:設 A=02,B=56H,執(zhí)行下列指令序列后,SP = ?A = ? ,B = ?,SBR:MOV SP,#30H PUSH A PUSH B MOV A,#0 MOV B,#01 POP B POP A RET,;設棧底,;保護現場,;恢復現場,入棧指令:PUSH dir ;SPSP+1,(SP) (dir ) 出棧指令:POP dir ;(dir )(SP),SPSP-1, SP 02 , SP 56 02 , 56 SP 02 , 56 02 SP , SP ,堆棧操作示意:,2.2.2 交換指令 實現片內RAM區(qū)的數據雙向傳送,1. 字節(jié)交換指令 XCH A,Rn ;ARn XCH A,Ri ;A(Ri) XCH A,n ;A (n),習題 將片內RAM 60H單元與 61H單元的數據交換,例 設A= 29H,(2AH ) 38H 執(zhí)行指令 XCH A,2AH 后, A= ? ,(2AH)= ?,38H,29H,XCH 60H,61H 對嗎?,2. 半字節(jié)交換指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47A03,例3-4-3:將片內 RAM 2AH和 2BH單元中的 ASCII碼轉換成壓縮式 BCD碼存入 20H單元,數字 09的ASCII碼30H39H,85H,壓縮的BCD碼和非壓縮的BCD碼見圖 如 1823壓縮的BCD碼為1823H 非壓縮的BCD碼為01080203H,A,A,08,例 將片內RAM 2AH和 2BH單元中的ASCII碼轉換成壓縮式BCD碼存入 20H單元,MOV A,#00H ;A=00 MOV R0,#2AH MOV R1,#2BH XCHD A,R0 SWAP A XCHD A,R1 XCH A,20H,85H,R1,R0,習題:交換片內RAM 40H單元和 41H單元的低半字節(jié),0,0,;低4位交換A=08,; A=80H,; 低4位交換,;(20H)=85H,3 8,0 0,A,3 5,8 0,8 5,R1,R0,3 0,3 0,ADD ADDC SUBB ANL ORL XRL,A ,Rn, Ri #data dir,加 進位加 借位減 與 或 異或,1.以A為目的操作數的算術、邏輯運算指令(24條),以dir為目的操作數邏輯運算指令(6條),與 ANL 或 ORL 異或 XRL,2.3算術運算和邏輯運算指令,算術類指令的操作意義非常明確,不一一贅述, 注意減指令只有帶借位減,因此在多字節(jié)減法中, 最低字節(jié)作減法時,注意先清CY。 邏輯運算是按位進行的,兩數運算的運算法則是: 與:有“0”則“0”; 或:有“1”則“1” 異或:同為“0” , 異為“1”; 與“0”異或值不變:與“1”異或值變反。 邏輯指令常用于對數據位進行加工。,例:A=0FH, 執(zhí)行XRL A,#86H 后 A06HH,例:A=0FH, 執(zhí)行ORL A,#86H 后 A8FH,例:A=0FH, 執(zhí)行XRL A,#86H 后 A89H,INC,減 1 指令:,DEC,加 1 指令:,提問:沒有DEC DPTR指令,怎么解決DPTR的減 1?,2.加1、減1指令,3. 十進制調整指令 計算機完成二進制加法其和也為二進制,如果是十進制相加(即BCD碼相加)想得到十進制的結果,就必須進行十進制調整(即BCD 碼調整)。 調整指令: DA A ;將A中二進制相加和調整成BCD碼 調整方法:和低4位大于9或有半進位則低4位加6; 和的高4位大于9或有進位,則高4位加6。 指令根據相加和及標志自行進行判斷,因此該指令應緊跟在加指令之后,至少在加指令和該指令之間不能有影響標志的指令。 DA A指令只對一個字節(jié)和調整,如為多字節(jié)相加必須進行多次調整。此指令不能對減法結果進行調整。,例 完成56+17的編程。 MOV A,#56H ;A存放BCD碼56H MOV B,#17H ;B存放BCD碼17H ADD A, B ;A=6dH DA A ;A=73H SJMP $,指令對標志位的影響有如下規(guī)律: 1) 凡是對A 操作指令(包括傳送指令)都將A中1個的奇偶反映到PSW的P標志位上。即A中奇數個“1”,P=1;偶數個“1”,P=0。 2) 傳送指令、加 1、減 1 指令、邏輯運算指令不影響Cy、 OV、AC 標志位。 3) 加減運算指令影響標志位,乘除指令使Cy=0,當乘積大于255,或除數為0時,OV置1。 4) 對進位位Cy(指令中用C表示)進行操作的指令和大環(huán)移指令,顯然會影響Cy。 具體指令對標志位的影響可參閱附錄A。 標志位的狀態(tài)是控制轉移指令的條件,因此指令對標志位的影響應該記住。,例:A= 9AH,R2= E3H,PSW= 0,執(zhí)行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= PSW= ?,1001 1010 1110 0011 + 0 1 0111 1101,7DH 1 1 0 0,10000100 = 84H,CY,CY,RR A,RL A,RLC A,RRC A,4.移位指令(僅對 A ),10010110,00101101,A,A,設,01001011,A,1,CY,11001011,A,0,00101101,A,1,CY,CY,2.4 控制轉移指令,這一類指令的功能是改變指令的執(zhí)行順序,轉到指令指示的新的PC地址執(zhí)行。 MCS-51單片機的控制轉移指令有以下類型: 無條件轉移:無需判斷,執(zhí)行該指令就轉移到目的地址。 條件轉移:需判斷標志位是否滿足條件,滿足條件轉移到目的地址,否則順序執(zhí)行。 絕對轉移:轉移的目的地址用絕對地址指示,通常為無條件轉移。 相對轉移:轉移的目的地址用相對于當前PC的偏差(偏移量)指示,通常為條件轉移。 長轉移或長調用:目的地址距當前PC 64KB地址范圍內。 短轉移或短調用:目的地址距當前PC 2KB地址范圍。,1.長調用 LCALL addrl16 ;addr16PC015 說明: (1)該指令功能是 保護斷點,即當前PC(本指令的下一條指令的首地 址)壓入堆棧。 子程序的入口地址 addr16 送PC,轉子程序執(zhí)行。 (2)本指令為64KB地址范圍內的調子程序指令,子程序可在64KB地址空間的任一處。 (3)本指令的機器碼為三字節(jié) 12 addr16。,2.4.1 調用程序和返回類指令,2.短調用 ACALL addr11 ;addr11PC010 說明: (1)該指令的功能是 保護斷點,即當前PC壓入堆棧。 addrl11PC010,而PC1115保持原值不變。 (2)本指令為2KB地址范圍的調子程序指令,子程序入口距當前PC不得超過2KB地址范圍。 (3)本指令的機器碼為二字節(jié),設addr11的各位是a10a9a8a2a1a0,則ACALL指令機器碼a10a9a810001a7a6a5a4a3a2a1a0,其中10001是ACALL指令的操作碼。,例 子程序調用指令ACALL在 程序存儲器中的首地址為0100H,子程序入口地址為0205H。試確定能否使用ACALL指令實現調用?如果能使用,確定該指令的機器碼。 解: 因為ACALL指令首地址在0100H,而ACALL是 2字節(jié)指令,所以下一條指令的首地址在0102H。0102H和0250H在同一2KB地址范圍內,故可用ACALL調用。調用入口地址為0250H,ACALL指令的機器碼形式為:0101000101010000B=5150H。,3.子程序返回指令 RET ;從調用子程序返回。 功能:從棧頂彈出斷點到PC。 RETI ; 從中斷服務程序返回。 功能:從棧頂彈出斷點到PC,并恢復中斷優(yōu)先級狀態(tài)觸發(fā)器。,2.4.2 轉移指令 1. 無條件轉移指令 (1)短轉移 AJMP addr11 ;addr11PC010 說明: 轉移范圍:本指令為2KB地址范圍內的轉移指令。對轉移目的地址的要求與ACALL指令對子程序入口地址的要求相同。 機器碼形式:本指令為2字節(jié)指令。設addr11的各位是a10a9a8a2a1a0,則指令的機器碼為a10a9a800001a7a6a5a4a3a2a1a0。,(2)長轉移 LJMP addr16 ;addr16PC015 說明: 本指令為64KB程序存儲空間的全范圍轉移指令。轉移地址可為16位地址中的任意值。 本指令為3字節(jié)指令02 addr16。 (3)間接轉移 JMP A+DPTR ;A+DPTRPC 例 A=02H,DPTR=2000H,指令JMP A+DPTR執(zhí)行后,PC=2002H。也就是說,程序轉移到2002H地址單元去執(zhí)行。,例 現有一段程序如下: MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP PROC0 AJMP PROC1 AJMP PROC2 AJMP PROC2 根據JMP A+DPTR指令的操作可知, 當A=00H時,程序轉入到地址 PROC0 處執(zhí)行; 當A=02H時,轉到PROC1處執(zhí)行 可見這是一段多路轉移程序,進入的路數由A確定。因為AJMP指令是2字節(jié)指令,所以 A 必須為偶數。 以上均為絕對轉移指令,下面介紹相對轉移指令。,(4)無條件相對轉移 SJMP rel ;PC+relPC, 即As2relPC,機器碼為80 rel 說明: As為源地址(本指令的首地址),該指令為2字節(jié)指令,執(zhí)行本指令時 當前PCAs+2,rel 為轉移的偏移量,轉移可以向前轉(目的地址小于源地址),也可以向后轉(目的地址大于源地址),因此偏移量rel 是 1 字節(jié)有符號數,用補碼表示(128127),所以指令轉移范圍在離源地址As的126129字節(jié)之間。,2. 條件轉移指令 (1)累加器為零(非零)轉移 JZ rel ;A=0 則轉移(As+2+relPC) JNZ rel ;A0 程序順序執(zhí)行,機器碼為60rel,(2)減 1 不等于零轉移 DJNZ Rn , rel ;Rn-1 DJNZ dir , .rel 本指令有自動減 1 功能。,(3)比較轉移指令 CJNE A,dir , rel CJNE A , #data , rel CJNE Rn , #data , rel CJNE Ri , #data , rel,說明: CJNE指令都是3字節(jié)指令,作減操作,不回送結果,影響CY標志。 若第一操作數大于或等于第二 操作數,則標志CY=0。若第一操作數小于第二操作數,則CY=1。 這幾條指令除實現兩操作數相等與否的判斷外,利用對CY的判斷,還可完成兩數大小的比較。,試說明以下一段程序運行后A中的結果。 MOV 23H,#0AH CLR A LOOP:ADD A,23H DJNZ 23H,LOOP SJMP $ 根據程序可知 A=10+9+8+7+6+5+4+3+2+1=55=37H,例 編寫程序,要求讀P1 端口上的信息,若不為55H,則程序等待,直到P1端口為55H時,程序才往下順序執(zhí)行。 程序: MOV A,#55H ;A55H CJNE A,P1,$ ;P155H,則程序循環(huán)執(zhí)行本指令 在實際編程中,轉移的目的地址不管是addr11、addr16、還是rel ,均是一符號地址表示的(如SJMP ABC,AJMP LOOP),轉移的類型是通過指令的操作符來決定的。,3.相對偏移量rel的求法 在相對轉移中,用偏移量 rel 和轉移指令所處的 地址值來計算轉移的目的地址,rel 是 1 字節(jié)補碼. 在填機器碼時,需計算rel,下面介紹計算rel 的方法。 設 本條轉移指令的首地址為As源地址, 指令字節(jié)數為Bn2字節(jié)或3字節(jié), 要轉移的目標地址為Ad目的地址, 當前PC= As+ Bn 因為在執(zhí)行本條指令時,PC 已經指向了下一條指令,見下圖:,Ad 0100 MN: . As 0125 BF 05 rel CJNE R7,#06,MN 當前PC 0128 當前PC= As +Bn=0125+3=0128,Bn=3,于是 rel =Ad-當前PC =Ad(As+Bn)= Ad - As - Bn 在上例中 rel=Ad當前PC =0100H0128H=28H 28求補得D8H 于是 rel=(Ad-As-Bn)補 這就是在已知源地址,目的地址和指令的長度時,計算rel 大小的公式。,例 MCS-51單片機指令系統(tǒng)中,沒有停機指令,通常用短轉移指令SJMP $ ($為本條指令的首地址)來實現動態(tài)停機的操作,試寫出這條指令中機器碼。 解: 查附錄A ,SJMP rel 的指令碼為80rel 據題意 本條指令的首地址 As=$,轉移的目的地址是本條指令地址,即Ad=$ 該指令為兩字節(jié),即Bn=2, rel= (Ad-As-Bn)補= ($2)補=(2)補=FEH 所以SJMP $指令的機器碼是80FEH。,例 計算下面程序中CJNE指令的偏移量。 LOOP:MOV A,P1 CJNE A,#55H,LOOP 解: 由于MOV A,P1是2字節(jié)指令,故CJNE指令的首 地址是LOOP+2。又因為CJNE是3字節(jié)指令,于是 有:Ad=LOOP ,As=LOOP+2, Bn=3 rel=LOOP-(LOOP+2)-3補=-5補=FBH 所以CJNE A,#55H,LOOP的指令碼為B455FBH。 2.4.3 空操作指令 NOP 機器碼 00 該指令經取指,譯碼后不進行任何操作(空操作)而轉到下一條指令,常用于生產一個機器周期的延時,或上機修改程序時作填充指令,以方便增減指令。,例 將A累加器的低四為取反四次、高四位不變。每變換一次,從P1輸出。 方法一 加 1 計數: MOV R0,#0 ;計數初值送0 LL:XRL A,#0FH ;高4位不變,低四位取反 INC R0 ;次數加1 MOV P1,A ;從P1輸出 CJNE R0,#04,LL ;不滿四次循環(huán) RET 方法二 減1計數: MOV R0,#04H ;計數初值送4 LL: XRL A,#0FH MOV P1,A DJNZ R0,LL ;次數減1不等于0循環(huán) RET,例 在內部RAM的40H地址單元中,有1字節(jié)符號數,編寫求其絕對值后放回原單元的程序。 程序如下: MOV A,40H ANL A,#80H JNZ NEG ;為負數轉移 SJMP $ ;為正數,絕對值=原數,不 改變原單元內容 NEG:MOV A,40H ;為負數求補,得其絕對值 CPL A INC A MOV 40H,A SJMP $ 有符號數在計算機中以補碼形式存放,例如5,存放在內部RAM中為FBH,求補后得5, 即|5|=5。,2.5 位操作指令,MCS-51單片機的特色之一就是具有豐富的位處理功能,以進位標志CY為位累加器C,使得開關量控制系統(tǒng)的設計變得十分方便。 在程序中位地址的表達有多種方式: 1)用直接位地址表示,如D4H。 2)用“”操作符號表示,如PSW.4,或D0H.4 3)用位名稱表示,如RS1。 4)用用戶自定義名表示。如ABC BIT D4H,其中ABC定義為D4H位的位名,BIT為位定義偽指令。以上各例均表示PSW.4的RS1位。 位操作類指令的對象是C和直接位地址,由于C是位累加器,所以位的邏輯運算指令目的操作數只能是C,這

溫馨提示

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

評論

0/150

提交評論