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

Tổng hợp đề Vi xử lý có đáp án BK TPHCM

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 (3.67 MB, 38 trang )

ĐHQG TPHCM–ĐH Bách Khoa
Khoa Đ-ĐT–BM Điện Tử
Điểm

Đề thi – NH: 2017-2018
Chữ ký giám thị
Môn: Vi xử lý – Mã MH: EE2013
Ngày thi: 30/05/2018 – Thời gian làm bài: 110 phút
Đề có 6 trang + 2 trang phụ lục và SV làm trực tiếp trên đề.
(SV không được dùng tài liệu
SV KHÔNG được dùng ĐTDĐ, PC, Laptop, iPad và PC Tablet)
Họ và tên SV: __________________________ MSSV: ____________ Nhóm: ______

(Các câu hỏi 3, 4, 5, 6 phải viết bằng hợp ngữ)
(1) Beginning

(2) Developing

(3) Accomplished

(4) Exemplary

Câu 3 (2.0đ)










Câu 4 (2.0đ)









Câu 5 (1.5đ)









Câu 6 (1.5đ)










Câu 1 (1.0đ)
Câu 2 (2.0đ)

Tổng cộng (10đ)
Câu 1: (2.0 đ)
a. Hãy giải thích chức năng của giải mã lệnh trong CPU
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
b. Nếu một CPU có 16 đường địa chỉ, thì dung lượng tối đa của bộ nhớ nó có thể truy cập là ______
c. Trong VĐK 8051, thanh ghi PC (program counter) có ________ bit
d. Câu lệnh “MOV A, #44H” là câu lênh ____-byte
e. Thanh ghi chứa các cờ báo trong 8051 được gọi là _____________________________
f. Tìm giá trị cờ nhớ CY và AC cho đoạn code sau:
MOV A, #0FFH
ADD A, #01
……………………………………………………………………………………………………
……………………………………………………………………………………………………
g. Băng thanh ghi nào sẽ được sử dụng nếu thay đổi giá trị RS0 và RS1 của thanh ghi PSW qua hai
câu lệnh sau:
SETB PSW.3
SETB PSW.4
h. Đia chỉ của bit P1.5: ________________
i. Địa chỉ của thanh ghi R3 của băng thanh ghi 3: ______
j. Cho biết chân /EA có ý nghĩa gì?
……………………………………………………………………………………………………
……………………………………………………………………………………………………
VXL_Thi HK_172_trang 1/6



Câu 2: (1.0 đ) VXL tổng quát
Hãy điền vào chỗ trống trong hình sau cho thấy hiệu ứng của các cách định địa chỉ:

Câu 3: (2.0 đ)
a) Cho 2 số nhị phân không dấu 16 bit M (chứa trong 2 thanh ghi R7:R6) và N (chứa trong 2 thanh ghi
R5:R4). Hãy viết chương trình con SOSANH so sánh 2 số M và N. Kết quả cất vào cờ F0 (= 1 nếu
M ≥ N; = 0 nếu M < N).
……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

b) Cho một chuỗi số gồm 10 số nhị phân không dấu 16 bit chứa trong RAM nội bắt đầu từ ô nhớ 40H
(byte thấp chứa trong ô nhớ có địa chỉ thấp, byte cao chứa trong ơ nhớ có địa chỉ cao). Xem như có
sẵn chương trình con SOSANH của câu a (không cần viết nội dung), hãy viết chương trình để tìm
số lớn nhất trong chuỗi số này và cất kết quả vào 2 ô nhớ 31H (byte cao) và 30H (byte thấp).

VXL_Thi HK_172_trang 2/6


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

Câu 4: (2.0 đ)
a.

Viết chương trình thực hiện tuần tự các công việc sau và lặp lại, biết rằng 8051 sử dụng thạch anh
11,0592 MHz:
• Nhận số nhị phân khơng dấu 4 bit X từ 4 bit thấp của Port 1 và số nhị phân không dấu 4 bit Y từ
4 bit thấp của Port 2
• Nhận bit D từ chân P2.4
• Phát nối tiếp data 9 bit, bao gồm D7 – D4 là số X (4 bit), D3 – D0 là số Y (4 bit), bit thứ 9 là bit
D, ra cổng nối tiếp với baudrate 19200
……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

