Tải bản đầy đủ (.pdf) (12 trang)

Đề thi vi xử lý có hướng dẫn giải

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.03 MB, 12 trang )

ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của kiểm tra tại lớp đợt 1


1. Viết các “từ điều khiển” (control word) (hình 1.14 trong sách VXL) để thực hiện
các phép toán sau:
a) R5  4R1 – 2(R2 AND R4)
b) R3  R1/2 + (bù 1 của R2)/4
BG.
Có nhiều cách giải loại bài này:
Cách 1:
Không biến đổi biểu thức
a) Từ điểu khiển
Các tác vụ Chú thích SELA SELB SELD OPR
R5  R1 + R1 R5 = 2R1 001 001 101 00010
R5  R5 + R5 R5 = 4R1 101 101 101 00010
R3  R2 AND R4 R3 = R2 And R4 010 100 011 01000
R3  R3 + R3 R3 = 2(R2 And R4) 011 011 011 00010
R5  R5 - R3 R5 = 4R1 - 2(R2 And R4) 101 011 101 00101


b) Từ điểu khiển
Các tác vụ Chú thích
S
ELA
S
ELB SELD
O
P


R
R3  SHR R1 R5=R1/2 (dịch phải=chia 2) 001 000 011 10000
R4  COM R2 R4 = bù 1 của R2 010 000 100 01110
R
4  SH
R
R4
R
4 = (bù 1 c

a R2)/2
1
0
0
000 100
1
0
000
R4  SHR R4 R4 = (bù 1 của R2)/4 100 000 100 10000
R3  R3 + R4 R3 = R1/2 + (bù 1 của R2)/4 011 100 011 00010

Cách 2:
Biến đổi các biểu thức
a) R5  4R1 – 2(R2 AND R4) = 2(2R1 – (R2 AND R4))
b) R3  R1/2 + (bù 1 của R2)/4 = (R1 + (bù 1 của R2)/2)/2
Ta có các từ điều khiển sau: (chỉ cần 4 từ điều khiển cho a) hoặc b))
a) Từ điểu khiển
Các tác vụ Chú thích SELA SELB SELD OPR
R5  R1 + R1 R5 = 2R1 001 001 101 00010
R3  R2 AND R4 R3 = R2 And R4 010 100 011 01000

R5  R5 - R3 R5 = 2
R
1
-
(
R2 And R4)
1
01 011 101
0
0101
R5  R5 + R5 R5 = 4R1 - 2(R2 And R4) 101 101 101 00010

b) Từ điểu khiển
Các tác vụ Chú thích SELA SELB SELD OPR
R4  COM R2 R4 = bù 1 của R2 010 000 100 01110
R4  SHR R4 R4 = (bù 1 của R2)/2 100 000 100 10000
R3  R1 + R4 R3 = R1 + (bù 1 của R2)/2 001 100 011 00010
R3  SHR R3 R3 = R1/2 + (bù 1 của R2)/4 011 000 011 10000

. . .
2. Hãy cho biết dung lượng bộ nhớ lớn nhất (tính theo byte và word) mà CPU có thể
quản lý được nếu nó có:
a) Số đường địa chỉ là 16 và số đường dữ liệu là 8.
b) Số đường địa chỉ là 20 và số đường dữ liệu là 16.
BG.
Số đ
ư
ờng
địa chỉ
Số đ

ư
ờng
dữ liệu
Dung lượng bộ nhớ lớn nhất mà CPU có thể quản lý
16 8 2
16
x 8 bits = 2
16
bytes =2
6
x2
10
bytes = 64 KB = 32K words
20 16 2
20
x 16 bits = 2
20
words = 1 M

words = 2 MB

3. Hãy cho biết giá trị của các cờ trong thanh ghi trạng thái sau khi CPU 8 bit thực thi
lệnh sau (giả sử ban đầu tất cả các cờ có trị là 0 trước khi thực thi lệnh)
a) Cộng 2 số 8 bit: +126 với +15
b) Cộng 2 số 8 bit: E7H với 09H
c) Trừ 2 số 8 bit: +104 với –12
Chú ý: Trình bày các phép tính theo dạng số nhị phân
BG.
a) Cộng 2 số 8 bit: +126 với +15


