Câu 1
Câu hỏi: Viết đoạn chương trình chuyển mảng dữ liệu từ vùng nhớ bufer1 có địa 5.0
chỉ offset bắt đầu từ 200h lên vùng nhớ buffer2 có địa chỉ offset bắt đầu từ 300h.
Biết rằng địa chỉ mảng của cả 2 vùng nhớ này đều do DS quản lý, kích thước 2
vùng nhớ bằng nhau và bằng 100 byte.
Đáp án:
5.0
MOV SI, 200H
MOV DI, 300H
MOV CX, 100
LAP100:
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
LOOP LAP100
Câu 2
Câu hỏi: Viết đoạn chương trình chuyển mảng dữ liệu từ vùng nhớ bufer1 có địa 5.0
chỉ offset bắt đầu từ 500h lên vùng nhớ buffer2 có địa chỉ offset bắt đầu từ 700h.
Biết rằng địa chỉ mảng của cả 2 vùng nhớ này đều do DS quản lý, kích thước 2
vùng nhớ bằng nhau và bằng 50 byte.
Đáp án.
5.0
MOV SI, 500H
MOV DI, 700H
MOV CX, 50
LAP50:
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
LOOP
LAP50
Câu 3
Câu hỏi: Viết đoạn chương trình để chuyển 1 byte mã BCD chứa trong thanh ghi 5.0
AL thành các byte mã ASCII rồi lưu vào 2 byte nhớ có địa chỉ mảng là 500H, địa
chỉ offset là 300H và 301H. Biết rằng 1 byte mã BCD bao gồm 2 từ mã BCD chứa
ở 4 bit cao và 4 bit thấp.
Đáp án.
MOV AH, AL
AND AL, 0FH; lọc bỏ 4 bit cao
ADD AL, 30H; chuyển sang mã ASCII (số 0 là 30H)
MOV 500H: 300H, AL
MOV AL, AH
MOV CL, 4; bước nhảy là 4 bit
SHR AL, CL; dịch phải 4 bit, lấy lại 4 bit cao
ADD AL, 30H
MOV 500H: 301H, AL
5.0
Câu 4
Câu hỏi: Viết đoạn chương trình để chuyển 1 byte mã BCD chứa trong thanh ghi
BL thành các byte mã ASCII rồi lưu vào 2 byte nhớ có địa chỉ mảng là 700H, địa
chỉ offset là 500H và 501H. Biết rằng 1 byte mã BCD bao gồm 2 từ mã BCD chứa
ở 4 bit cao và 4 bit thấp.
5.0
Đáp án.
MOV BH, BL
AND BL, 0FH
ADD BL, 30H
MOV 700H: 500H, BL
MOV BL, BH
MOV CL, 4
SHR BL, CL
ADD BL, 30H
MOV 700H: 501H, BL
5.0
Câu 5
Câu hỏi: Viết đoạn chương trình để chuyển 1 byte mã hexa chứa trong thanh 5.0
ghi BH thành các byte mã ASCII rồi chuyển ra ngoài qua cổng 8 bit có địa
chỉ là 600h. Biết rằng 1 byte mã hexa bao gồm 2 từ mã hexa chứa ở 4 bit
cao và 4 bit thấp.
Đáp án.
MOV DX, 600H
MOV BL, BH
AND BH, 0FH; lọc bỏ 4 bit cao
CMP BH, 10; so sánh với 10 nếu lớn hơn nhảy tới BCD1
JAE BCD1
ADD BH, ‘0’
BCD1:
ADD BH, ‘A’ – 10
MOV AL, BH
OUT DX, AL
MOV BH, BL
MOV CL, 4
SHR BH, CL
CMP BH, 10
JAE BCD1
ADD BH, ‘0’
MOV AL, BH
OUT DX, AL
5.0
Câu 6
Câu hỏi: Viết đoạn chương trình để chuyển 1 byte mã hexa chứa trong thanh ghi
5.0
AH thành các byte mã ASCII rồi chuyển ra ngoài qua cổng 8 bit có địa chỉ là 300h.
Biết rằng 1 byte mã hexa bao gồm 2 từ mã hexa chứa ở 4 bit cao và 4 bit thấp.
Đáp án.
MOV DX, 300H
MOV BL, AH
AND AH, 0FH
CMP AH, 10
JC BCD1
ADD AH, ‘A’ – 10
MOV AL, AH
OUT DX, AL
MOV AH, BL
MOV CL, 4
SHR AH, CL
CMP AH, 10
JC BCD2
ADD AH, ‘A’ -10
MOV AL, AH
OUT DX, AL
5.0
Câu 7
Câu hỏi: Xét hệ vi xử lý cần đọc các byte từ cổng dữ liệu 8 bit có địa chỉ 200h vào 5.0
bộ vi xử lý. Biết rằng để xác định cổng đó có dữ liệu hay không, người ta dùng
thêm một cổng trạng thái có địa chỉ 201h. Trong đó bit D3 của cổng này bằng 1
báo rằng có dữ liệu, ngược lại D3 bằng 0 báo rằng không có dữ liệu.
Yêu cầu: Viết đoạn chương trình để đọc 1 byte dữ liệu từ cổng đã cho vào bộ
vi xử lý và lưu vào trong thanh ghi BH.
Đáp án.
5.0
Đoạn chương trình đọc 1 byte trong bài tập chuyển mã Chương 3 – Giáo trình kỹ
thuật vi xử lý – Tác giả Đỗ Xuân Tiến
Port_STATUS 201h
Port_DATA 200h
MOV DX, Port_STATUS
READ_AGAIN:
IN AL,DX
AND AL,08h
JZ READ_AGAIN
MOV DX,Port_DATA
IN AL,DX
MOV BH,AL
Câu 8
Câu hỏi: Xét hệ vi xử lý cần đọc các byte từ cổng dữ liệu 8 bit có địa chỉ 400h vào 5.0
bộ vi xử lý. Biết rằng để xác định cổng đó có dữ liệu hay không, người ta dùng
thêm một cổng trạng thái có địa chỉ 401h. Trong đó bit D5 của cổng này bằng 1
báo rằng có dữ liệu, ngược lại D5 bằng 0 báo rằng không có dữ liệu.
Yêu cầu: Viết đoạn chương trình để đọc 1 byte dữ liệu từ cổng đã cho vào bộ
vi xử lý và lưu vào trong thanh ghi BH.
Đáp án.
Đoạn chương trình đọc 1 byte trong bài tập chuyển mã Chương 3 – Giáo trình kỹ
5.0
thuật vi xử lý – Tác giả Đỗ Xuân Tiến
Port_STATUS 401H
Port_DATA 400H
MOV DX,Port_STATUS
READ_AGIAN:
IN AL,DX
AND AL,20H
JZ READ_AGAIN
MOV DX,Port_DATA
IN AL,DX
MOV BH,AL
Câu 9
Câu hỏi: Viết chương trình chuyển mảng dữ liệu từ vùng nhớ có địa chỉ offset 5.0
DISPLAY_VIDEO = 900h và có địa chỉ mảng là DISPLAY_BASE = 5000h tới
vùng dữ liệu BUFFER_SAVE có địa chỉ mảng do DS quản lý. Biết rằng vùng nhớ
DISPLAY_VIDEO chứa 2 kbyte ký tự.
Đáp án.
5.0
Chương trình chuyển mảng trong chương 3 – Giáo trình kỹ thuật vi xử
lý – Tác giả Đỗ Xuân Tiến.
BUFFER_SAVE DB 2*1024 DUP(?)
DISPLAY_VIDEO = 900h
DISPLAY_BASE = 5000h
MOV SI, DISPLAY_BASE
LEA DI BUFFER_SAVE
MOV AX, DISPLAY_VIDEO
MOV DS,AX
MOV AX,DS
MOV ES,DS
CLD
LOOP_2KB
MOVS
LOOP LOOP_2KB
Câu 10
Câu hỏi: Viết chương trình chuyển mảng dữ liệu từ vùng nhớ Buffer1 có địa chỉ 5.0
offset bắt đầu là 128h tới vùng nhớ Buffer2 có địa chỉ offset bắt đầu là 512h. Biết
rằng cả hai vùng nhớ đều nằm trong mảng có địa chỉ Segment là 200h và kích
thước 2 vùng nhớ bằng nhau và bằng 500 byte.
Đáp án.
MOV AX, 200H
MOV DS, AX
MOV SI, 128H
MOV DI, 512H
MOV CX, 500
BACK:
MOV AL, [SI]
MOV [DI], AL
5.0
INC SI
INC DI
LOOP BACK
Câu 11
Câu hỏi: Viết đoạn chương trình để thu và xử lý tin trong bài toán thu tin đa kênh. 5.0
Biết sơ đồ ngoại vi thu tin như sau:
D5
D1
Sensor 0
D0
K0
Vc
c
D
Q
Clk
K5
Bộ đệm
vào
367
__
R
Sensor 5
/FLOP_In
Vc
c
D Q
Rst 0
Clk
__
R
FlipFop 7474
Rst 5
Bộ đệm
ra
174
/
FLOP_Out
Data
Bus
Đáp án.
5.0
Chương trình con Thu_xulytin trong chương 4 – giáo trình kỹ thuật vi xử lý –
Tác giả Đỗ Xuân Tiến.
IN AL,FLOPS
MOV AH,AL
NOT AL
OUT FLOPS,AL
MOV AL,FFH
OUT FLOPS,AL
MOV CX,6
MOV BX,RAM
LOOP_6K:
MOV AL,AH
SHR AL,1
MOV AH,AL
MOV AL,00H
ADC AL,[BX]
ADD AL
MOV [BX],AL
INC BX
MOV AL,00H
ADC AL,[BX]
ADD AL
MOV [BX],AL
INC BX
MOV AL,00H
ADC AL,[BX]
ADD AL
MOV [BX],AL
INC BX
MOV AL,00H
ADC AL,[BX]
ADD AL
MOV [BX],AL
INC BX
LOOP LOOP_6K
POPA
Câu 12
Câu hỏi: Viết đoạn chương trình để hiển thị dữ liệu của kênh 0 trong bài toán thu 5.0
tin đa kênh. Biết rằng dữ liệu kênh 0 gồm 3 byte có địa chỉ offset bắt đầu từ 8000h,
sơ đồ ngoại vi hiển thị như sau
Kªnh d÷ liÖu 16
bit
/DATAVALUE
FNA
5520
A
a
b
c
d
e
f
g
B
C
D
15
D
N0
N0
N5
N5
N4
N4
N3
N3
N2
N2
N1
N1
D4
d5d4d3d2d1d0
Giải mã tuyến tính
DATAPOS
Đáp án.
D3
D2
D1
7549
4
D5
D0
B
é
khuy
Õch
®¹i
dßng
74
1
G m BCD7Seg
5.0
Chương trình con HT_BF trong chương 4 – giáo trình kỹ thuật vi xử lý – Tác giả Đỗ
Xuân Tiến.
Câu 13
Câu hỏi: Viết đoạn chương trình để xác định phím được nhấn theo sơ đồ tổ chức bàn 5.0
phím sau:
Vcc
Minh họa cấu trúc phím ấn
/KBD_Out
r
3
r
2
9
8
r
1
KBD Out
KBD Out
4
r
7
r
0
6
5
Diode
KBD In
KBD In
/KBD_In
D6
D6
D5
D5
D4
D4
D3
D3
D2
D2
D1
D1
D0
D0
Kênh dữ liệu
Đáp án.
Chương trình con HT_BF trong chương 4 – giáo trình kỹ thuật vi xử lý – Tác giả Đỗ
Xuân Tiến.
Câu 14
5.0
Câu hỏi: Viết đoạn chương trình để khởi tạo cho đơn PIC 8259, biết rằng địa chỉ 5.0
CS của PIC = 10h, vector ngắt cơ sở = 40h, khoảng cách 4 byte/ vector, hệ dùng
EOI thường, không đệm kệnh. Biết dạng thức các từ điều khiển khởi đầu như sau:
ICW1:
ICW2:
ICW4:
Đáp án.
MOV AL, 17H
OUT 10H, AL
MOV AL, 40H
5.0
OUT 11H, AL
MOV AL, 01H
OUT 11H, AL
m
m
Mov al,00h
Out 10h,al
Sti;cho phép ngắt hoạt động trở lại
Câu 15
Câu hỏi:
5.0
K ê n h d ? li? u 8 b it c ? a P I C 8 2 5 9 A
đ ư ? c n ? i v ? i b y te th ? p c ? a k ê n h d ?
li? u h ? v i x ? lý 8 0 2 8 6
H ? VXL
80286
A3
A 0
A 0
/I O R D
/R D
/I O W R
/W R
/I N T A
/I N T A
IN T R
IN T R
S P /E N
A2
V cc
A1
IR
IR
IR
IR
IR
IR
IR
IR
0
1
2
3
4
5
6
7
N V0
N V1
N V2
NV3
N
N
N
N
V
V
V
V
4
5
6
7
/C S
A
B
C
A EN
A15
A4
Vcc
/Q 0
C as0
C as1
C as2
74138
/E 3
/E 2 /Q 7
E1
74138
Cho sơ đồ ghép nối giữa PIC 8259 với hệ vi xử lý như trên, yêu cầu viết đoạn chương trình để
cài đặt ngắt NV5 vào bảng vector ngắt của bộ vi xử lý 80286. Biết rằng số hiệu ngắt cơ sở của
PIC là 30h và đã có sẵn chương trình con phục vụ ngắt IR5_Service.
Đáp án.
5.0
MOV AX, 00H
MOV ES, AX
MOV DX, OFFSET IR5_SERVICE
MOV WORD PTR ES: [35H*4], DX
MOV DX, CS
MOV WORD PTR ES: [35H * 4 + 2], DX
Câu 16
Câu hỏi: Cho sơ đồ ghép nối ADC 0809 với hệ vi xử lý như sau:
5.0
/CS 0809 có địa chỉ xác định từ bộ
giải mã địa chỉ
EOC
/ IORD
OE
Báo cho hệ
vi xử lý biết:
đã biến đổi
xong
START
/ IOWR
ALE
8 kênh vào
A B
C
Kênh dữ
liệu hệ
thống
3 bit địa chỉ kênh vào
Biết rằng địa chỉ chọn chip của ADC là 200h. Viết đoạn chương trình để đọc 1 byte dữ liệu
sau lấy mẫu của kênh 3 vào bộ vi xử lý và lưu trong thanh ghi BL.
Đáp án.
/CS 0809 có địa chỉ xác định từ bộ giải mã
địa chỉ
5.0
Chương trình trong bài tập ADC 8 bit – chương 8 – Giáo trình kỹ thuật vi xử lý – Tác
giả Đỗ Xuân Tiến.
EOC
Báo cho hệ vi
/ IORD
OE
xử lý biết: đã
biến đổi xong
START
/ IOWR
ALE
Câu 17
8 kênh vào
B C
Câu hỏi: Cho sơ đồ ghép nối ADC 0809Avới
hệ vi xử lý như sau:
3 bit địa chỉ kênh vào
Kênh dữ liệu
hệ thống
5.0
Biết rằng địa chỉ chọn chip của ADC là 100h. Viết đoạn chương trình để đọc 1 byte dữ
liệu sau lấy mẫu của kênh 5 vào bộ vi xử lý và lưu trong thanh ghi BH.
Đáp án.
5.0
Chương trình trong bài tập ADC 8 bit – chương 8 – Giáo trình kỹ thuật vi xử lý –
Tác giả Đỗ Xuân Tiến.
Câu 18
Câu hỏi: Viết đoạn chương trình Assembly cho Onchip 80c51 để thức hiện đọc 1 5.0
byte từ ROM có địa chỉ 200h và đưa byte giá trị đó ra cổng P1.
Đáp án.
MOV A, #0
MOV DPTR, #200H
MOVC A, @A+DPTR
MOV P1, A
5.0
Câu 19
Câu hỏi: Viết đoạn chương trình Assembly cho Onchip 80c51 để thực hiện đọc 1 5.0
byte từ ROM có địa chỉ 100h và lưu giá trị đó vào ô nhớ có địa chỉ 40h trên RAM
trong.
Đáp án.
MOV A, #0
MOV DPTR, #100H
MOVC A, @A+DPTR
MOV 40H, A
5.0
Câu 20
Câu hỏi: Hệ đo độ rộng xung trên hệ vi xử lý on-chip 80C51 với focs= 12 MHZ, 5.0
xung cần đo độ rộng được đưa vào chân tín hiệu INT0 (bit P3.2 – chân IC 12), kết
quả đo phải chuyển vào máy tính PC qua đường truyền UART của hệ vi xử lý onchip 80C51 với tốc độ = 9600 baud, khung tin = 8 bit DATA, 1 bit STOP, không
PARITY. Giữa các giá trị kết quả phải có dấu “,” ngăn cách.
Yêu cầu: Phân tích phương pháp đo độ rộng xung và trình bày lưu đồ thuật
toán cho bài toán này (không yêu cầu viết chương tình).
Đáp án.
5.0
Bài toán đo độ rộng xung – Chương 11 - Giáo trình kỹ thuật vi xử lý –
Tác giả Đỗ Xuân Tiến
Câu 21
Câu hỏi: Hệ đo độ rộng xung trên hệ vi xử lý on-chip 80C51 với focs= 12 MHZ,
xung cần đo độ rộng được đưa vào chân tín hiệu INT0 (bit P3.2 – chân IC 12), kết
quả đo phải chứa trong hai thanh ghi: R1 chứa byte cao của kết quả, R0 chứa byte
thấp của kết quả.
5.0
Yêu cầu: Hãy phân tích phương pháp đo độ rộng xung và trình bày thuật
toán cho bài toán này (không yêu cầu viết chương trình).
Đáp án.
5.0
Bài toán đo độ rộng xung – Chương 11 - Giáo trình kỹ thuật vi xử lý –
Tác giả Đỗ Xuân Tiến
Câu 22
Câu hỏi: Viết đoạn chương trình bằng ngôn ngữ Assembly cho Onchip 80c51 5.0
thực hiện:
Khởi tạo cho UART làm việc ở MODE 1, cho phép UART nhận dữ liệu, tốc độ
baud = 9600 baud/s. Biết tần số dao động đưa vào Onchip là 11,059 MHz.
Khởi tạo để Timer 0 chạy ở MODE 2, với giá trị bắt đầu của bộ đếm (giá trị
reload) là 156.
Cho biết dạng thức của các thanh ghi SCON và TMOD lần lượt là:
Và
Đáp án.
MOV SCON, #50H
MOV TMOD, #22H
MOV TH1, #0FDH
MOV TH0, #156
SETB TR1
SETB TR0
5.0
Câu 23
Câu hỏi: Hệ đo độ rộng xung trên hệ vi xử lý on-chip 80C51 với focs= 12 MHZ,
xung cần đo độ rộng được đưa vào chân tín hiệu INT0 (bit P3.2 – chân IC 12), kết
quả đo phải chuyển vào máy tính PC qua đường truyền UART của hệ vi xử lý onchip 80C51 với tốc độ = 9600 baud, khung tin = 8 bit DATA, 1 bit TOP, không
PARITY. Giữa các giá trị kết quả phải có dấu “,” ngăn cách.
Yêu cầu: Viết chương trình cho hệ vi xử lý thực hiện chức năng trên, cho sẵn
lưu đồ thuật toán như sau:
a/ Lưu đồ thuật toán chương trình con phát 1 byte
b/ Lưu đồ thuật toán chương trình chính:
5.0
Đáp án.
5.0
Bài toán đo độ rộng xung – Chương 11 - Giáo trình kỹ thuật vi xử lý –
Tác giả Đỗ Xuân Tiến.
Câu 24
Câu hỏi: Hệ đo độ rộng xung trên hệ vi xử lý on-chip 80C51 với focs= 12 MHZ, 5.0
xung cần đo độ rộng được đưa vào chân tín hiệu INT0 (bit P3.2 – chân IC 12), kết
quả đo phải chứa trong hai thanh ghi: R1 chứa byte cao của kết quả, R0 chứa byte
thấp của kết quả.
Yêu cầu: Viết chương trình cho hệ vi xử lý thực hiện chức năng trên, cho sẵn
lưu đồ thuật toán như sau:
Đáp án.
5.0
Bài toán đo độ rộng xung – Chương 11 - Giáo trình kỹ thuật vi xử lý –
Tác giả Đỗ Xuân Tiến.
Câu 25
Câu hỏi: Cho bài toán dùng hệ vi xử lý Onchip 80c51 với nguồn dao động thạch 5.0
anh 12 MHz để tạo ra đồng hồ. Hãy trình bày ý tưởng sử dụng tài nguyên của
Onchip và viết đoạn chương trình để tạo ra đơn vị là 1 giây.
Đáp án.
5.0
Ý 1: Sử dụng Timer0 ở Mode 2 với giá trị TH0 = 6. Như vậy chu kỳ
ngắt là 250 us. Ta cần đếm 40 * 100 chu kỳ ngắt để có được đơn vị là 1 giây.
Ý 2: ORG 0BH
INC R0
CJNE R0, #40, END_
MOV R0, #0
INC R1
CJNE R1, #100, END_
MOV R1, #0
INC R2
; R2 chứa biến giây
CJNE R2, #60, END_
MOV R2, #0