VXL_Thi HK_172_trang 3/6


b. Viết chương trình thực hiện tuần tự các cơng việc sau và lặp lại cho một vi điều khiển 8051 khác
(sử dụng thạch anh 11,0592 MHz) để thu data nối tiếp từ vi điều khiển 8051 ở câu a:
• Nhận data 9 bit từ cổng nối tiếp với baudrate 19200, gồm các số X,Y và bit D như mô tả ở câu a
• Thực hiện
nếu bit D = 0 và

nếu bit D =1


Xuất kết quả ra Port 1

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

Câu 5: (1.5 đ)
a. Viết chương trình tạo xung tần số 400Hz ở ngõ ra P1.0. Cho XTAL =12MHz. (0.5đ)
…………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

VXL_Thi HK_172_trang 4/6


b. Viết chương trình tạo 2 sóng ra đồng thời ở chân P1.0 và P1.1 theo hình vẽ dưới đây, dùng ngắt
timer. Lưu ý là tần số ở mỗi chân khác nhau. (1.0 đ)

…………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

Câu 6: (1.5 đ)
Mạch tính cước taxi là hệ thống vi điều khiển 8051 gồm:
• Nút nhấn: khi nhấn tạo 1 xung cạnh xuống; nối vào vào chân /INT0
• Bộ đếm km: tạo ra 1 xung cạnh xuống khi xe chạy được 1 km; nối vào chân /INT1
• LED 7 đoạn: hiển thị giá tiền tính theo đơn vị Ngàn đồng; có 2 chữ số, nối với Port 1 qua 2 IC giải
mã BCD sang LED 7 đoạn 7447
Hoạt động của mạch:
• Ban đầu chưa có khách thì hiển thị giá trị 00
• Khi khách lên xe thì nhấn nút lần 1, xe chạy và tính tiền theo giá 1km là 3 Ngàn đồng (giả sử là giá

tiền không vượt quá 99 Ngàn đồng). Chú ý bắt đầu chở khách là đồng hồ nhảy 3 Ngàn đồng, và cứ
mỗi 1km thì thêm 3 Ngàn đồng.
• Tới nơi đến, thì nhấn nút lần 2 để chốt giá tiền hiển thị cho khách
• Khách trả tiền xuống xe thì tài xế nhấn nút lần 3 thì trở lại trạng thái ban đầu
Hãy viết chương trình mơ tả hoạt động trên
(Gợi ý: phần hiển thị giá tiền nên viết trong chương trình chính)
VXL_Thi HK_172_trang 5/6


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

Kết thúc bài thi HK
VXL_Thi HK_172_trang 6/6


DHQG TPHCM–ĐH Bách Khoa
Khoa Đ-ĐT–BM Điện Tử
Điểm

Đề thi – NH: 2017-2018
Chữ ký giám thị
Môn: Vi xử lý – Mã MH: EE2013
Ngày thi: 30/05/2018 – Thời gian làm bài: 110 phút
Đề có 6 trang + 2 trang phụ lục và SV làm trực tiếp trên đề.
(SV không được dùng tài liệu
SV KHÔNG được dùng ĐTDĐ, PC, Laptop, iPad và PC Tablet)
Họ và tên SV: ___ĐÁP ÁN_______________________ MSSV: ____________ Nhóm: ______

(Các câu hỏi 3, 4, 5, 6 phải viết bằng hợp ngữ)
(1) Beginning

(2) Developing

(3) Accomplished

(4) Exemplary


Câu 3 (2.0đ)









Câu 4 (2.0đ)









Câu 5 (1.5đ)










Câu 6 (1.5đ)









Câu 1 (1.0đ)
Câu 2 (2.0đ)

Tổng cộng (10đ)
Câu 1: (2.0 đ)
a.
b.
c.
d.

Trong VĐK 8051, thanh ghi PC (program counter) có ___16_____ bit
Câu lệnh “MOV A, #44H” là câu lênh __2__-byte
Thanh ghi chứa các cờ báo trong 8051 được gọi là ____________PSW_________________
Hãy giải thích chức năng của giải mã lệnh trong CPU
Xác định phép toán/lệnh, toán hạng và cách định địa chỉ của câu lệnh.

