1 / 47

8051 指令

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 :

dillan
Download Presentation

8051 指令

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 8051 指令

  2. 暫存器-1 • 累積器:ACC,簡稱A • 乘法暫存器: B • 程式計數暫存器: PC • 堆疊指標:SP 5 資料指標暫存器:DPTR (DPH, DPL) 1. 由一個高位元組(DPH)以及一個低位 元組(DPL)所組成 2. 它可以二者合一,成為一個16位元的暫 存器,當做存取資料的位址指標用, 3. 或者是2個獨立的8位元存器(DPH, DPL),視作 一般暫存器來用。

  3. 暫存器-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

  4. 暫存器-3 7.串列資料: SCON, SMOD 串列資料緩衝器:SBUF 一個為發送緩衝暫存器,另一個是接收緩衝暫存器。兩者名稱相同(SBUF) MOV SBUF, A (指發送緩衝暫存器) MOV A, SBUF (指接收緩衝暫存器) • 計時計數器:TMOD, TCON, THX, TLX • 中斷:IE, IP • 程式狀態暫存器:PSW

  5. 8051定址模式 • 立即定址(Immediate Addressing) • 將某個位址或暫存器直接存入一個值 • 立即定址的前置符號為# • 直接定址(Direct Addressing) 直接將某個位址的值傳給CPU中的某一個暫存器  • 間接定址(Indirect Addressing) • 利用暫存器R0,R1,SP及DPTR當成指標,間接取得指標內的資料 • 間接定址的前置符號為@ • 暫存器定址(Register Addressing)凡透過R0~R7 暫存器作資料的搬移或加減運算統稱為暫存器定址 • 索引定址法 • 利用DPTR或PC為基底值然後加上ACC所得位址

  6. 8051定址模式 A 常數127 1. 立即常數定址(immediate constants) MOV A, #127 (A)=127 2.直接定址(direct addressing) MOV A, 7FH (A)=(7FH)=65H Cpu內記憶體7FH 65H A

  7. R0 Cpu內記憶體45H 45H 45H A 77H 8051定址模式 • 3.間接定址(indirect addressing) (a) MOV A, @R0; 搬移cpu內MEM (A)=((R0)) (b) MOVX A, @DPTR;搬移外部MEM (A)=((DPTR))=77H DPTR 外部記憶體1245H 1245H 1245H A 77H

  8. 8051定址模式 4.暫存器定址 (register addressing) MOV A, R7 (A)=(R7)=7AH R7=7AH A

  9. A=23H 1257H A 66H PC=1234H ROM: (A)+(PC)=1257H (A)=66H 8051定址模式 5.索引定址 (index addressing) MOVC A, @A+PC; 搬移ROM資料 (A)=((A)+(PC))

  10. A=23H 1257H A 66H DPTR=1234H 外部RAM: (A)+(DPTR)=1257H (A)=66H 8051定址模式 5.索引定址 (index addressing) MOVX A, @A+DPTR; 搬移外部RAM資料A)+(PC(A)=((A)+(DPTR))=77H

  11. 8051指令

  12. 符號 • Rn: R0~R7 • Ri: R0, R1 • direct: 0~127 • data (常數) 123(十進位) 23H(十六進位) 10011110B(二進位)

  13. 資料轉移指令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)

  14. 資料轉移指令-example 1 • MOV A, # 33H (A)=33H • MOV A, #01011100B (A)=5CH • MOV A, #77 (A)=77 • MOV A, #1 (A)=1 MOV R1, A  ( R1)=(A) ( R1)=(A)=1

  15. 資料轉移指令-example 2 • 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 : 暫存器內容移至累加器

  16. 資料轉移指令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 : 累加器與暫存器的內容交換

  17. 資料轉移指令-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

  18. 資料轉移指令-4 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

  19. 資料轉移指令-5 • Given (A)=34H, (R1)=56H, (30H)=78H XCH A, 30H (A)=78H, (30H)=34H XCH A, R1 (A)=56H, (R1)=34H

  20. 算數運算指令 加: ADD, ADDC, INC 減: SUBB, DEC 乘:MUL 除:DIV

  21. 算數運算指令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)

  22. 算數運算指令-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

  23. 算數運算指令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

  24. 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

  25. 算數運算指令MUL, DIV • Mul A ,B : A, BA*B • Div A, B : A, BA/B • 商數存於A; 餘數存於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

  26. 邏輯運算指令 • ANL, ORL, XOR • RL, RLC, RR, RRC • CLR

  27. 邏輯運算指令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至累加器

  28. 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

  29. AND A, 30H 10110010 00100010 -------------------- 00100010=22H • ORL A, @R1 A or ((R1))=A or (30H) =A or 22H=B2H 10110010 00100010 ---------------- 10110010=B2H

  30. 邏輯運算指令XRL,CLR • *兩資料相同為0,不相同為1 • XRL A , Rn : 暫存器XOR至累加器 • XRL A, direct : 直接位元組XOR至累加器 • XRL A, @Ri : 間接位元組XOR至累加器 • XRL A, #data : 常數值XOR至累加器 • *清除累加器為0 • CLR A : 清除累加器; A=0

  31. 邏輯運算指令RL,RLC,RR,RRC **左旋轉 • RL A : 累加器向左旋轉 • RLC A : 累加器與CY一起向左旋轉 **右旋轉 • RR A : 累加器向右旋轉 • RRC A : 累加器與CY一起向右旋轉

  32. Given (A)=10H, (R1)=33H XRL A, #FFH ; (A)=EFH • XRL A, R1 ; 00010000 00110011 ------------------- 00100011=23H

  33. RL A ;(A)=(A)*2 • A7A6 A5 A4 A3 A2 A1 A00 = A6 A5 A4 A3 A2 A1 A00 • (A)=23H=00100011 RL A=001000110=01000110=46H

  34. RR A; (A)=(A)/2 • 0 A7A6 A5 A4 A3 A2 A1A0 =0 A7A6 A5 A4 A3 A2 A1 • (A)=23H=00100011 RR A=000100011=00010001=11H

  35. RLC A; (A)=2*(A)+(CY) • CY A7A6 A5 A4 A3 A2 A1 A0CY = A6 A5 A4 A3 A2 A1 A0CY * (CY)=A7 • Given ( CY)=1, (A)=23H=00100011 RLC A (CY)00100011(CY)=01000111=47H, (CY)=0

  36. RRC A • (CY)  A7A6 A5 A4 A3 A2 A1A0 (CY) (A) =CY A7A6 A5 A4 A3 A2 A1 • (CY) = A0 • (CY) =1, (A)=23H=00100011 RRC A (CY) 00100011 (CY) (A)=10010001=91H (CY) =1

  37. 程式跳躍指令--副程式呼叫ACALL, LCALL, RET *** CALL ** • ACALL address : 絕對副程式呼叫(0~+-127) • LCALL address :絕對副程式呼叫(0~65535) • RET : 從副程式返回 (RETI 中斷反返回)

  38. CALL---RET . . . CALL DRLAY MOV A,#56H . . . . . . DRLAY: MOV R0,#56H . . . . RET .

  39. 跳躍指令 • 無條件跳躍 • AJMP, JMP • 有條件跳躍 • JZ, JNZ • CJNE • JB • JNB

  40. 無條件跳躍 • AJMP address : 絕對位址跳躍(0~+-127) • JMP @A+DPTR : 跳到一間接位址

  41. 有條件跳躍1 • JZ rel : 若零值旗標(PSW.Z)=0 就跳躍 • JNZ rel : 若零值旗標(PSW.Z)!=0就跳躍

  42. 有條件跳躍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)

  43. 程式跳躍指令3 • CJNE A, direct, rel CJNE A, 30H, LOOP1 • CJNE A, #data, rel CJNE A, #30H, LOOP1 • CJNE Rn, #data, rel CJNE R2, 30H, LOOP1 • CJNE @Ri, #data, rel CJNE @R1, #30H, LOOP1

  44. 有條件跳躍4 • JC rel • JC LOOP1 • JNC rel • JNC LOOP1 • JB bit, rel • JB PSW.5, LOOP1 • JNB bit, rel • JNB 25H.5, LOOP1 • JBC bit, rel • JBC PSW.5, LOOP1

  45. 布林運算指令 • CLR C  CY=0 • CLR 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

  46. 布林運算指令 • ANL 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

  47. 布林運算指令 • MOV C, bit • MOV C, PSW.0 • MOV bit ,C • MOV 22H.3, C

More Related