SJMP rel-addr
Là lệnh nhảy không điều kiện. Là lệnh nhảy ngắn (2-byte).
Byte đầu tiên là opcode, byte thứ 2 là địa chỉ tương đối của
đích. Địa chỉ tương đối trong khoảng 00 -> FFH nhưng chia
thành 2 hướng: tới, lui (forward, backward) nên tầm nhảy cho
phép là -128 đến +127 bytes trước lệnh và sau lệnh.
17 trang |
Chia sẻ: thienmai908 | Lượt xem: 1291 | Lượt tải: 0
Nội dung tài liệu Tập lệnh (Instruction Set), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Xung & Hoi 1
1. Giới thiệu
2. Sơ đồ khối và chân
3. Tổ chức bộ nhớ
4. Các thanh ghi chức năng đặc biệt
5. Dao động và hoạt động reset
6. Tập lệnh (Instruction Set)
7. Các mode định địa chỉ
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Lập trình giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
Xung & Hoi 2
MOV dest, source ; dest = source
MOV A, #72H ;A=72H
MOV R4, #62H ;R4=62H
MOV A, R4 ;A=62H
MOV B, 7EH
MOV P1, A ;mov A to port 1
Chú ý 1:
MOV A,#72H ≠ MOV A,72H
8086 8051
MOV AL,72H MOV A,#72H
MOV BX,72H
MOV AL,[BX] MOV A,72H
Chú ý 2:
MOV A,R3 ≡ MOV A,3
MOV DPTR, #7634H
MOV DPL, #34H
MOV DPH, #76H
MOV DPTR, A
MOV Rm, Rn
Xung & Hoi 3
ADD A, Source ;A=A+Source
ADD A,#6 ;A=A+6
ADD A,R6 ;A=A+R6
ADD A,6 ;A=A+[6] or A=A+R6
ADDC A, source ;A=A+source+CY
SETB C ;CY=1
ADDC A,R5 ;A=A+R5+1
SUBB A, source ;A=A-source-CY
SETB C ;CY=1
SUBB A,R5 ;A=A-R5-1
Xung & Hoi 4
SETB bit ; bit=1
CLR bit ; bit=0
SETB C ; CY=1
SETB P0.0 ;bit 0 from port 0 =1
SETB P3.7 ;bit 7 from port 3 =1
SETB ACC.2 ;bit 2 from Accumulator =1
SETB 05
Chú ý:
Lệnh xóa bit CLR tương tự lệnh set bit SETB
CLR C ;CY=0
Song tồn tại 1 ngoại lệ câu lệnh sau đây chỉ cho CLR
CLR A ;A=0
;set bit địa chỉ 05h (tại RAM có địa chỉ byte 20h)
Xung & Hoi 5
DEC byte ;byte=byte-1
INC byte ;byte=byte+1
INC R7
DEC A
DEC 40H ; [40]=[40]-1
CPL A ;1’s complement
MOV A,#55H ;A=01010101 B
L01: CPL A
MOV P1,A
ACALL DELAY
SJMP L01
Xung & Hoi 6
ANL - ORL – XRL dest, source
vd:
MOV R5,#89H
ANL R5,#08H
RR A
RL A
RRC A
RLC A
NOP & RET & RETI
Giống như các lệnh của 8086
Xung & Hoi 7
MUL AB ;B|A = A*B
MOV A,#25H
MOV B,#65H
MUL AB ;25H*65H=0E99
;B=0EH, A=99H
DIV AB ;A = A/B, B = A mod B
MOV A,#25
MOV B,#10
DIV AB ;A=2, B=5
Xung & Hoi 8
Jump if bit=1 & clear bitJBC bit, rel
Jump if bit=0JNB bit, rel
Jump if bit=1JB bit, rel
Jump if CY=0JNC rel
Jump if CY=1JC rel
Jump if dest ¹ sourceCJNE dest, source, rel
Decrement & jump if byte¹0DJNZ byte, rel
Jump if A¹0JNZ rel
Jump if A=0JZ rel
Các lệnh nhảy có điều kiện:
Xung & Hoi 9
Ø DJNZ byte, rel-addr
Viết chương trình xóa thanh ghi A, sau đó cộng 3 vào A mười
lần?
à ORG 0000H
MOV A, #0;
MOV R2, #10
AGAIN: ADD A, #03
DJNZ R2, AGAIN ;repeat until R2=0 (10 lần)
MOV P1, A
Xung & Hoi 10
CJNE , , rel
• So sánh và nhảy nếu không bằng. CJNE so sánh 2 giá trị đầu
tiên và rẽ nhánh nếu các giá trị của 2 toán hạng không bằng
nhau
• C được set bằng 1 nếu giá trị nguyên không dấu của <dest-
byte> nhỏ hơn của . Ngược lại, C = 0
• Cả 2 toán hạng không bị ảnh hưởng sau khi thực thi lệnh
Xung & Hoi 11
VD:
Viết 1 chương trình so sánh R0, R1:
Nếu R0>R1: gửi 1 ra port 2
Else if R0<R1: gửi 0FFH ra port 2
Else gửi 0 ra port 2
Giải đáp:
CJNE R0, 1, NOT_EQ
… ;R0=R1
NOT_EQ: JC R0_NHO_HON
… ;R0>R1
R0_NHO_HON: … ;R0<R1
Xung & Hoi 12
VD:
MOV A, 79H
Port 1 là ngõ vào có giá trị thay đổi liên tục.
….
WAIT: CJNE A,P1,WAIT
…
tác dụng gì?
Trả lời: Chương trình lặp lại tại điểm này cho tới khi nhận giá trị
79H tại đầu vào P1.
Xung & Hoi 13
• SJMP rel-addr
Là lệnh nhảy không điều kiện. Là lệnh nhảy ngắn (2-byte).
Byte đầu tiên là opcode, byte thứ 2 là địa chỉ tương đối của
đích. Địa chỉ tương đối trong khoảng 00àFFH nhưng chia
thành 2 hướng: tới, lui (forward, backward) nên tầm nhảy cho
phép là -128 đến +127 bytes trước lệnh và sau lệnh.
• VD:
0100H: SJMP RelativeAddress
…
0123H: RelativeAddress
à Byte độ dời của lệnh: 0123H-0102H=21H là độ dời
tương đối
PC
Xung & Hoi 14
LJMP addr16
Là lệnh nhảy không điều kiện (3 bytes). Byte đầu tiên là
opcode, byte 2 & 3 chứa địa chỉ đích 16-bit. Tầm nhảy từ
0000àFFFFH
AJMP addr11
Là lệnh nhảy không điều kiện. Nhảy đến địa chỉ tuyệt đối.
Đích nhảy đến phải ở trong vùng 2K của bộ nhớ chương
trình với byte đầu tiên của lệnh theo sau lệnh AJMP. Mã đối
tượng như sau:
10000aaa aaaaaaaa
A10-A8 & A7-A0 của địa chỉ đích
Xung & Hoi 15
LCALL
Là lệnh 3 bytes. LCALL dùng để gọi chương trình con nằm
bất kỳ đâu trong khoảng 64K byte không gian địa chỉ của
8051.
CALL
1 lệnh chuyển điều khiển khác là CALL, dùng để gọi 1 chương
trình con (subroutine).
aaaaaaaa
A15-A8 & A7-A0 của địa chỉ đích
01001000 aaaaaaaa
Xung & Hoi 16
VD:
Ban đầu không khởi động stack pointer (SP).
Nhãn Subroutine đặt tại vị trí 1234H trong bộ nhớ chương trình.
Tại 0123H thực hiện: LCALL Subroutine
Mô tả hoạt động sau khi thực hiện lệnh trên?
26H 26H
0BH
0AH
09H
08H
Start SP=07H
0BH
0AH
09H
08H
SP=08H
01H
0BH
0AH
09H
08H
SP=09H
RAM RAM RAM
34H12H
PC
Xung & Hoi 17
ACALL
Là lệnh 2-byte. Chương trình con phải ở trong phạm vi 2K của
bộ nhớ chương trình so với byte đầu tiên của lệnh theo sau
ACALL.
10001aaa aaaaaaaa
A10-A8 & A7-A0 của địa chỉ đích
Các file đính kèm theo tài liệu này:
- 6_20_20tap_20lenh_.pdf