e. Nếu một CPU có 16 đường địa chỉ, thì dung lượng tối đa của bộ nhớ nó có thể truy cập là _64K ơ
nhớ hoặc 64K x n (bit) với n là số bit data của ô nhớ.
f. Tìm giá trị cờ nhớ CY và AC cho đoạn code sau:

MOV A, #0FFH
ADD A, #01
…CY = 1, AC = 1 ………………………………………………………………………
g. Băng thanh ghi nào sẽ được sử dụng nếu thay đổi giá trị RS0 và RS1 của thanh ghi PSW qua hai
câu lệnh sau: Bank 3
SETB PSW.3
SETB PSW.4
h. Đia chỉ của bit P1.5: ________95H________
i. Địa chỉ của thanh ghi R3 của băng thanh ghi 3: ___1BH___
j. Cho biết chân /EA có ý nghĩa gì?
/EA = 0 : chọn ROM ngoài
/EA = 1: chọn ROM nội

VXL_Thi HK_172_trang 1/7


Câu 2: (1.0 đ) VXL tổng quát
Hãy điền vào chỗ trống trong hình sau cho thấy hiệu ứng của các cách định địa chỉ: (PC =320)

Câu 3: (2.0 đ)
a) Cho 2 số nhị phân không dấu 16 bit M (chứa trong 2 thanh ghi R7:R6) và N (chứa trong 2 thanh ghi
R5:R4). Hãy viết chương trình con SOSANH so sánh 2 số M và N. Kết quả cất vào cờ F0 (= 1 nếu
M ≥ N; = 0 nếu M < N).
Cách 1:
SOSANH:

CLRF0:
KHAC:
SETF0:
KT:


Cách 2:
MOV A, R7
CJNE A, 05H, KHAC
MOV A, R6
CJNE A, 04H, $+3
JNC SETF0
CLR F0
SJMP KT
JC
CLRF0
SETB F0
RET

SOSANH:
MOV A, R7
CJNE A, 05H, KHONGBANG ;SS byte cao
SJMP BTHAP ; neu bang thi SS byte thap
KHONGBANG:
JC MNHOHONN
SETB F0
SJMP EXIT
MNHOHONN:
CLR F0
SJMO EXIT
BTHAP:
MOV A, R6
CJNE A, 04H, $+3 ;SS byte thap
JC MNHOHONN
SETB F0

EXIT:
RET

b) Cho một chuỗi số gồm 10 số nhị phân không dấu 16 bit chứa trong RAM nội bắt đầu từ ô nhớ 40H
(byte thấp chứa trong ơ nhớ có địa chỉ thấp, byte cao chứa trong ơ nhớ có địa chỉ cao). Xem như có
sẵn chương trình con SOSANH của câu a (khơng cần viết nội dung), hãy viết chương trình để tìm
số lớn nhất trong chuỗi số này và cất kết quả vào 2 ô nhớ 31H (byte cao) và 30H (byte thấp).
VXL_Thi HK_172_trang 2/7


Cách 1:
MOV R3, #10
MOV R0, #40H
MOV R5, #0
; MAX
MOV R4, #0
LP:
MOV 06H, @R0
INC R0
MOV 07H, @R0
INC R0
ACALL SOSANH
JB
F0, TT
MOV R5, 07H
MOV R4, 06H
TT:
DJNZ R3, LP
MOV 31H, R5
MOV 30H, R4

SJMP $

Cách 2:
ORG 0000H
MOV R2,#9 ;lap 9 lan
MOV 31H,41H ;lay so max la so dau
tien (byte cao)
MOV 30H,40H ;byte thap
MOV R0,#42H ;dia chi so ke tiep
LOOP:
MOV R7,31H ;lay so max hien tai vao
R7:R6
MOV R6,30H
MOV A,@R0 ;lay so ke tiep vao R5:R4
MOV R4,A
INC R0
MOV R5,A
INC R0
ACALL SOSANH ; SS so max hien tai voi
so ke tiep trong chuoi
JB F0, CONT
;neu lon hon tiep tuc
MOV 31H, R5
;neu nho hon thi lay so
ke tiep lam max
MOV 30H, R4
CONT:
DJNZ R2, LOOP
SJMP $