0 1 1 1 1 1 1 0 0 Nhớ
Cờ Z S C HC OV
+126 0 1 1 1 1 1 1 0 Trước 0 0 0 0 0
+15 0 0 0 0 1 1 1 1
Tổng -115 1 0 0 0 1 1 0 1 Sau 0 1 0 1 1
b) Cộng 2 số 8 bit: E7H với 09H

0 0 0 0 1 1 1 1 0 Nhớ
Cờ Z S C HC OV
E7H 1 1 1 0 0 1 1 1 Trước 0 0 0 0 0
09H 0 0 0 0 1 0 0 1
Tổng F0H 1 1 1 1 0 0 0 0 Sau 0 1 0 1 0
c) Trừ 2 số 8 bit: +104 với –12

1 1 1 1 0 1 0 0 0 Mượn
Cờ Z S C HC OV
+104 0 1 1 0 1 0 0 0 Trước 0 0 0 0 0
–12 1 1 1 1 0 1 0 0
Hiệu +116 0 1 1 1 0 1 0 0 Sau 0 0 1 0 0
4. Viết mã để tính biểu thức F = A * ( B + C) + D trên các CPU có lệnh 2, 1, và 0 địa
chỉ. Không sắp xếp lại biểu thức và khi tính toán không làm thay đổi các biến A, B, C,
và D.
BG.
CPU có lệnh 2 địa chỉ CPU có l

n
h
1
đ


a
ch

C
PU có lệnh 0 địa ch

MOV R2, B
ADD R2, C
MOV R1, A
MUL R1, R2
ADD R1, D
MOV F, R1
L
OAD
B
ADD C
STORE T
LOAD A
MUL T
ADD D
STORE F
P
USH A
PUSH B
PUSH C
ADD
MUL
PUSH D
ADD
POP F


+
+

ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 2
Thời gian làm bài: 30 phút (Cho mở TL)

1. (2 đ) Vẽ dạng sóng của truyền dữ liệu nối tiếp bất đồng bộ khi truyền 1 byte 4BH với LSB
được truyền đi trước cho các trường hợp sau: (nếu biết tốc độ truyền là 2400 bps)
a) Dữ liệu 7 bit, không có parity và 1 bit stop.
b) Dữ liệu 8 bit, có parity lẻ và 1 bit stop.
BG.
4BH = 0100 1011
2

Tốc độ baud = 2400 bps => Thời gian cho 1 bit T = 1/2400 = 0.417 ms
a) Dữ liệu 7 bit, không có parity và 1 bit stop:


b) Dữ liệu 8 bit, có parity lẻ và 1 bit stop:

2. (3 đ) Thiết kế ROM 3K x 8 từ các chip ROM 1K x 4
BG.

3. (5 đ) Hãy tìm dải địa chỉ của tất cả các tín hiệu /CS trong mạch sau:

BG.


A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
Chọn CS Dải địa chỉ
1 1 1 X X X X X X X X X X X X X
\CS1 E000-FFFF
1 0 0 0 0 0 X X X X X X X X X X
\CS2 8000-83FF
1 0 0 0 0 1 X X X X X X X X X X
\CS3 8400-87FF
1 0 0 0 1 0 X X X X X X X X X X
\CS4 8800-8BFF
1 0 0 0 1 1 X X X X X X X X X X
\CS5 8C00-8FFF
1 0 0 1 0 0 X XXXXXXXXX
\CS6 9000-97FF
1 0 0 1 0 1 X XXXXXXXXX
1 0 0 1 1 0 0 0 X X X X X X X X
\CS7 9800-98FF
1 0 0 1 1 0 0 1 X X X X X X X X
\CS8 9900-99FF

\CS9 luôn luôn là 1 (vì ngõ ra của giải mã 139 có tối đa 1 ngõ ra là 0)
=> không có dải địa chỉ cho \CS9

ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2 – Đáp án của Kiểm tra tại lớp đợt 3
Thời gian làm bài: 30 phút (Cho mở TL)

1. (2 đ) Hãy cho biết cách định địa chỉ của mỗi toán hạng với mỗi lệnh sau:

