8051 指令
暫存器-1 累積器:ACC,簡稱A 乘法暫存器: B 程式計數暫存器: PC 堆疊指標:SP 5 資料指標暫存器:DPTR (DPH, DPL) 1. 由一個高位元組(DPH)以及一個低位 元組(DPL)所組成 2. 它可以二者合一,成為一個16位元的暫 存器,當做存取資料的位址指標用, 3. 或者是2個獨立的8位元存器(DPH, DPL),視作 一般暫存器來用。
暫存器-2 6. P0~P3: 8051晶片與外界溝通的主要管道 P0沒有輸出提升電阻 P1、P2、P3則有提升電阻。 BIT表示法: P0.0~P0.7 P1.0~P1.7 P2.0~P2.7 P3.0~P3.7
暫存器-3 7.串列資料: SCON, SMOD 串列資料緩衝器:SBUF MOV SBUF, A (指發送緩衝暫存器) MOV A, SBUF (指接收緩衝暫存器) 計時計數器: TMOD, TCON, THX, TLX 中斷: IE, IP 程式狀態暫存器: PSW
8051定址模式 立即定址(Immediate Addressing) 將某個位址或暫存器直接存入一個值 立即定址的前置符號為# 直接定址(Direct Addressing) 直接將某個位址的值傳給CPU中的某一個暫存器 間接定址(Indirect Addressing) 利用暫存器R0,R1,SP及DPTR當成指標,間接取得指標內的資料 間接定址的前置符號為@ 暫存器定址(Register Addressing) 凡透過R0~R7 暫存器作資料的搬移或加減運算統稱為暫存器定址 索引定址法 利用DPTR或PC為基底值然後加上ACC所得位址
8051定址模式 1. 立即常數定址(immediate constants) MOV A, #127 (A)=127 2.直接定址(direct addressing) MOV A, 7FH (A)=(7FH)=65H A 常數127 Cpu內記憶體7FH 65H A
8051定址模式 3.間接定址(indirect addressing) (a) MOV A, @R0; 搬移cpu內MEM (b) MOVX A, @DPTR;搬移外部MEM (A)=((DPTR))=77H DPTR 45H 77H A R0 Cpu內記憶體45H 外部記憶體1245H 1245H 1245H A 77H
8051定址模式 4. 暫存器定址 (register addressing) MOV A, R7 (A)=(R7)=7AH R7=7AH
8051定址模式 5.索引定址 (index addressing) MOVC A, @A+PC; 搬移ROM資料 PC=1234H A=23H 66H ROM: (A)+(PC)=1257H A (A)=66H 1257H
8051定址模式 5.索引定址 (index addressing) MOVX A, @A+DPTR; 搬移外部RAM資料 A)+(PC(A)=((A)+(DPTR))=77H DPTR=1234H A=23H 66H 外部RAM: (A)+(DPTR)=1257H A (A)=66H 1257H
8051指令
符號 Rn: R0~R7 Ri: R0, R1 direct: 0~127 data (常數) 123(十進位) 23H(十六進位) 10011110B(二進位)
資料轉移指令MOV ** 將資料從mem,暫存器搬移至A暫存器 (read) MOV A, Rn :暫存器暫存器內容移至累加器 MOV A, direct :直接位元組內容移至累加器 MOV A, @Ri : 間接位元組內容移至累加器 MOV A, #data : 常數值移至暫存器 ** 將A暫存器資料搬移至mem,暫存器(write) MOV Rn, A : (Rn) (A) MOV direct, A : (direct) (A) MOV @Ri, A : ((Ri)) ( A)
資料轉移指令-example 1 MOV A, # 33H (A)=33H MOV A, #01011100B (A)=5CH MOV A, #1 (A)=1 MOV R1, A ( R1)=(A) ( R1)=(A)=1
資料轉移指令-example 2 MOV A, direct :直接位元組內容移至累加器 MOV A, @Ri : 間接位元組內容移至累加器 MOV A, 33H given (33H)=65H (A)=65H MOV @R1, A given (R1)=30H, (A)=10H (30H)=10H MOV A, R1 given (R1)=22H (A)=22H MOV A, direct :直接位元組內容移至累加器 MOV A, @Ri : 間接位元組內容移至累加器 MOV A, Rn : 暫存器內容移至累加器
資料轉移指令MOVX, PUSH , POP XCH **CPU外部RAM的資料移入累加器(8位元位址) MOVX A, @Ri :CPU外部RAM的資料移入累加 器(8位元位址) MOVX A, @DPTR : CPU外部RAM的資料移入累 加器(16位元位址) **CPU將資料移入/取出 堆疊區SP PUSH direct :直接位元組的內容放置SP POP direct : 從SP拿回資料至直接位元組 **CPU將A資料與暫存器暫存器內容互換 XCH A, direct : 累加器與直接位元組的內容換 XCH A, Rn : 累加器與暫存器的內容交換
資料轉移指令-3 [1] Given (R1)=33H, (33H)=77H, (DPTR)=1111H (1111H)=66H MOVX A, @R1 (A)=(外部RAM(R1))=((外部RAM (33H))=77H MOVX A, @DPTR (A)=((DPTR))=(1111H)=66H
資料轉移指令-4 PUSH A PUSH 30H PUSH R1 … POP R1 POP 30H POP A stack stack PUSH A PUSH 30H PUSH R1 … POP R1 POP 30H POP A 30H SP SP A A SP 30H A A SP R1 30H A FILO:FIRST IN LAST OUT
資料轉移指令-5 Given (A)=34H, (R1)=56H, (30H)=78H XCH A, 30H (A)=78H, (30H)=34H XCH A, R1 (A)=56H, (R1)=34H
算數運算指令 加: ADD, ADDC, INC 減: SUBB, DEC 乘:MUL 除:DIV
算數運算指令add, addc Add A ,Rn : 加暫存器至累加器 Add A,direct : 加直接位元組至累加器 Add A,@Ri : 加間接位元組至累加器 Add A,#data : 加常數值至累加器 Addc A,Rn : (A) (A)+(Rn)+(CY) Addc A,direct : (A)(A)+(direct)+(CY ) Addc A,@Ri : (A)(A)+((Ri))+(CY ) Addc A,#data : (A) (A)+data+(CY)
算數運算指令-2 Given (A)=20H, (R1)=30H, (30H)=66H, (CY)=1 ADD A,#03H (A)= (A)+3H= 20H+3H=23H ADDC A, R1 (A)= (A)+ (R1)+ (CY)= 20H+30H+1=51H
算數運算指令subb, INC Subb A, Rn :累加器-暫存器Rn-CY Subb A, direct : 累加器-direct-CY Subb A, @Ri : 累加器-(Ri)-CY Subb A, #data : 累加器-data-CY INC (DEC) A : 累加器+(-)1 INC (DEC) Rn : 暫存器+(-)1 INC (DEC) direct : 直接位元組+(-)1 INC (DEC) @Ri : 間接位元組+(-)1
Given (A)=10 INC A ; (A)=(A)+1=11 Given (A)=20 DEC A ; (A)=(A)-1=19 Given (R1)=20 DEC R1 ; ( R1)=(R1)-1=20-1=19 Given (A)=30, (R2)=10, CY=0 SUBB A, R2 ;(A)=(A)-(R2)-(CY)=30-10-0=20
算數運算指令MUL, DIV Mul A ,B : A, BA*B Div A, B : A, BA/B Given (A)=15, (B)=20 MUL A, B (A)x(B)=15x20=300(A)=1, (B)=44 Given (A)=17, (B)=4 DIV A, B ; 17/4=4…1 (A)=4, (B)=1
邏輯運算指令 ANL, ORL, XOR RL, RLC, RR, RRC CLR
邏輯運算指令ANL,ORL 對每一位元做AND/OR運算 ANL A ,Rn : 暫存器AND至累加器(每一位元) ANL A,direct : 直接位元組AND至累加器 ANL A,@Ri : 間接位元組AND至累加器 ANL A,#data : 常數值AND至累加器 ORL A ,Rn : 暫存器AND至累加器 ORL A,direct : 直接位元組OR至累加器 ORL A,@Ri : 間接位元組OR至累加器 ORL A,#data : 常數值OR至累加器
[1] ANL A, R1 ; (A)=(A) and (R1) Given (A)=10110010, (R1)=11110000, (30H)=22H [1] ANL A, R1 ; (A)=(A) and (R1) (A): 10110010 (R1): 11110000 -------------------- 10110000 [2] ORL A, #11100000B ; (A): 10110010 D0H: 11100000 -------------------------- 11110010=F0H
AND A, 30H ORL A, @R1 10110010 00100010 -------------------- A or ((R1))=A or (30H) =A or 22H=B2H ---------------- 10110010=B2H
邏輯運算指令XRL,CLR XRL A , Rn : 暫存器XOR至累加器 XRL A, direct : 直接位元組XOR至累加器 *兩資料相同為0,不相同為1 XRL A , Rn : 暫存器XOR至累加器 XRL A, direct : 直接位元組XOR至累加器 XRL A, @Ri : 間接位元組XOR至累加器 XRL A, #data : 常數值XOR至累加器 *清除累加器為0 CLR A : 清除累加器; A=0
邏輯運算指令RL,RLC,RR,RRC **左旋轉 RL A : 累加器向左旋轉 RLC A : 累加器與CY一起向左旋轉 **右旋轉 RR A : 累加器向右旋轉 RRC A : 累加器與CY一起向右旋轉
Given (A)=10H, (R1)=33H XRL A, #FFH ; (A)=EFH XRL A, R1 ; 00010000 00110011 ------------------- 00100011=23H
RL A ;(A)=(A)*2 A7 A6 A5 A4 A3 A2 A1 A0 0 = A6 A5 A4 A3 A2 A1 A0 0 (A)=23H=00100011 RL A=001000110=01000110=46H
RR A; (A)=(A)/2 0 A7 A6 A5 A4 A3 A2 A1 A0 =0 A7 A6 A5 A4 A3 A2 A1 (A)=23H=00100011 RR A=000100011=00010001=11H
RLC A; (A)=2*(A)+(CY) CY A7 A6 A5 A4 A3 A2 A1 A0CY Given ( CY)=1, (A)=23H=00100011 RLC A (CY)00100011(CY)=01000111=47H, (CY)=0
RRC A (CY) A7 A6 A5 A4 A3 A2 A1 A0 (CY) (A) =CY A7 A6 A5 A4 A3 A2 A1 (CY) = A0 (CY) =1, (A)=23H=00100011 RRC A (CY) 00100011 (CY) (A)=10010001=91H (CY) =1
程式跳躍指令--副程式呼叫 ACALL, LCALL, RET ACALL address : 絕對副程式呼叫(0~+-127) LCALL address :絕對副程式呼叫(0~65535) RET : 從副程式返回 (RETI 中斷反返回)
CALL---RET . CALL DRLAY MOV A,#56H . DRLAY: MOV R0,#56H . . . RET
跳躍指令 無條件跳躍 AJMP, JMP 有條件跳躍 JZ, JNZ CJNE JB JNB
無條件跳躍 AJMP address : 絕對位址跳躍(0~+-127) JMP @A+DPTR : 跳到一間接位址
有條件跳躍1 JZ rel : 若零值旗標(PSW.Z)=0 就跳躍 JNZ rel : 若零值旗標(PSW.Z)!=0就跳躍
有條件跳躍2 CJNE A, direct, rel :若累加器與直接位元組內容不相同就跳躍至rel CJNE A, #data, rel:若累加器與data內容不相同就跳躍至rel CJNE Rn, #data, rel:若Rn與data內容不相同就跳躍至rel CJNE @Ri, #data, rel: ((Ri))與data內容不相同就跳躍至rel NOP : 沒動作(短暫時間延遲 1 MT=12TOSC)
程式跳躍指令3 CJNE A, direct, rel CJNE A, 30H, LOOP1 CJNE A, #data, rel CJNE Rn, #data, rel CJNE R2, 30H, LOOP1 CJNE @Ri, #data, rel CJNE @R1, #30H, LOOP1
有條件跳躍4 JC rel JNC rel JB bit, rel JNB bit, rel JBC bit, rel JC LOOP1 JNC LOOP1 JB bit, rel JB PSW.5, LOOP1 JNB bit, rel JNB 25H.5, LOOP1 JBC bit, rel JBC PSW.5, LOOP1
布林運算指令 CLR C CY=0 CLR bit SETB C CY=1 SETB bit CLR P0.1 P0.1=0 CLR PSW.Z PSW.Z=0 SETB C CY=1 SETB bit SETB P1.2 P1.2=1 SET TMOD.3 TMOD.3=1
布林運算指令 ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit ANL C, P3.1 (CY)=)CY)and P3.1 ANL C, /bit ANL C, /20H.4 ORL C, bit ORL C, 23H.4 ORL C, /bit ORL C, /PSW.7
布林運算指令 MOV C, bit MOV C, PSW.0 MOV bit ,C MOV 22H.3, C