Câu 4: (2.0 đ)
a) Viết chương trình thực hiện tuần tự các cơng việc sau và lặp lại, biết rằng 8051 sử dụng thạch anh
11,0592 MHz:
Nhận số nhị phân không dấu 4 bit X từ 4 bit thấp của Port 1 và số nhị phân không dấu 4 bit Y từ 4
bit thấp của Port 2
Nhận bit D từ chân P2.4
Phát nối tiếp data 9 bit, bao gồm D7 – D4 là số X (4 bit), D3 – D0 là số Y (4 bit), bit thứ 9 là bit D,
ra cổng nối tiếp với baudrate 19200

Cách 1:

LP:

ORG 0000H
MOV TMOD, #20H
MOV TH1, # -3
MOV A, PCON
SETB ACC.7
MOV PCON, A
SETB TR1
MOV SCON, #10000010B
MOV C, P2.4
MOV TB8, C
MOV A, P1
ANL A, #0FH
SWAP A
MOV R7, A

MOV
ANL

ADD
JNB
CLR
MOV
SJMP

A, P2
A, #0FH
A, R7
TI, $
TI
SBUF, A
LP

VXL_Thi HK_172_trang 3/7


Cách 2:
ORG 0000H
MOV SCON, #0C2H ;hoac 0D2H
MOV A, PCON
SETB ACC.7
MOV PCON,A
MOV TMOD,#20H
MOV TH0,#-3
SETB TR1

LOOP:
MOV A, P1
ANL A, #0FH

SWAP A
MOV R2, A
MOV A, P2
MOV C, ACC.4
MOV TB8, C
ANL A, #0FH
ORL A, R2
JNB TI, $
CLR TI
MOV SBUF, A
SJMP LOOP
END

;R2 (4 bit cao) chua so X
;C chua bit D
; A (4 bit thap) chua so Y
; A chua X_Y

b) Viết chương trình thực hiện tuần tự các công việc sau và lặp lại cho một vi điều khiển 8051 khác (sử
dụng thạch anh 11,0592 MHz) để thu data nối tiếp từ vi điều khiển 8051 ở câu a:
Nhận data 9 bit từ cổng nối tiếp với baudrate 19200, gồm các số X, Y và bit D như mô tả ở câu a
Thực hiện
nếu bit D = 0 và
nếu bit D =1
Xuất kết quả ra Port 1
Cách 1:

LP:

ORG 0000H

MOV TMOD, #20H
MOV TH1, # -3
MOV A, PCON
SETB ACC.7
MOV PCON, A
SETB TR1
MOV SCON, #10010000B
JNB RI, LP
CLR RI
MOV R7, SBUF
MOV A, R7
ANL A, #0FH
MOV R6, A
MOV A, R7
ANL A, #0FH
SWAP A

JB
ADD
SJMP
TRU: SUBB
JNB
CPL
INC
TT:
MOV
SJMP

RB8, TRU
A, R6

TT
A, R6
ACC.7, TT
A
A
P1, A
LP

VXL_Thi HK_172_trang 4/7


Cách 2:
ORG 0000H
MOV SCON, #0D2H
MOV A, PCON
SETB ACC.7
MOV PCON, A
MOV TMOD, #20H
MOV TH0, #-3
SETB TR1
LOOP:
JNB RI, $
CLR RI
MOV A, SBUF
MOV R7, A
MOV C, RB8
ANL A, #0FH
MOV R6, A
;R6 chua so Y
MOV A, R7

SWAP A
ANL A, $0FH
;A chua so X
JC TRITUYETDOI
ADD A, R6
SJMP NEXT

TRITUYETDOI:
CJNE A, R6, $+3
JC XNHOHONY
SUBB A, R6
SJMP NEXT
XNHOHONY:
MOV R5, A
MOV A, R6
CLR C
SUBB A, R5

; Tinh X-Y

; R5 chua X
; A chua so Y
; Tinh Y-X

NEXT:
MOV P1, A
SJMP LOOP
END

Câu 5: (1.5 đ)