LD B, 3
LD A, 0A5H
LD HL, 0C028H
LOOP: ADC A, (HL)
INC HL
DJNZ LOOP
BG.
Lệnh
Cách định địa chỉ
Toán hạng 1 Toán hạng 2
LD B, 3 Thanh ghi Tức thời
LD A, 0A5H Thanh ghi Tức thời
LD HL, 0C028H Thanh ghi Tức thời mở rộng
LOOP: ADC A, (HL) Thanh ghi Gián tiếp
INC HL Thanh ghi
DJNZ LOOP Tương đối

2. (6 đ) Hãy viết vài lệnh Z80 để thực hiện các công việc sau: ( PORT1 EQU 07H)
a) B  39H và D  92H; L  B và (PORT1)  D
b) B  47H và C  F2H chỉ dùng 1 lệnh; (2080H)  C và (PORT1)  B. Hãy ghi mã máy cho
đoạn chương trình này và giả sử chúng bắt đầu từ địa chỉ 2000H.
c) D  A và HL  2080H ; (2080H)  D.
d) D  A7H và BC  2055H ; (BC)  D.
e) Biết (2040H) = 98H và (2070H) = F7H. Viết các lệnh để hoán đổi nội dung của 2 ô nhớ này và
viết mã máy cho đoạn đó.
BG.
a) B  39H và D  92H; L  B và (PORT1)  D
LD B,39H
LD D,92H
LD L,B

LD A,D
OUT (PORT1),A

b) B  47H và C  F2H chỉ dùng 1 lệnh; (2080H)  C và (PORT1)  B.
Chương trình Mã máy (hex)
Org 2000H
LD BC,57F2H
LD A,C
LD (2080H),A
LD A,B
OUT (PORT1),A
01 F2 57
79
32 80 20
78
D
3 07
c) D  A và HL  2080H ; (2080H)  D.
LD D,A
LD HL,2080H
LD (HL),D

d) D  A7H và BC  2055H ; (BC)  D.
LD D,0A7H
LD BC,2055H
LD A,D
LD (BC),A

e) Biết (2040H) = 98H và (2070H) = F7H. Viết các lệnh để hoán đổi nội dung của 2 ô nhớ này.
Chương trình Mã máy

(
hex)
LD A,(2040H)
LD B,A
LD A,(2070H)
LD (2040H),A
LD A,B
LD (2070H),A
3
A
1
0 20
47
3A 70 20
32 40 20
78
32 70 20

3. (2 đ) Cho trước đoạn chương trình sau:
LD SP, 1200H
LD HL,3456H
PUSH HL
Hãy vẽ stack với địa chỉ bộ nhớ và nội dung của stack Sau khi Z80 thực thi đoạn chương trình trên,.
BG.
SP = 11FEH
 BộnhớĐịachì

56H 11FEH
34H 11FFH
 1200H


ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ

Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 4
Thời gian làm bài: 30 phút (Cho mở TL)

1. (4 đ) Hãy viết vài lệnh 8051 để thực hiện các công việc sau:
a) Nạp giá trị 1234H vào DPTR bằng 2 cách (nạp thanh ghi 16 bit và nạp thanh ghi 8 bit)
b) Nạp trị số 45H vào thanh ghi R0 bằng 2 cách
c) Chép nội dung của thanh ghi R2 vào R6 (giả sử ở bank 1) bằng các cách với lệnh PUSH, MOV (4
cách)
BG.
Cách 1 Cách 2 Cách 3 Cách 4 Cách 5
a) MOV DPTR,#1234H (*) MOV DPH,#12H
MOV DPL,#34H

b) MOV R0,#45H (*) MOV 0,#45H
c) PUSH 10
POP 14
MOV A,R2
MOV R6,A
MOV 14,R2 MOV R6,10 MOV 14,10 (*)
Chú ý:
 Cách có “*” là cách hiệu quả nhất!

2. (2 đ)
a) Sau đoạn chương trình này, cho biết các địa chỉ bit nào (trong byte được cập nhật) trong vùng nhớ nội
20H đến 2FH có nội dung là 1:

MOV 27h, #48h
MOV R0, #29h
MOV @R0, 27h
b) Cho biết mã máy sau thực hiện tác vụ gì?
75H, 8AH, E7H
BG.
a)
(27H)= 48H = 0100 1000H  Các địa chỉ bit (hex) có nội dung là 1: 3E và 3B
(29H)= 48H = 0100 1000H  Các địa chỉ bit (hex) có nội dung là 1: 4E và 4B

