Professional Documents
Culture Documents
Chuong3 - Tập Lệnh - Nhóm Lệnh Rẽ Nhánh
Chuong3 - Tập Lệnh - Nhóm Lệnh Rẽ Nhánh
- Thao tác thực thi lệnh: - Lệnh ACALL tại địa chỉ 0123H, và
PC PC + 2 lệnh này là 2byte.
SP SP + 1 PC =PC + 2 = 0125H,
(SP) PC 7÷0 PC 7÷0 = DPL = 25H
SP SP + 1 PC 15÷8 = DPH = 01H.
(SP) PC 15÷8 SP = SP + 1 = 08 (08) = 25H
PC page-addr_addr11 SP = SP + 1 = 09 (09) = 01H
PC = addr(SUBRTN) = 0345H
ACALL: 2K
CALL
LCALL: 64K
Các lệnh này chuyển việc thực thi chương trình đến địa chỉ được chỉ
ra trong lệnh.
SJMP : 8-bit offset
LJMP : 16-bit
3. EQU : gán giá trị tƣơng ứng cho tên đƣợc định nghĩa.
VD: SW0 EQU P1.0
CS1 EQU 2000H
4. DB: định nghĩa các byte data trong bộ nhớ chƣơng trình
VD: SQUARES: DB 0,1,4,9,16,25
MESSAGE: DB „WORD‟
“WORD”
„W‟,‟O‟,‟R‟,‟D‟
5. HIGH,LOW: lấy byte cao hoặc byte thấp của toán hạng
VD: MOV A,#HIGH 1234H MOV A,#12H
MOV B,#LOW 1234H MOV B,#34H
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
CJNE – So sánh bằng/không bằng – PP1
N
A = 05H?
CJNE A,#05H,Skip
Y
(Statement 1)
Skip: (Continue)
Statement 1
…………..
DPL low_addr(DPTR)
DPLDPL - 1
N
DPL = 0FFH?
Y
DPHDPH - 1
Statement 1 …………..
Again:
(Statement 1)
N
A = 05H? CJNE A,#05H,Again
(Continue)
Y …………..
(Ri) 40H
RiRi+1
N
Ri = 37H?
Y
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
CJNE – So sánh bằng/không bằng – PP1
Ví dụ: Viết chương trình ghi giá trị 40H vào RAM nội bắt đầu từ
địa chỉ 30H đến 36H.
Ri 30H
ORG 0000H
MOV R1,#30H (Ri) 40H
Again:
MOV @R1,#40H RiRi+1
INC R1
CJNE R1,#37H, Again
N
END Ri = 37H?
N CJNE A,#05H,Not_Eq
A = 05H? (Statement 1)
SJMP Next
Y Not_Eq: (Statement 2)
Next: (Continue)
Statement 2 Statement 1
CJNE A,#05H,$+3
JC LessThan
(Statement 1)
LessThan:(Continue)
N
CJNE A,#05H,$+3
A ≥ 05H? JNC GT_Eq
(Statement 2)
Y
SJMP Next
Statement 2 Statement 1 GT_Eq: (Statement 1)
Next: (Continue)
- Lệnh này sẽ không thực hiện việc gì nhưng tốn thời gian 1MC. Việc thực
thi chương trình được tiếp tục với lệnh kế.
- Không có thanh ghi hay cờ nào bị ảnh hưởng.
- Được dùng trong các chương trình tạo thời gian trễ với những khoảng thời
gian rất nhỏ (s) để tạo các xung có tần số lớn.
Lặp 10 lần
MOV R7,#10
LOOP: (begin loop)
…
…
(end loop)
DJNZ R7,LOOP
(continue)
N
R5=0?
P1.0 1
Delay
P1.0 0
Delay
P1.0 0
tH tL
Delay tL
T
Lƣu ý: CT này thường dùng cho các xung có tần số lớn, còn những tần số nhỏ
thường dùng Timer sẽ được học ở chương sau.
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Chƣơng trình tạo xung
P1.0 NOT
(P1.0)
P1.0 1 t H = tL
Delay
Delay tH
ORG 0
P1.0 0 LOOP: CPL P1.0
ACALL DELAY
SJMP LOOP
DELAY:
Delay tL MOV R6,#200
DL1: MOV R7,#250
DJNZ R7,$
DJNZ R6,DL1
RET
END
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Tạo sóng vuông 10KHz
Viết chƣơng trình tạo sóng vuông 10KHz (D=50%)
trên chân P1.3. Giả sử XTAL = 24MHz.
f = 10KHz T = 100 s ; D=50% tH = tL= 50s = delay
XTAL=24MHz 1MC=0.5 s delay = 100MC
ORG 0000H
lap: CPL P1.3
ACALL delay P1.3 NOT (P1.3)
SJMP lap
delay:
MOV R4,#50 Delay
DJNZ R4,$
RET
END
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Tạo sóng vuông 10KHz – D = 30%
Viết chƣơng trình tạo sóng vuông 10KHz (D=30%) trên chân
P1.3. Giả sử XTAL = 24MHz.
f = 10KHz T = 100 s ; D=30% tH =30%T; tL= 70%T
MC=0.5 s delay1=60MC, delay2 =140MC
ORG 0000H
lap: SETB P1.3
ACALL delay1 P1.3 1
CLR P1.3
ACALL delay2
SJMP lap Delay tH
Delay1: MOV R4,#30
DJNZ R4,$
RET P1.3 0
Delay2: MOV R4,#70
DJNZ R4,$
RET Delay tL
END
Bài giảng môn Vi xử lý
GV: Lê Thị Kim Anh
Tạo sóng vuông 100KHz
Viết chƣơng trình tạo sóng vuông 100KHz (D=50%) trên chân
P1.1. Giả sử XTAL = 12MHz.
XTAL=12MHz 1MC = 1 s
f = 100KHz T = 10 s ; D=50% tH = tL= 50%T= 5s = 5MC
ORG 0000H
lap: CPL P1.1
NOP
NOP
SJMP lap
END
ORG 0000H
lap: SETB P1.2
NOP
NOP
NOP
CLR P1.2
NOP
NOP
NOP
SJMP lap
END