a.Viết chương trình tạo xung tần số 400Hz ở ngõ ra P1.0. Cho XTAL =12MHz. (0.5đ)
ORG 000BH
T = 2.5ms = 2500 us = 2500 MC
CPL P1.0
CLR TR0
LP:
CPL P1.0
MOV TH0, #HIGH(-1250)
MOV R7, #5
MOV TL0, #LOW (-1250)
L1:
MOV R6, #125
SETB TR0
DJNZ R6, $
RETI
DJNZ R7, L1
MAIN: MOV TMOD, #01H
SJMP LP
SETB TF0
=============================
MOV IE, # 10000010B
ORG 0000H
SJMP $
LJMP MAIN
b. Viết chương trình tạo 2 sóng ra đồng thời ở chân P1.0 và P1.1 theo hình vẽ dưới đây, dùng ngắt
timer. Lưu ý là tần số ở mỗi chân khác nhau. (1.0 đ)

VXL_Thi HK_172_trang 5/7



Cách 1:
ORG
LJMP
ORG
LJMP
ORG
LJMP
MAIN:
MOV
MOV
SETB
SETB
MOV
SJMP
ISR_T1:
CLR
DJNZ
MOV
CPL
TT1: MOV
MOV
SETB
RETI

0000H
MAIN
000BH
ISR_T0
001BH
ISR_T1

TMOD, #11H
R7, #10 ; 0.5s = 10 x 50ms
TF1
TF0
IE, #10001010B
$
TR1
R7, TT1
R7, #10
F0
TH1, #HIGH(-50000)
TL1, #LOW(-50000)
TR1

Cách 2:
org 0000h
sjmp main
org 000bh
sjmp isrt0
org 001bh
sjmp isrt1
main:
mov IE, #10001010b
mov tmod, #11H
mov r0, #10
setb tr1
setb TF0
; timer 0 tao khoang 0.5s
sjmp $
isrt0:

clr tr0
mov th0, #high(-50000)
mov tl0, #low(-50000)
djnz r0, thoat1
mov r0, #10
cpl c

ISR_T0:

XUAT_1:

TT0:

CLR
JB
CPL
CLR
MOV
MOV
SJMP
CPL
CLR
MOV
MOV
SETB
RETI
END

TR0
F0, XUAT_1

P1.0
P1.1
TH0, #HIGH(-1250)
TL0, #LOW(-1250)
TT0
P1.1
P1.0
TH0, #HIGH(-500)
TL0, #LOW(-500)
TR0

thoat1: setb tr0
reti
isrt1:
jc out1
cpl p1.0 ; xuất ngõ ra P1.0
clr p1.1
clr tr1
mov th1, #high(-1250)
mov tl1, #low(-1250)
setb tr1
sjmp thoat2
out1: cpl p1.1 ; xuất ngõ ra P1.1
clr p1.0
clr tr1
mov th1, #high(-500)
mov tl1, #low(-500)
setb tr1
thoat2:
reti

end

VXL_Thi HK_172_trang 6/7


Câu 6: (1.5 đ)
Mạch tính cước taxi là hệ thống vi điều khiển 8051 gồm:
Nút nhấn: khi nhấn tạo 1 xung cạnh xuống; nối vào vào chân /INT0
Bộ đếm km: tạo ra 1 xung cạnh xuống khi xe chạy được 1 km; nối vào chân /INT1
LED 7 đoạn: hiển thị giá tiền tính theo đơn vị Ngàn đồng; có 2 chữ số, nối với Port 1 qua 2 IC giải
mã BCD sang LED 7 đoạn 7447
Hoạt động của mạch:
Ban đầu chưa có khách thì hiển thị giá trị 00
Khi khách lên xe thì nhấn nút lần 1, xe chạy và tính tiền theo giá 1km là 3 Ngàn đồng (giả sử là giá
tiền không vượt quá 99 Ngàn đồng). Chú ý bắt đầu chở khách là đồng hồ nhảy 3 Ngàn đồng, và cứ
mỗi 1km thì thêm 3 Ngàn đồng.
Tới nơi đến, thì nhấn nút lần 2 để chốt giá tiền hiển thị cho khách
Khách trả tiền xuống xe thì tài xế nhấn nút lần 3 thì trở lại trạng thái ban đầu
Hãy viết chương trình mơ tả hoạt động trên
(Gợi ý: phần hiển thị giá tiền nên viết trong chương trình chính)

MAIN:

LOOP:

ORG
LJMP
ORG
LJMP
ORG

