
BÀI TẬP DÀI VI XỬ LÝ
Họ tên: Đặng Đức Công. MSSV:20101181 Lớp: KSTN-ĐKTĐ-K55
Câu 1: Viết CT đếm số âm trong miền nhớ 100 byte từ ô nhớ 123H tại RAM ngoài
Bài làm:
Quy ước bit cao nhất(tức là bit 7) là bit dấu, và số
âm có bit cao nhất bằng 1.
Số các số âm đếm được lưu tại R1.
Địa chỉ 123H là địa chỉ thấp nhất trong 100 byte kề
nhau
Chương trình:
MAIN: MOV R0,#100
MOV DPTR,#123H
MOV R1,#00
LOOP: MOVX A,@DPTR
RLC A
JC NHAY
INC R1
NHAY: INC DPTR
DJNZ R0,LOOP
END
START
R0 #100
DPTR #123H
R1 #00
A @DPTR
RLC A
C = 1?
YES
R1 += 1
DPTR += 1
R0 -= 1
NO
R0 = 0?
END
YES
NO

Câu 2: Viết CT chuyển 2 mảng dữ liệu 10 byte. Biết mảng 1 có địa chỉ 1000H trong RAM
ngoài và mảng 2 có địa chỉ 70H trong RAM trong.
Bài làm:
Quy ước 1000H và 70H là các địa chỉ thấp nhất của
mỗi mảng 10 byte trong các RAM.
Chương trình:
MAIN: MOV R2,#10
MOV DPTR,#1000H
MOV R0,#70H
LOOP: MOVX A,@DPTR
XCH A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,LOOP
END
START
R2 #10
DPTR #1000H
R0 #70
A @DPTR
XCH A,@R0
@DPTR A
R0 += 1
DPTR += 1
R2 -= 1
R2 = 0?
END
YES
NO

Câu 3: Viết CT cộng hai số BCD 4 chữ số trong RAM trong, kết quả cất vào sô thứ 2 .
Biết số thứ 1 đặt tại ô nhớ 70H, và số thứ 2 đặt tại ô nhớ 60H.
Bài làm:
Quy ước 2 số BCD có byte thấp ứng với địa chỉ thấp.
Kết quả cất vào số thứ 2, nếu kết quả có tràn sẽ cất vào
byte 62H.
Chương trình:
MAIN: MOV R0,#70H
MOV R1,#60H
MOV R2,#2
CLR C
LOOP: MOV A,@R0
ADDC A,@R1
DA A
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
JNC EXIT
MOV 62H,#1
EXIT: END
START
R0 #70H
R1 #60H
R2 #2
C #0
A @R0
A += (@R1+C)
DA A
@R1 A
R0 += 1
R1 += 1
R2 -= 1
R2 = 0?
NO
YES
C = 1?
YES
62H #1
END
NO

Câu 4: Viết CT tính trung bình 10 byte trong Ram ngoài từ ô nhớ 1234H.
Bài làm:
Quy ước: Phép tính trung bình có thương trong R0, số
dư trong R1. Địa chỉ 1234H là địa chỉ thấp nhất trong 10 byte
kề nhau.
Chương trình:
MAIN: MOV DPTR,#1234H
MOV R0,#00
MOV R1,#00
MOV R2,#10
LOOP: MOVX A,@DPTR
MOV B,#10
DIV AB
ADD A,R0
MOV R0,A
MOV A,B
ADD A,R1
MOV R1,A
INC DPTR
DJNZ R2,LOOP
MOV A,R1
MOV B,#10
DIV AB
ADD A,R0
MOV R0,A
MOV R1,B
END
START
DPTR #1234H
R0 #00
R1 #00
R2 #10
A @DPTR
B #10
DIV AB
A += R0
R0 A
A B
A += R1
R1 A
DPTR += 1
R2 -= 1
R2 = 0?
NO
YES
A R1
B #10
DIV AB
A += R0
R0 A
R1 B
END

Câu 5: Viết CT sử dụng Timer tạo xung tần số 1Hz tại chân P1.0. Biết xung nhịp thạch
anh 12MHz ( Ton =50%, Toff = 50%).
Bài làm:
Tần số 1Hz => T= 1s. Ton=Toff= 500.000us
Sử dụng Timer0 chế độ 16 bit, thời gian
50000 gồm 10 lần.
15535D = 3CAFH
Chương trình:
MAIN: MOV TMOD,#00000001B
SETB P1.0
LOOP: MOV R1,#10
LOOP1: MOV TH0,#3CH
MOV TL0,#0AFH
CLR TF0
SETB TR0
JNB TF0,$
CLR TR0
DJNZ R1,LOOP1
CPL P1.0
SJMP LOOP
END
START
TMOD #00000001B
P1.0 = 1
R1 #10
TH0 #3CH
TL0 #0AFH
TF0 = 0
TR0 = 1
TF0 = 0
YES
N O
R1 -= 1
TR0 = 0
R1 = 0
NO
YES
CPL P1.0