《單片機(jī)指令系統(tǒng)》PPT課件.ppt
《《單片機(jī)指令系統(tǒng)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《單片機(jī)指令系統(tǒng)》PPT課件.ppt(60頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
第三章 MCS-51單片機(jī)指令系統(tǒng),3-1 指令格式,3-2 指令尋址方式,3-3 MCS-51指令系統(tǒng),指令的表示形式,指令:是控制計(jì)算機(jī)各功能部件完成某一指定動作的指示和命令 表示形式: 二進(jìn)制 十六進(jìn)制 助記符 機(jī)器碼 :指令的二進(jìn)制形式是一種可以直接為計(jì)算機(jī)識別和執(zhí)行的形式,稱為指令的機(jī)器碼。 匯編語言指令:用助記符形式表示的機(jī)器指令,是一種由英文單詞或縮寫字母形象表征指令功能形式。 MCS-51 指令111條,可以實(shí)現(xiàn)51種基本操作 指令的分類: 按指令周期數(shù)分: 單周期指令(57) 雙周期指令(52) 四周期(2) 按字節(jié)數(shù): 單字節(jié)(49) 雙字節(jié)(46) 三字節(jié)(16) 按功能分類: 數(shù)據(jù)傳送指令(28) 算術(shù)運(yùn)算指令(24) 邏輯操作指令 (25) 控制轉(zhuǎn)移指令(17) 位操作指令(17),一. 匯編語言指令格式 [標(biāo)號:]操作碼 操作數(shù)1,操作數(shù)2 [;注釋] 換行表示一條指令結(jié)束。 例: LOOP: MOV A,#40H ;取參數(shù),1.標(biāo)號:指令的符號地址 2.操作碼:指明指令功能,指示何種操作。,3.操作數(shù):指令操作對象 數(shù)據(jù)、地址、寄存器名及約定符號。 4.注釋行:說明指令在程序中的作用。 操作碼和操作數(shù)是指令主體。,MOV__move傳送 XCH__exchange交換 ANL__and logic與邏輯運(yùn)算 XRL__exclusive or異或運(yùn)算 MUL__Multiply乘法 RR__rotate right右循環(huán) SJMP__short jump短跳轉(zhuǎn) RET__return 子程序返回,3-1 指令格式,二. 機(jī)器語言指令格式,操作碼 [操作數(shù)1] [操作數(shù)2] 有單字節(jié)、雙字節(jié)和三字節(jié)指令。,匯編語言指令中操作碼和操作數(shù)是指令主體,稱為指令可執(zhí)行部分,指令表中可查出對應(yīng)指令代碼。P444,舉例: 匯編語言: 機(jī)器語言: MOV A,R0 E8H MOV R6,#32H 7E 32H MOV 40H,#100 75 40 64H,11101000,3-2 指令尋址方式 CPU尋找操作數(shù)的方法叫尋址方式,3-2-1 操作數(shù)類型 位(b)─ 位尋址區(qū)中的一位二進(jìn)制數(shù)據(jù) 字節(jié)(B)─ 8位二進(jìn)制數(shù)據(jù),3-2-2 尋址方式 (七種) 一.立即尋址方式 指令中給出實(shí)際操作數(shù)據(jù)(立即數(shù)),一般用于為寄存器或存儲器賦常數(shù)初值。 舉例: 機(jī)器碼 8位立即數(shù): MOV A,#3AH ;A3AH 743A 16位立即數(shù): MOV DPTR,#2100H ;DPTR2100H 902100,二.直接尋址方式,指令操作數(shù)是存儲器單元地址,數(shù)據(jù)在存儲器單元中。 指令碼中含有操作數(shù)的地址 MOV A,40H ;A(40H) 機(jī)器碼 E540,直接尋址方式對數(shù)據(jù)操作時(shí),地址是固定值,而地址所指定的單元內(nèi)容為變量形式。 INC 0E0H;以字母A~F開頭的十六進(jìn)制需前面加0) INC ACC,56H,例:設(shè)存儲器兩個(gè)單元的內(nèi)容如圖所示, 執(zhí)行指令 MOV A,40H后 A = ?,適于:1.片內(nèi)RAM低128字節(jié) 2.SFR(可以是物理地址。也可以是特殊功能寄存器名稱) 3.位地址空間(SFR 82個(gè),RAM位地址),三.寄存器尋址方式 指令操作數(shù)為寄存器名,數(shù)據(jù)在寄存器中。 例: MOV A,R0 ;AR0 設(shè)指令執(zhí)行前 A=20H,R0=40H, 執(zhí)行指令后,A= ?,R0= ?,40H,40H,0100 0000,A,0010 0000,R0,,0100 0000,以下寄存器可使用:1.R0~R7 2. A B DPTR C 如:INC A,MOV A, R0; A?R0,四.寄存器間接尋址方式,指令的操作數(shù)為寄存器名,寄存器中為數(shù)據(jù)地址。 存放地址的寄存器稱為間址寄存器或數(shù)據(jù)指針。 例: MOV A,@R0 ;A(R0) 設(shè)指令執(zhí)行前 A=20H,R0=40H,地址為40H存儲器單元內(nèi)容如圖所示。執(zhí)行指令后, A= ? ,R0 = ? , (40H)= ?,34H,40H,34H,R0→,MOV A, @R0,寄存器間址可訪問內(nèi)、外RAM,但不可訪問SFR,五.變址間接尋址方式 數(shù)據(jù)在存儲器中,指令給出的寄存器中為數(shù)據(jù)的基地址和偏移量。 數(shù)據(jù)地址 = 基地址 + 偏移量。 基地址寄存器(DPTR/PC)中的基地址常是表格的起始地址,累加器A中 存放地址偏移量rel(8位無符號數(shù):00H-FFH),例: MOVC A,@A+DPTR ;A(A+DPTR) 設(shè)指令執(zhí)行前 A=02H,DPTR=2000H,存儲器單元內(nèi)容如圖所示。執(zhí)行指令后,A= ? DPTR= ?,12H,2000H,六.相對尋址方式 用于相對轉(zhuǎn)移指令 轉(zhuǎn)移地址 = PC當(dāng)前值 + 偏移量。 偏移量(rel):8位帶符號數(shù)(補(bǔ)碼:-128到+127),例: 2000H 8054H SJMP rel;PC(PC+2+rel),七.位尋址方式,指令給出位地址。 指令碼中含有位地址 位地址用bit表示 表示方法: 1 直接采用位地址: SETB 07H 2 采用第幾個(gè)單元第幾位: MOV 20H.0, C 3 寄存器名+位數(shù): MOV ACC.7, C 4 用偽指令定義的字符名稱: SETB LED1 例: MOV C,40H ;Cy(位地址40H) 設(shè)指令執(zhí)行前 Cy=1,位地址40H存儲器單元如圖,執(zhí)行指令后,Cy= ? 40H對應(yīng)28H.0(57頁圖),0,3-3 MCS-51指令系統(tǒng),指令功能分類: 數(shù)據(jù)傳送、數(shù)據(jù)操作、布爾處理、程序控制。,3-3-1 數(shù)據(jù)傳送指令 實(shí)現(xiàn)寄存器、存儲器之間的數(shù)據(jù)傳送。 一. 內(nèi)部傳送指令: 片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 二. 外部傳送指令: 片外數(shù)據(jù)存儲器數(shù)據(jù)傳送。 三. 交換指令: 片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 四. 堆棧操作指令: 片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 五. 查表指令: 程序存儲器數(shù)據(jù)傳送。,(一)內(nèi)部傳送指令:實(shí)現(xiàn)片內(nèi)數(shù)據(jù)存儲器中數(shù)據(jù)傳送。 指令格式: MOV 目的操作數(shù),源操作數(shù) 尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間址。,指令機(jī)器碼: 11101rrr E8~EF 11100101 n E5 n 1110011i E6、E7 01110100 d 74 d 10101rrr n 1010011i n 85 direct1 direct2 90 d1 d2,MOV A,Rn ;A←Rn,Rn=R0~R7 MOV A,direct ;A←(direct) MOV A,@Ri ;A←(Ri),Ri=R0、R1 MOV A,#d ;A←d, MOV Rn,direct ;Rn←(direct) MOV @Ri,n ;(Ri)←(direct) MOV direct1,direct2;direct2←(direct2),MOV DPTR,#d1d2 ;DPTR←d1d2,(1) 立即尋址,在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有如下5條指令。,MOV A, #data ; A ←data , 74 data MOV direct, #data ; direct← data , 75 direct data MOV @Ri, #data ; (Ri)← data , 76~77 data MOV Rn, #data ; Rn ← data , 78~7F data MOV DPTR, #data16 ; (DPTR) ← #data16 , 90 data15~8data7~0,,MOV A,#70H,,,MOV DPTR,#1600H ;DPTR←1600H,MOV 30H,#40H ;30H單元←40H,(2)直接尋址。,在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有如下5條指令: MOV A, direct ; A ← (direct) , E5 direct MOV Rn, direct ; Rn ← (direct) , A8~AF direct MOV @Ri, direct ; (Ri)← (direct) , A6~A7 direct MOV direct2, direct1; direct2 ← (direct1) , 85 direct1 direct2 MOV direct ,A ; direct? A,這組指令將直接地址所規(guī)定的內(nèi)部RAM單元(片內(nèi)RAM的00H~7FH, SFR的80H~FFH單元)內(nèi)容傳送到累加器A , 寄存器Rn, 并能實(shí)現(xiàn)內(nèi)部數(shù)據(jù)寄存器RAM之間、 特殊功能寄存器SFR之間或SFR與內(nèi)部RAM之間的直接數(shù)據(jù)傳遞。 直接傳遞不需要通過累加器A或者工作寄存器來間接傳送, 從而提高了數(shù)據(jù)傳送的效率,例如:MOV A,30H ;A←30H內(nèi)部RAM單元中的內(nèi)容,30H為直接給出的內(nèi)部RAM地址,(3)寄存器尋址,MOV A, Rn MOV Rn , A MOV direct, Rn 特點(diǎn): 指令碼中含有Rn的寄存器號 寄存器號隱藏在操作碼字段,MOV A,Rn ;A←Rn,Rn=R0~R7,11101rrr E8~EF,(4) 寄存器間接尋址。,在該尋址方式下, 內(nèi)部RAM區(qū)數(shù)據(jù)傳送指令有以下三條: MOV A, @Ri ; A← (Ri) , E6~E7 MOV direct, @Ri ; direct← (Ri) , 86~87 direct MOV @Ri , A 前兩條指令把以Ri的內(nèi)容作為地址進(jìn)行尋址所得到單元的內(nèi)容, 傳送到累加器A或direct指定的片內(nèi)RAM區(qū)單元。,能用于寄存器間接尋址的寄存器有R0,R1,DPTR,SP。 其中R0、R1必須是工作寄存器組中的寄存器。SP僅用于堆棧操作。,例:順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。,MOV A,#30H MOV 4FH,A MOV R0,#20H MOV @R0,4FH MOV 21H,20H,習(xí)題:用兩種尋址方式實(shí)現(xiàn),將片內(nèi)RAM 60H單元的數(shù)據(jù)傳送給累加器A。,解: MOV A,#60H ,MOV R0,#60H MOV A,@R0,;A= 30H ;(4FH)= 30H ;R0= 20H ;(20H)= 30H ;(21H)= 30H,MOV R0,60H MOV A,@R0,解: MOV A,60H,說明:,只有指令表中的指令才有對應(yīng)指令代碼,計(jì)算機(jī)才能執(zhí)行。編程時(shí),不能隨意創(chuàng)造發(fā)明指令。,1. 一條指令中不能同時(shí)出現(xiàn)兩個(gè)工作寄存器: 非法指令: MOV R1,R2 MOV R2,@R0,2. 間址寄存器只能使用 R0、R1。 非法指令:MOV A,@R2,3. SFR區(qū)只能直接尋址,不能用寄存器間接尋址。 非法指令:MOV R0,#80H MOV A,@R0,(二) 外部傳送指令 實(shí)現(xiàn)片外數(shù)據(jù)存儲器和A累加器之間的數(shù)據(jù)傳送。,指令格式:MOVX 目的操作數(shù),源操作數(shù) 尋址方式:片外數(shù)據(jù)存儲器用寄存器間址方式。 1. DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間 MOVX A,@DPTR ;A←(DPTR) MOVX @DPTR,A ;(DPTR)←A 2. Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間 MOVX A,@Ri ;A←(Ri) MOVX @Ri,A ;(Ri)←A,例: 實(shí)現(xiàn)片外數(shù)據(jù)存儲器數(shù)據(jù)傳送(2000H)(2100H)。,MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,#2100H MOVX @DPTR,A,習(xí)題:將片外RAM 0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的 60H單元。,; DPTR= 2000H ; A= X ; DPTR= 2100H ;(2100H)= X,片外數(shù)據(jù)存儲器不能直接尋址。下列為非法指令: MOVX A,2000H MOVX 2100H,2000H,(三)堆棧操作指令 入棧指令:PUSH n ;SPSP+1,(SP)(n) 出棧指令:POP n ;(n)(SP),SPSP-1 1 雙字節(jié)指令,Rn 和A不可直接放在本指令中, 2 Rn必用物理地址 A必用ACC或物理地址 3 一般在60H單元以上,用 MOV SP,#60H,例:設(shè) A=02,B=56H,執(zhí)行下列指令后,SP= ?,A= ? ,B= ?, SP→ ,02H,A,56H,SBR: MOV SP,#30H ;設(shè)棧底 PUSH ACC PUSH B POP ACC POP B,B,(四) 交換指令 實(shí)現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送。 本指令會影響PSW,1. 字節(jié)交換指令 XCH A,Rn ;A Rn XCH A,@Ri;A (Ri) XCH A,direct ;A direct,習(xí)題4:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。,例:設(shè)A= 29H,執(zhí)行指令 XCH A,2AH后,A= ? (2AH)= ?,38H,29H,XCH 60H,61H ←對嗎?,29 H,2. 半字節(jié)交換指令,XCHD A,@Ri ;A0~3 (Ri)0~3 SWAP A ;A4~7 A0~3,習(xí)題:交換片內(nèi)RAM 40H單元和 41H單元的低半字節(jié)。,(五) 查表指令 實(shí)現(xiàn)從程序存儲器讀取數(shù)據(jù)到A累加器,只能使用變址間接尋址方式。 多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。,1.DPTR為基址寄存器,A內(nèi)為無符號整數(shù) MOVC A,@A+DPTR ;A(A+DPTR) 查表范圍為 64KB 程序存儲器任意空間,稱為遠(yuǎn)程查表指令 。 指令執(zhí)行結(jié)果只和DPTR和A內(nèi)容有關(guān),與表格地址無關(guān)。一個(gè)表格可為多個(gè)程序塊共用。 2.PC為基址寄存器, A內(nèi)為無符號整數(shù) MOVC A,@A+PC ;PCPC+1,A(A+PC) 常數(shù)表只能在查表指令后256B范圍內(nèi),稱為近程查表指令。本指令只有一個(gè)字節(jié)。 優(yōu)點(diǎn):不改變特殊功能寄存器及PC的狀態(tài),A中數(shù)據(jù)可取出表中常數(shù) 缺點(diǎn):表格只能存放在該條查表指令的后面的256個(gè)單元內(nèi),表格大小受到限制,而且表格只能被一段程序利用,例:查表法求Y=X2。設(shè)X(0≤X≤15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,1) ORG 1000H SQU: MOV DPTR,#TAB ;確定表首地址(基地址) MOV A,20H ;取X(偏移量) MOVC A,@A+DPTR ;查表求Y=X2 MOV 21H,A ;保存Y RET ;子程序結(jié)束 … ;其它程序段 ORG 3000H ;常數(shù)表格首地址 TAB: DB 00,01,04,09,…,225 ;平方表,2)指令地址 源程序 ORG 1000H ;程序起始地址 1000H SQU: MOV A,20H ;取X 1002H ADD A,#3 ;修正偏移量 1004H MOVC A,@A+PC ;查表求Y=X2 1005H MOV 21H,A;2 P450;存結(jié)果 1007H RET ;1 ;子程序結(jié)束 1008H TAB: DB 00,01,04 ;平方表 100BH DB 09,…,225,例:查表法求Y=X2。設(shè)X(0≤X≤15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,習(xí)題:找出指令錯誤并改正:,1.MOV A,#1000H ;A←1000H 2.MOVX A,1000H ;A←(1000H)片外RAM 3. MOVC A,1000H ;A←(1000H)片外ROM 4.MOVX 60H,A ;片外RAM(60H)←A 5.MOV R0,60H ;片內(nèi)RAM:(61H)←(60H) MOV 61H,@R0 6. XCH R1,R2 ;R1←→R2 7. MOVX DPTR,#2000H;DPTR←2000H 8. MOVX 60H,@DPTR ;片內(nèi)RAM←片外RAM,3-3-2 算術(shù)運(yùn)算指令,與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運(yùn)算指令會影響標(biāo)志位的狀態(tài),即CPU執(zhí)行算術(shù)運(yùn)算指令后,根據(jù)數(shù)據(jù)操作情況自動設(shè)置標(biāo)志位的狀態(tài)。,狀態(tài)標(biāo)志,MCS-51 的程序狀態(tài)字寄存器 PSW 為標(biāo)志寄存器。其格式如下:,1.標(biāo)志位(自動設(shè)置狀態(tài)),1)Cy:進(jìn)位標(biāo)志位 保存運(yùn)算后最高位的進(jìn)位/借位狀態(tài),當(dāng)有進(jìn)位/借位,Cy=1,否則Cy=0。 2)AC:輔助進(jìn)位標(biāo)志位 保存低半字節(jié)的進(jìn)位/借位狀態(tài),當(dāng)D3產(chǎn)生進(jìn)位/借位,AC=1,否則AC=0。用于十進(jìn)制調(diào)整。 3)OV:溢出標(biāo)志位 OV=Cy7Cy6,補(bǔ)碼運(yùn)算產(chǎn)生溢出OV=1,否則OV=0。 4)P:奇偶標(biāo)志位 反映累加器A中數(shù)據(jù)的奇偶性。當(dāng)1的個(gè)數(shù)為奇數(shù),P=1,否則P=0。,2.用戶選擇位(編程設(shè)置狀態(tài)),1)F0:用戶自定義標(biāo)志位。 2)RS1、RS0: 工作寄存器區(qū)選擇位。 復(fù)位時(shí),PSW=00H,例:復(fù)位后,設(shè)置使用工作寄存器3區(qū),其余標(biāo)志位不變。,解: MOV PSW,#,18H,算術(shù)運(yùn)算指令 完成片內(nèi) RAM(Rn,direct,@Ri,#data) 和 A 中數(shù)據(jù)的加減乘除運(yùn)算。,一.加減指令 1.加法指令,0011 1011 + 0011 1011 0111 0110,,76H 0 0 1 1,1)不帶進(jìn)位加法:ADD A,源操作數(shù) ADD A,R2 ;A←A+R2,影響Cy、OV、AC、P 例1:A=3BH,PSW=0,執(zhí)行指令 ADD A,#3BH 求:A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,01000001= 41H,1001 1010 1110 0011 + 0 1 0111 1101,2)帶進(jìn)位加法: ADDC A,源操作數(shù) ADDC A,R2 ;A←A+R2+Cy,影響Cy、OV、AC、P,,7DH 1 1 0 0,例2:A= 9AH,R2= E3H,PSW= 0,執(zhí)行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,10000100 = 84H,帶進(jìn)位加法指令A(yù)DDC用于多字節(jié)運(yùn)算,例:設(shè)雙字節(jié)數(shù) X 存在片內(nèi)RAM 41H、40H單元,Y存在42H、43H單元,編程求 Z=X+Y,并存入片內(nèi)RAM單元44H、45H、46H。,ADDS:MOV A,40H ADD A,42H MOV 44H,A MOV A,41H ADDC A,43H MOV 45H,A MOV A,#0 ADDC A,#0 MOV 46H,A RET,;取被加數(shù)低字節(jié) ;加上加數(shù)低字節(jié) ;保存和的低字節(jié) ;取被加數(shù)高字節(jié) ;加上加數(shù)高字節(jié) ;保存和的高字節(jié) ;求高字節(jié)進(jìn)位 ;子程序結(jié)束,;低字節(jié)相加 ;高字節(jié)相加 ;計(jì)算高字節(jié)進(jìn)位 ;子程序結(jié)束,十進(jìn)制加法指令: ADD A,源操作數(shù) DA A 帶進(jìn)位十進(jìn)制加法指令: ADDC A,源操作數(shù) DA A,BCD調(diào)整指令: DA A ; 對 A 中加法結(jié)果進(jìn)行調(diào)整,2.減法指令 SUBB A,源操作數(shù) ;帶借位減法指令,SUBB A,R2 ;A←A-R2-Cy, ;影響Cy、OV、AC、P,00 0 0 0 0,習(xí)題:編程求雙字節(jié)減法。設(shè)X、Y存在片內(nèi) RAM 60H起始單元,計(jì)算 Z=X-Y 。,例:A= 5AH,R2= 5AH,Cy= 0,執(zhí)行下列指令 SUBB A,R2 求: A= ,Cy= ,OV= ,P= ,AC= ?,3. 增量、減量指令 (與加法指令不同:只有INC A 影響奇偶標(biāo)志位P,其余不影響),INC 單操作數(shù) 如: INC R2 ;R2←R2+1 DEC 單操作數(shù) 如: DEC R2 ;R2←R2-1 INC DPTR ;DPTR←DPTR+1 不影響標(biāo)志位狀態(tài)。,注意:沒有指令 DEC DPTR 可用指令 DEC DPL 代替,4.乘除指令,MUL AB ;BA←AB,Cy←0, ;當(dāng)積高字節(jié)B=0,OV←0;B≠0,則OV←1,例:A= 96(60H), B= 192(C0H),執(zhí)行指令 MUL AB 后, 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 96 192 = 18432(4800H),00H 48H 0 1 0,例:A= 246(F6H),B= 13(0DH),執(zhí)行指令 DIV AB 后求:A=12H ,B=0CH ,Cy=0 ,OV= 0 ,P= 0 ? 解: 246 13 = 18(12H),余數(shù)= 12(0CH)。,DIV AB ;AB,A←商,B←余數(shù),Cy←0, ;當(dāng)除數(shù)B=0,OV←1;B≠0,則OV←0,3-3-3 邏輯運(yùn)算指令,一.單操作數(shù)指令(A累加器為操作數(shù)) 1. A清0指令: CLR A ;A←0 2. A取反指令:CPL A ;A←/A,3. 循環(huán)移位指令: 1)8位循環(huán)指令: RL A ;A循環(huán)左移一位 RR A ;A循環(huán)右移一位,2)9位循環(huán)指令: RLC A;帶Cy循環(huán)左移一位 RRC A;帶Cy循環(huán)右移一位,例:設(shè) A= 11000101 ,Cy= 0,分別執(zhí)行下列單條指令: CPL A 求:A= ,Cy= RL A RLC A,00111010 0,10001011 0,10001010 1,用9位循環(huán)指令實(shí)現(xiàn)多字節(jié)移位 例:編程將寄存器 R6R5 中的雙字節(jié)數(shù)X左移一位。,CLR C MOV A,R5 RLC A MOV R5,A MOV A,R6 RLC A MOV R6,A,;Cy=0, 設(shè) R6= 55H ,R5= AAH,;R6=01010101,R5=10101010,Cy=0,;R6=01010101,R5=01010100,Cy=1,;R6=10101011,R5=01010100,Cy=0,思考題:如何將寄存器R6R5中的雙字節(jié)數(shù)X右移一位。,(二)雙操作數(shù)邏輯運(yùn)算指令(對位邏輯運(yùn)算): ANL、ORL、XRL,ANL A, Rn; A←A∧Rn ANL A, direct; A←A∧(direct) ANL A, @Ri; A←A∧(Ri) ANL direct ,A; direct ←A∧(direct) ANL direct,#data; A←data∧(direct) ANL A, #data; A←A∧data,,習(xí)題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變? 習(xí)題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?,例 A=01B,表示隨機(jī)狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何? XRL A,#0C0H ;將累加器A的內(nèi)容D7、D6取反 ORL A,#03H ;將累加器A的內(nèi)容D1、D0置1 ANL A,#0E7H ;將累加器A的內(nèi)容D4、D3清0 解 :執(zhí)行上述指令后,A=100011B。,3-3-4 布爾變量操作指令 對片內(nèi)RAM中位尋址區(qū)操作。位累加器Cy和位地址bit。,一.位傳送 MOV C,bit ;Cy(bit) MOV bit,C ;(bit)Cy,例:將位地址20H的一位數(shù)傳送到位地址30H中: MOV C,20H MOV 30H,C 二.位清0、置1、取反:CLR、SETB、CPL: CLR C ;Cy0, CLR bit ; 例: CLR 40H; 位地址40H 0,三.邏輯運(yùn)算:ANL、ORL: ANL C,40H ;C←C∧(40H) ANL C,/40H ;C←C∧/(40H),例:設(shè) Cy=1,(位地址40H)=1,執(zhí)行指令 ANL C,/40H 后, Cy= ? , (位地址40H)= ?,位地址表示法: 位地址 40H,位寄存器 F0,字節(jié)加位 ACC.0,0,習(xí)題:設(shè)累加器A(字節(jié)地址E0H)中數(shù)據(jù)為 29H,Cy=0,執(zhí)行指令 ORL C,0E3H 后,Cy= ?,1,3-3-5 控制轉(zhuǎn)移指令 轉(zhuǎn)移指令通過改寫PC的當(dāng)前值,從而改變CPU執(zhí)行程序的順序,使程序發(fā)生跳轉(zhuǎn)。,按轉(zhuǎn)移條件分類: 1)無條件轉(zhuǎn)移: 執(zhí)行無條件轉(zhuǎn)移指令,程序無條件轉(zhuǎn)移到指定處。 2)條件轉(zhuǎn)移: 指令中給出轉(zhuǎn)移條件,執(zhí)行指令時(shí),先測試條件,若滿足條件,則程序發(fā)生轉(zhuǎn)移,否則,仍順序執(zhí)行程序。,按轉(zhuǎn)移方式分類:,1)絕對轉(zhuǎn)移:指令給出轉(zhuǎn)移目的的絕對地址 addr16,執(zhí)行指令后,PCaddr16,2)相對轉(zhuǎn)移:指令給出轉(zhuǎn)移目的與轉(zhuǎn)移指令的相對偏移量rel,執(zhí)行指令后,PCPC + rel 。,例: 地址 源程序 1000H LJMP 2000H 1003H … … 2000H … ;轉(zhuǎn)移目的指令,例: 地址 源程序 1000H SJMP 02 … 1004H … ;轉(zhuǎn)移目的指令,一.無條件轉(zhuǎn)移指令 1.長轉(zhuǎn)移指令: (3字節(jié)雙周期) LJMP addr16 ;PC addr16(常用符號地址表示) 指令機(jī)器碼: 02 addrH addrL 指令轉(zhuǎn)移范圍:64KB LJMP 0A80H;,2.絕對(短)轉(zhuǎn)移指令:(2字節(jié)雙周期) AJMP addr11 ;PCPC+2 ;PC10~0addr10~0 ;PC15~11不變 指令機(jī)器碼:addr1110~8 00001,addr117~0 指令轉(zhuǎn)移范圍:2KB (操作碼) 轉(zhuǎn)移時(shí)要求轉(zhuǎn)移前后保持 PC15~11不變,PC10~0 ← addr11,,相對偏移量 rel 的計(jì)算式: rel = 目的指令地址 -(轉(zhuǎn)移指令地址+指令字節(jié)數(shù)) = 目的地址 - PC當(dāng)前值,3.短轉(zhuǎn)移指令: (2字節(jié)雙周期) SJMP rel ;PCPC+2,PCPC+rel 指令機(jī)器碼: 80H,rel 相對偏移量 rel為8位補(bǔ)碼。 指令轉(zhuǎn)移范圍:前-128~后127字節(jié)(-126~129),編程時(shí),用標(biāo)號代替轉(zhuǎn)移目的地址,轉(zhuǎn)移指令的操作數(shù)交給匯編程序計(jì)算。 LJMP NEXT AJMP NEXT SJMP NEXT … … … NEXT: NEXT: NEXT:,例1:計(jì)算轉(zhuǎn)移指令的相對偏移量 rel,并判斷是否超出轉(zhuǎn)移范圍。,例2:求原地踏步指令的指令代碼 HERE: SJMP HERE HERE: SJMP $,求出指令代碼為:80 FE H,相對偏移量 = 2150H -(2130H+2)= 001EH, 只取低8位:rel = 1EH 指令機(jī)器碼:80 1E H,習(xí)題:計(jì)算程序中轉(zhuǎn)移指令的相對偏移量 rel ,并判斷是否超出轉(zhuǎn)移范圍。 地址 源程序 2130H LOOP: … … 21B0H SJMP LOOP,指令地址 源程序 2130H SJMP NEXT … 2150H NEXT:MOV A,R2,4.變址(間接)轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令) JMP @A+DPTR. ;PCA+DPTR 指令機(jī)器碼 73H,指令轉(zhuǎn)移范圍64KB。,KEY: MOV DPTR,#KTAB MOV A,40H ADD A,40H JMP @A+DPTR KTAB: AJMP FUNC0;2字節(jié) AJMP FUNC1 … FUNC0: … FUNC1: …,應(yīng)用:處理功能鍵。 要求不同功能鍵執(zhí)行不同程序段。設(shè)每個(gè)功能鍵對應(yīng)一個(gè)鍵值 X(0≤X≤FH)。 設(shè)X已存入片內(nèi)RAM的40H單元中。 若X=0,則執(zhí)行程序段FUNC0 若X=1,則執(zhí)行程序段FUNC1 …。,二.條件轉(zhuǎn)移指令,1. A判零轉(zhuǎn)移指令 JZ rel ;PC←PC+2, ;若A=00H,PC←PC+rel(轉(zhuǎn)移), ;若A≠00H,PC不變(不轉(zhuǎn)移),條件轉(zhuǎn)移指令形成程序的分支,賦予計(jì)算機(jī)判斷決策能力 轉(zhuǎn)移條件:1)標(biāo)志位的狀態(tài) 2)位地址中的狀態(tài),JNZ rel ;PC←PC+2, ;若A≠00H, PC←PC+ rel(轉(zhuǎn)移) ;若A=00H,PC不變(不轉(zhuǎn)移),2.判Cy轉(zhuǎn)移指令 JC rel ;Cy=1則轉(zhuǎn)移,Cy=0不轉(zhuǎn)移 JNC rel ;Cy=0則轉(zhuǎn)移,Cy=1不轉(zhuǎn)移,3.判位轉(zhuǎn)移指令 JB bit,rel ;(bit)=1轉(zhuǎn)移,否則不轉(zhuǎn)移 JNB bit,rel ;(bit)=0轉(zhuǎn)移,否則不轉(zhuǎn)移,4. 判位清0轉(zhuǎn)移指令: JBC bit,rel;(b)=1轉(zhuǎn)移,且(b)0,否則不轉(zhuǎn)移,5. 比較不相等轉(zhuǎn)移指令: CJNE 操作數(shù)1,操作數(shù)2,rel,CJNE A,#data,rel ;PC←PC+3 ;若A≠data,則PC←PC+rel ;且當(dāng)Adata,Cy=0,當(dāng)Adata,Cy=1; ;若A =data,PC不變,且Cy=0。,相當(dāng)于兩個(gè)操作數(shù)相減,僅影響標(biāo)志狀態(tài),不保存結(jié)果 CJNE A,direct ;CJNE Rn,#data; CJNE @Ri,#data,6.循環(huán)轉(zhuǎn)移指令:減一條件轉(zhuǎn)移 DJNZ 操作數(shù),rel DJNZ R2,rel ;PC←PC+2,R2←R2-1 ;若R2≠0,PC←PC+rel, ;若R2=0,PC不變。 DJNZ direct, rel,例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次 MOV R2,#100 ;設(shè)循環(huán)計(jì)數(shù)器初值 LOOP: … ;多次循環(huán)程序段 DJNZ R2,LOOP ;循環(huán)控制 … ;循環(huán)結(jié)束,習(xí)題:當(dāng)循環(huán)計(jì)數(shù)器初值為0,循環(huán)次數(shù)有多少?,3-3-6 子程序調(diào)用和返回指令,子程序調(diào)用和返回指令也使程序發(fā)生轉(zhuǎn)移。,一.長調(diào)用指令 LCALL addr16 ;PC←PC+3,SP←SP+1,(SP)←PC7~0 ;SP←SP+1,(SP)←PC15~8, ; PC←addr16 addr為子程序起始地址,編程時(shí)可用標(biāo)號代替。 指令機(jī)器碼:12 addrH addrL 指令調(diào)用范圍:64KB,子程序調(diào)用過程:,與轉(zhuǎn)移指令不同:轉(zhuǎn)移時(shí),先用堆棧保存當(dāng)前地址,二.絕對調(diào)用指令 ACALL addr11 ;PC ←PC+2,SP←SP+1,(SP)←PC7~0 ;SP ← SP+1,(SP)← PC15~8,PC10~0←addr11 addr11為子程序首地址 指令機(jī)器碼:addr1110~810001,addr117~0 指令調(diào)用范圍 2KB。,三.子程序返回指令 RET ;PCH(SP),SPSP-1,PCL(SP),SPSP-1 指令機(jī)器碼:22H RET指令從堆棧彈出保存的PC地址,實(shí)現(xiàn)子程序返回。 RETI;PC15~8←(SP),SP←SP-1 ;PC7~0 ←(SP),SP←SP-1 用于中斷子程序末尾,清除優(yōu)先級狀態(tài)位,20H 92H,21H 53H,SP→,SP→,SP→,SP→,SP→,,PC,2000H,208FH,2092H,2100H,2150H,2153H,2200H,2250H,2251H,2153H,2092H,21FFH,2200H,SP→,SP→,SP→,SP→,SP→,SP→,SP→,SP→,MAIN:MOV SP,#30H;設(shè)置棧底 … LCALL SUB ;調(diào)用子程序 … SUB: … ;子程序段 … RET ;返回主程序,例:子程序嵌套,注意:1.子程序起始指令要使用標(biāo)號,用作子程序名。 2. 執(zhí)行返回指令RET之前,保證棧頂內(nèi)容為主程序返回地址,以便正確返回主程序。,常用格式: MAIN: … ;主程序 LCALL SUBR ;調(diào)用SUBR … … SUBR: … ;子程序首地址 … RET ;子程序返回,NOP空操作指令,NOP ; PC?PC+1 常用在延時(shí)子程序中,延時(shí)一個(gè)機(jī)器周期,作業(yè),3.8 (1) 3.9 3.11 (1)3.12(1)3.13(1)3.14(1) 3.19 (1) 3.20(2) 3.22(1) 3.24 3.25,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單片機(jī)指令系統(tǒng) 單片機(jī) 指令系統(tǒng) PPT 課件
鏈接地址:http://m.zhongcaozhi.com.cn/p-2742416.html