1、8051 指令,暫存器-1,累積器:ACC,簡稱A 乘法暫存器: B程式計數暫存器: PC堆疊指標:SP5 資料指標暫存器:DPTR (DPH, DPL) 1. 由一個高位元組(DPH)以及一個低位 元組(DPL)所組成 2. 它可以二者合一,成為一個16位元的暫 存器,當做存取資料的位址指標用, 3. 或者是2個獨立的8位元存器(DPH, DPL),視作 一般暫存器來用。,暫存器-2,6. P0P3: 8051晶片與外界溝通的主要管道 P0沒有輸出提升電阻 P1、P2、P3則有提升電阻。 BIT表示法:P0.0P0.7 P1.0P1.7 P2.0P2.7 P3.0P3.7,暫存器-3,7.串
2、列資料: SCON, SMOD串列資料緩衝器:SBUF 一個為發送緩衝暫存器,另一個是接收緩衝暫存器。兩者名稱相同(SBUF) MOV SBUF, A (指發送緩衝暫存器) MOV A, SBUF (指接收緩衝暫存器)計時計數器: TMOD, TCON, THX, TLX中斷: IE, IP程式狀態暫存器: PSW,立即定址(Immediate Addressing)將某個位址或暫存器直接存入一個值立即定址的前置符號為#直接定址(Direct Addressing)直接將某個位址的值傳給CPU中的某一個暫存器 間接定址(Indirect Addressing)利用暫存器R0,R1,SP及DPT
3、R當成指標,間接取得指標內的資料間接定址的前置符號為 暫存器定址(Register Addressing)凡透過R0R7 暫存器作資料的搬移或加減運算統稱為暫存器定址索引定址法利用DPTR或PC為基底值然後加上ACC所得位址,8051定址模式,8051定址模式,1. 立即常數定址(immediate constants) MOV A, #127(A)=1272.直接定址(direct addressing) MOV A, 7FH(A)=(7FH)=65H,常數127,A,65H,Cpu內記憶體7FH,A,8051定址模式,3.間接定址(indirect addressing) (a) MOV
4、A, R0; 搬移cpu內MEM (A)=(R0) (b) MOVX A, DPTR;搬移外部MEM (A)=(DPTR)=77H,1245H,77H,A,DPTR,1245H,外部記憶體1245H,8051定址模式,4. 暫存器定址 (register addressing) MOV A, R7 (A)=(R7)=7AH,R7=7AH,A,8051定址模式,5.索引定址 (index addressing) MOVC A, A+PC; 搬移ROM資料(A)=(A)+(PC),8051定址模式,5.索引定址 (index addressing)MOVX A, A+DPTR; 搬移外部RAM資料
5、A)+(PC(A)=(A)+(DPTR)=77H,8051指令,符號,Rn: R0R7Ri: R0, R1direct: 0127data (常數)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,
6、A : (direct) (A)MOV Ri, A : (Ri) ( A),資料轉移指令-example 1,MOV A, # 33H(A)=33HMOV A, #01011100B (A)=5CHMOV A, #77 (A)=77MOV A, #1 (A)=1 MOV R1, A ( R1)=(A) ( R1)=(A)=1,資料轉移指令-example 2,MOV A, 33H given (33H)=65H(A)=65HMOV R1, A given (R1)=30H, (A)=10H (30H)=10HMOV A, R1 given (R1)=22H (A)=22H,MOV A, dir
7、ect :直接位元組內容移至累加器 MOV A, Ri : 間接位元組內容移至累加器MOV A, Rn : 暫存器內容移至累加器,資料轉移指令MOVX, PUSH , POP XCH,*CPU外部RAM的資料移入累加器(位元位址)MOVX A, Ri :CPU外部RAM的資料移入累加 器(位元位址)MOVX A, DPTR : CPU外部RAM的資料移入累 加器(位元位址)*CPU將資料移入/取出 堆疊區SPPUSH direct :直接位元組的內容放置SP POP direct : 從SP拿回資料至直接位元組*CPU將A資料與暫存器暫存器內容互換XCH A, direct : 累加器與直接位
8、元組的內容換XCH A, Rn : 累加器與暫存器的內容交換,資料轉移指令-3,1 Given (R1)=33H, (33H)=77H, (DPTR)=1111H (1111H)=66HMOVX A, R1 (A)=(外部RAM(R1)=(外部RAM (33H)=77H MOVX A, DPTR (A)=(DPTR)=(1111H)=66H,資料轉移指令-4,PUSH APUSH 30HPUSH R1POP R1POP 30HPOP A,A,A,30H,A,R1,30H,A,A,30H,stack,stack,SP,SP,SP,SP,FILO:FIRST IN LAST OUT,資料轉移指令-
9、5,Given (A)=34H, (R1)=56H, (30H)=78HXCH A, 30H(A)=78H, (30H)=34HXCH 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)+(dir
10、ect)+(CY )Addc A,Ri : (A)(A)+(Ri)+(CY )Addc A,#data : (A) (A)+data+(CY),算數運算指令-2,Given (A)=20H, (R1)=30H, (30H)=66H, (CY)=1ADD A,#03H(A)= (A)+3H= 20H+3H=23HADDC A, R1(A)= (A)+ (R1)+ (CY)= 20H+30H+1=51H,算數運算指令subb, INC,Subb A, Rn :累加器暫存器RnCYSubb A, direct : 累加器directCYSubb A, Ri : 累加器(Ri)CYSubb A, #d
11、ata : 累加器dataCYINC (DEC) A : 累加器()INC (DEC) Rn : 暫存器()INC (DEC) direct : 直接位元組()INC (DEC) Ri : 間接位元組(),Given (A)=10INC A ; (A)=(A)+1=11Given (A)=20 DEC A ; (A)=(A)-1=19Given (R1)=20DEC R1 ; ( R1)=(R1)-1=20-1=19Given (A)=30, (R2)=10, CY=0SUBB A, R2 ;(A)=(A)-(R2)-(CY)=30-10-0=20,算數運算指令MUL, DIV,Mul A ,
12、B : A, BABDiv A, B : A, BA/B商數存於A; 餘數存於BGiven (A)=15, (B)=20MUL A, B (A)x(B)=15x20=300(A)=1, (B)=44Given (A)=17, (B)=4DIV A, B ; 17/4=41 (A)=4, (B)=1,邏輯運算指令,ANL, ORL, XORRL, RLC, RR, RRCCLR,邏輯運算指令ANL,ORL,對每一位元做AND/OR運算ANL A ,Rn : 暫存器AND至累加器(每一位元)ANL A,direct : 直接位元組AND至累加器ANL A,Ri : 間接位元組AND至累加器ANL
13、A,#data : 常數值AND至累加器ORL A ,Rn : 暫存器AND至累加器ORL A,direct : 直接位元組OR至累加器ORL A,Ri : 間接位元組OR至累加器ORL A,#data : 常數值OR至累加器,Given (A)=10110010, (R1)=11110000, (30H)=22H1 ANLA, R1 ; (A)=(A) and (R1)(A): 10110010(R1): 11110000- 101100002 ORL A, #11100000B ; (A): 10110010 D0H: 11100000- 11110010=F0H,AND A, 30H 1
14、0110010 00100010- 00100010=22HORL A, R1 A or (R1)=A or (30H) =A or 22H=B2H1011001000100010-10110010=B2H,邏輯運算指令XRL,CLR,*兩資料相同為0,不相同為1XRL A , Rn : 暫存器XOR至累加器XRL A, direct : 直接位元組XOR至累加器XRL A, Ri : 間接位元組XOR至累加器XRL A, #data : 常數值XOR至累加器*清除累加器為0CLR A : 清除累加器; A=0,邏輯運算指令RL,RLC,RR,RRC,*左旋轉RL A : 累加器向左旋轉RLC
15、 A : 累加器與CY一起向左旋轉*右旋轉RR A : 累加器向右旋轉RRC A : 累加器與CY一起向右旋轉,Given (A)=10H, (R1)=33HXRL A, #FFH ; (A)=EFHXRL A, R1 ; 0001000000110011-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 A
16、7 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 = A6 A5 A4 A3 A2 A1 A0 CY * (CY)=A7 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
17、) = A0 (CY) =1, (A)=23H=00100011 RRC A (CY) 00100011 (CY) (A)=10010001=91H (CY) =1,程式跳躍指令-副程式呼叫ACALL, LCALL, RET,* CALL *ACALL address : 絕對副程式呼叫(0+-127)LCALL address :絕對副程式呼叫(065535)RET : 從副程式返回 (RETI 中斷反返回),CALL-RET,.CALL DRLAYMOV A,#56H.,.DRLAY: MOV R0,#56H . . RET.,跳躍指令,無條件跳躍AJMP, JMP有條件跳躍JZ, JNZ
18、CJNEJBJNB,無條件跳躍,AJMP address : 絕對位址跳躍(0+-127) JMP A+DPTR : 跳到一間接位址,有條件跳躍1,JZ rel : 若零值旗標(PSW.Z)=0 就跳躍JNZ rel : 若零值旗標(PSW.Z)!=0就跳躍,有條件跳躍2,CJNE A, direct, rel :若累加器與直接位元組內容不相同就跳躍至relCJNE A, #data, rel:若累加器與data內容不相同就跳躍至relCJNE Rn, #data, rel:若Rn與data內容不相同就跳躍至relCJNE Ri, #data, rel: (Ri)與data內容不相同就跳躍至r
19、elNOP : 沒動作(短暫時間延遲 1 MT=12TOSC),程式跳躍指令3,CJNE A, direct, rel CJNE A, 30H, LOOP1CJNE A, #data, relCJNE A, #30H, LOOP1CJNE Rn, #data, relCJNE R2, 30H, LOOP1CJNE Ri, #data, rel CJNE R1, #30H, LOOP1,有條件跳躍4,JC relJC LOOP1JNC relJNC LOOP1JB bit, relJB PSW.5, LOOP1JNB bit, relJNB 25H.5, LOOP1JBC bit, relJBC PSW.5, LOOP1,布林運算指令,CLR C CY=0CLR bitCLR P0.1P0.1=0CLR PSW.ZPSW.Z=0SETB CCY=1SETB bit SETB P1.2P1.2=1SET TMOD.3 TMOD.3=1,布林運算指令,ANL C, bitANL C, P3.1(CY)=)CY)and P3.1ANL C, /bitANL C, /20H.4ORL C, bitORL C, 23H.4ORL C, /bitORL C, /PSW.7,布林運算指令,MOV C, bitMOV C, PSW.0MOV bit ,CMOV 22H.3, C,