b) Mã lệnh 75H tương ứng với lệnh 3 byte:
MOV direct, #data


Như vậy 75H 8AH E7H tương ứng với lệnh: MOV 8AH, #0E7H

3. (2 đ) Cho biết các cách định địa chỉ của các toán hạng trong các lệnh sau:
ANL C, ACC.1
ADD A, #55
MOV @R1, A
MOV P1, 50H
BG.
Lệnh
C
ách định địa chỉ của
t
oán hạng
1
t
oán hạng

2

ANL C, ACC.1 Hiểu ngầm Trực tiếp (bit)
ADD A, #55 Hiểu ngầm Tức thời
MOV @R1,A Gián tiếp Hiểu ngầm
MOV P1,50H Trực tiếp Trực tiếp

4. (2 đ) Offset tương đối của lệnh sau là bao nhiêu?
a) SJMP AHEAD
nếu lệnh này đang ở ô nhớ 0480H và nhãn AHEAD biểu diễn lệnh ở địa chỉ 043AH.
b) SJMP BACK
nếu lệnh này đang ở ô nhớ A078H và nhãn BACK biểu diễn lệnh ở địa chỉ 9EA8H.
BG.
Địa chỉ lệnh kế = Địa chỉ lệnh hiện tại + chiều dài lệnh

a) b)
Địa chỉ nhảy đến: 043AH 9EA8H
Địa chỉ lệnh kế: – 0482H – A07AH
Hiệu số: FFB8H (-72) FE2EH (-466 < -128)
Offset: B8H Vô nghiệm

ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 5
Thời gian làm bài: 30 phút (Cho mở TL)

1) (1 đ) Trước khi thực thi mỗi lệnh sau thì PSW=5FH và A=19H, sau khi thực thi thì PSW và A=?
a) RLC A
b) RRC A

BG.

Cho trước PSW = 5FH = 0101 1111B và A = 19H = 0001 1001B trước khi thực thi lệnh
a) RLC A
A = 0011 0010B = 32H PSW = 0101 1111B = 5FH

b) RRC A
A = 0000 1100B = 0CH PSW = 1101 1110B = DEH

2) (3 đ) Viết đoạn chương trình 8051 thực hiện công việc sau:
 Nếu A < B thì R2  R1 + R0
 Nếu A = B thì R2  R1 – R0
 Nếu A > B thì R2  A + B
BG.
CJNE A, B, ANEB
AEQB: ; Case: A = B
CLR C ; C  0
MOV A, R1
SUBB A, R0 ; A  R1 – R0 – C = R1 – R0
SJMP Continue
ANEB: ; Case: A  B
JNC AGTB
ALTB: ; Case: A < B
MOV A, R1
ADD A, R0 ; A  R1 + R0
SJMP Continue
AGTB: ; Case: A > B
ADD A, B ; A  A + B
Continue: MOV R2, A
. . .



3) (2 đ) Viết chương trình cài đặt mạch tổ hợp sau: (không biến đổi biểu thức Boole)


BG.

X EQU P1.7
Y EQU P1.6
Z EQU P1.5
F EQU P1.4
MOV P1,#11100000B
LOOP: MOV C, X
ORL C, Y ; C = X or Y
CPL C ; C = X nor y
ANL C,/Z ; C = (X nor Y) and not(Z)
CPL C ; C = (X nor Y) nand not(Z)
MOV F,C
SJMP LOOP


4) (4 đ) Viết chương trình con AND8b thực hiện AND 8 bit của thanh ghi A và kết quả đặt trong cờ C bằng các
cách sau:
a) dùng các lệnh ANL C, bit và
b) dùng lệnh CJNE
BG.
a) dùng các lệnh ANL C
,
bit
b) dùng lệnh CJNE

Cách 1
C
ách 2
AND8b:
MOV C, ACC.0
ANL C, ACC.1
ANL C, ACC.2
ANL C, ACC.3
ANL C, ACC.4
ANL C, ACC.5
ANL C, ACC.6
ANL C, ACC.7
RET