LJMP
SETB
SETB
MOV
MOV

0000H
MAIN
0003H
ISR_X0
0013H
ISR_X1
IT0
IT1
R7, #0 ; số tiền
R6, #0 ; biến t.thái
có 3 giá trị 0, 1, 2
MOV IE, #10000001B
MOV A, R7 ; hiển thị
MOV B, #10
DIV
AB
SWAP A
ADD A, B
MOV P1, A
SJMP LOOP

ISR_X0:

TTHAI:


TT1:

INC
CJNE
MOV
CJNE
CLR
MOV
SJMP
CJNE
SETB

TT2:

MOV
SJMP
CLR

KTHUC:

RETI

ISR_X1:

MOV
ADD
MOV
RETI
END


Kết thúc bài thi HK
VXL_Thi HK_172_trang 7/7

R6
R6, #3, TTHAI
R6, #0
R6, #0, TT1
EX1
; t.thái 0
R7, #0
KTHUC
R6, #1, TT2
EX1
; t.thái 1:
xe chạy + tính tiền
R7, #3
KTHUC
EX1
; t.thái 2:
chốt giá

A, R7
A, #3
R7, A



ĐHQG TPHCM–ĐH Bách Khoa
Khoa Đ-ĐT–BM Điện Tử

Điểm

Đề thi – NH: 2016-2017
Chữ ký giám thị
Môn: Vi xử lý – Mã MH: EE2013
Ngày thi: 29/05/2017 – Thời gian làm bài: 120 phút
Đề có 6 câu, 6 trang + 2 trang phụ lục và SV làm trực tiếp trên đề.
(SV không được dùng tài liệu
SV KHÔNG được dùng ĐTDĐ, PC, Laptop, iPad và PC Tablet)
Họ và tên SV: __________________________ MSSV: ____________ Nhóm: ______

Câu 2 – 6 sử dụng vi điều khiển 8051, riêng câu 1 về vi xử lý tổng quát.
Câu 3, 4, 5 phải viết bằng hợp ngữ, riêng câu 6 có thể viết bằng hợp ngữ hoặc C.
(1) Beginning

(2) Developing

(3) Accomplished

(4) Exemplary

Câu 3 (3.0đ)










Câu 4 (2.0đ)









Câu 5 (1.5đ)









Câu 6 (1.0đ)










Câu 1 (1.0đ)
Câu 2 (1.5đ)

Tổng cộng (10đ)
Câu 1: (1.0 đ) VXL tổng quát
Cho lệnh cộng 𝑹𝟏 + 𝑹𝟐 → 𝑹𝟕, hãy mô tả quá trình thực hiện lệnh trên theo 3 bước: Nhận lệnh (Fetch) –
Giải mã lệnh (Decode) – Thực hiện lệnh (Excute). Trình bày ngắn gọn theo tên các khối mô tả dưới đây

.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
VXL_Thi HK_CQ_162_trang 1/6


Câu 2: (1.5 đ)
a. Một chương trình có cho phép sử dụng ngắt có đoạn chương trình sau:
ORG 0
LJMP MAIN
ORG 0013H
INC A
RETI

MAIN:

ORG 2000H

MOV IE, #9FH
MOV A, P1
NOP


Giả sử có ngắt ngoài 1 xảy ra khi đang thực hiện lệnh MOV A, P1. Hãy liệt kê các bước mà vi điều
khiển thực hiện (PC, stack, SP) tại thời điểm bắt đầu xảy ra ngắt và thời điểm kết thúc trình phục vụ
ngắt (SP ban đầu = 07H). (1đ)
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
b.

Nếu ngắt ngoài 1 và ngắt Timer 0 xảy ra cùng thời điểm thì hệ vi điều khiển sẽ thực hiện trình ngắt
theo thứ tự nào? Biết rằng cả 2 ngắt này đều có cùng mức ưu tiên.
Hãy viết câu lệnh để thay đổi thứ tự hai ngắt trên khi yêu cầu xảy ra cùng thời điểm. (0.5đ)
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................

Câu 3: (3 đ) Mạch điện sau dùng để đếm và hiển thị số người trong phòng sử dụng 2 Led 7 đoạn và 2 cảm
biến cửa. Cảm biến cửa vào được nối vào chân INT0 và cảm biến cửa ra được đưa vào chân INT1. Khi có