AND8b:
MOV R0,#8
SETB C
L1:
ANL C, ACC.0
RR A
DJNZ R0, L1
RET

AND8b:
CJNE A,#0FFH,KQZ
SETB C
RET
KQZ:
CLR C
RET



ĐHBK Tp HCM – Khoa ĐĐT–BMĐT
GVPT: Hồ Trung Mỹ
Vi xử lý – AY1213-S2
Đáp án của Kiểm tra tại lớp đợt 6
Thời gian làm bài: 30 phút (Cho mở TL)

1. (4 đ) Viết chương trình tạo sóng vuông 12 KHz với chu kỳ nhiệm vụ 50% ở chân P1.0.
Giả sử 8051 dùng XTAL = 12 MHz.
a. Tạo trễ bằng phần mềm
b. Tạo trễ bằng Timer0
BG.
XTAL = 12 MHz  1 MC = 12/XTAL = 1 s
T = 1/(12KHz) = 83.33 s  T
ON
= T
OFF
 41 s
a) Tạo trễ bằng phần mềm b) Tạo trễ bằng Timer0

Loop: CPL P1.0 ; 1 MC
NOP ; 1 MC
MOV R0,#18 ; 1 MC
DJNZ R0, $ ; 2 x 18 MC
SJMP Loop ; 2 MC


MOV TMOD,#2
MOV TH0,#–41

SETB TR0
Loop: JNB TF0, $
CLR TF0
CPL P1.0
SJMP Loop

2. (2 đ) Một thiết kế dùng Timer0 của 8051 để đếm số khách hàng vào tham quan hội chợ,
nếu số khách hàng vào đạt đến 10000 thì ngõ ra P1.0 sẽ là 1. Ngõ vào T0 nhận được 1
xung vuông từ mạch cảm biến khi có 1 khách hàng đi vào. Viết mã cho đoạn CT này.
BG.
SETB P3.4 ; P3.4 (= T0) is input pin
CLR P1.0
MOV TMOD,#00000101B ; Timer 0, Mode 1 of Counter 0
MOV TL0,#LOW(–10000)
MOV TH0,#HIGH(–10000)
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
SETB P1.0
SJMP $

3. (2 đ) Tìm thời gian trễ của chương trình con Delay. Giả sử 8051 đang dùng XTAL = 8
MHz.
DELAY: MOV R7, #5 ; 1 MC
L1: MOV R6, #00H ; 1 MC
L2: MOV R5, #00H ; 1 MC
L3: NOP ; 1 MC
NOP ; 1 MC
DJNZ R5, L3 ; 2 MC

DJNZ R6, L2 ; 2 MC
DJNZ R7, L1 ; 2 MC
RET ; 2 MC
BG.
XTAL = 8 MHz  1 MC = 12/(8 MHz) = 1.5 s
Dựa trên số MC của các lệnh, ta tính được thời gian trễ T_Delay của CT
con Delay này là:
T_Delay = 1 +(1+( 1+(1+1+2)x 256 + 2)x 256 + 2) x 5 + 2 = 1314578 MC
= 1314578 x 1.5 s = 1971867 s  1.972 ms

4. (2 đ) Cho trước đoạn chương trình sau (giả sử XTAL =12 MHz)
MOV TMOD,#1
CLR P1.1
Loop: JB P1.1, Case2
Case1: MOV TL0,#0CH
MOV TH0,#0FEH
SJMP Continue
Case2: MOV TL0,#44H
MOV TH0,#0FDH
Continue: SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
CPL P1.1
SJMP Loop
Tính thời gian T
ON
và T
OFF
của dạng sóng tại P1.1 và tìm chu kỳ nhiệm vụ của nó.

BG.
 Giá trị nạp cho Timer 0 lúc P1.1 bằng 1 tương ứng với –T
ON
:
T
ON
= bù 2 của FD44H = 028CH = 700  T
ON
= 700 MC = 700 s
 Giá trị nạp cho Timer 0 lúc P1.1 bằng 0 tương ứng với –T
OFF
:
T
OFF
= bù 2 của FE0CH = 01F4H = 500  T
OFF
= 500 MC = 500 s
 Như vậy chu kỳ nhiệm vụ là
T
ON
/(T
ON
+ T
OFF
) = 700/(700+500)= 58.33%

×