1 người vào hoặc ra thì cảm biến tương ứng tạo ra 1 xung cạnh xuống. LED1 hiển thị số hàng chục, LED0
hiển thị số đơn vị. Ngoài ra chân P2.0 như sơ đồ có nhiệm vụ điều khiển cửa vào: P2.0 = 0 mở cửa; P2.0 =
1 đóng cửa.

VXL_Thi HK_CQ_162_trang 2/6


cpu8051

Cửa vào

Cửa ra

INT0

ic7447
P1.7
P1.6
P1.5
P1.4

D(msb)
C
B
A

P1.3
P1.2
P1.1
P1.0


D(msb)
C
B
A

7

LED1

7

LED0

INT1
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0

a. Cho X là 1 số 8 bit không dấu nhỏ hơn 100 chứa trong ô nhớ RAM nội có địa chỉ 40H. Viết chương
trình con DISPLAY cho hiển thị số này lên 2 LED 7 đoạn. (0.5 đ)
……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

b. Bộ đếm hiển thị số người đang có trong phịng, khi có người vào bộ hiển thị tăng một, khi có người
ra bộ hiển thị giảm một, giả sử ban đầu trong phịng khơng có người và cửa chỉ cho một người vào
hoặc ra. Viết chương trình để đếm và hiển thị số người có trong phịng sử dụng ngắt ngồi, biết số
người trong phịng nhỏ hơn 100 (Có thể sử dụng chương trình con DISPLAY để hiển thị) (1.0đ)
……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

VXL_Thi HK_CQ_162_trang 3/6


c. Trong trường hợp phòng chứa được tối đa 80 người, chỉnh sửa đoạn chương trình để khi số người
tối đa thì đóng cửa vào phịng và sau đó số người giảm đi thì cho mở cửa vào. (0.5 đ)
……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

d. Nếu X ở câu a không giới hạn dưới 100, hãy vẽ bổ sung cho sơ đồ thiết kế và viết lại chương trình
con DISPLAY. (1.0 đ)
……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

Câu 4: (2 đ)
Cần tạo chuỗi xung vng tại chân P1.0 có tần số 1 Hz (Xtal 24 MHz) và chu kỳ làm việc (duty cycle)
40%.
a. Tính Ton, Toff theo chu kỳ máy (0,5 đ)
.................................................................................................................................................................
.................................................................................................................................................................
.................................................................................................................................................................
b. Viết chương trình dùng Timer 0, khơng dùng ngắt (0,5 đ)
……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

VXL_Thi HK_CQ_162_trang 4/6


c. Viết chương trình dùng ngắt Timer 0 (1 đ)
……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

Câu 5: (1.5 đ)
Một vi điều khiển 8051 (XTAL = 11,0592 MHz) kết nối với máy tính qua cổng nối tiếp (19200 baud, SMOD
= 1) và nối với một LED qua chân P1.7 (mức 0 làm sáng LED). Cho sẵn chương trình con tạo trễ 1s,
DELAY_1s, viết chương trình nhận ký tự qua cổng nối tiếp và thực hiện công việc tương ứng với ký tự
nhận được:
Ký tự
'A'
'B'
'C'

'D'

Công việc
Bật sáng LED
Tắt LED
Bật sáng LED trong 1s
Chớp tắt LED, sáng 1s và tắt 1s và lặp lại 3 lần

Giả sử các công việc hoàn tất trước khi nhận ký tự điều khiển mới.
……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

VXL_Thi HK_CQ_162_trang 5/6



……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

Câu 6: (1.0 đ)
Một vi điều khiển 8051 kết nối với một nút nhấn qua chân P3.2, khi nhấn nút thì tạo ra 1 cạnh xuống. Khi
nhấn nút 1 lần thì lưu giá trị 0FH vào ơ nhớ 30H, nhấn 2 lần liên tiếp trong thời gian nhỏ hơn 20ms thì lưu
giá trị F0H. Viết chương trình thực hiện chức năng này. Giả sử phím đã được chống rung bằng phần cứng
(XTAL = 12MHz)
……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………


……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

……………………………………………

Kết thúc bài thi HK
VXL_Thi HK_CQ_162_trang 6/6







×