Đề cương bài tập ôn tập môn Vi xử lý nội dung chương 3 | Đại học Bách khoa Thành phố Hồ Chí Minh

Bài tập ôn tập môn Vi xử lý nội dung chương 3 của Đại học Bách khoa Thành phố Hồ Chí Minh với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36991220
ĐHBK Tp HCM BMĐT
GVPT: Hồ Trung Mỹ
i tập Vi Xử Lý Chương 3
B i tập trong chương n y ược chia l m 7 phần: T m tắt phần cứng (3.1+3.2), Tập lệnh
(3.3+3.4), Timer (3.5), Cổng nối tiếp (3.6), Ngắt (3.7), Assembler (3.8) v tổng hợp.
Phần 1 T m tắt phần cứng
1.1 Kể tŒn cÆc nh sản xuất khÆc (ngo i Intel) c chế tạo MCU 8051?
1.2 Ta sử dụng lệnh g ể ặt LSB của byte ở ịa chỉ 25H lŒn 1?
1.3 Hªy viết cÆc lệnh døng ể OR cÆc bit c ịa chỉ l 00H v 01H, kết quả cất v o bit c ịa chỉ 02H?
1.4 Sau khi thực thi cÆc lệnh sau th những bit n o c giÆ trị 1?
MOV R0, #26H
MOV @R0, #7AH
1.5 Hªy t m lệnh 1 byte c cøng hiệu ứng như lệnh 2 byte sau:
MOV 0E0H, #55H
1.6 Hªy viết cÆc lệnh ể cất giÆ trị 0ABH v o RAM ngo i ở ịa chỉ 9A00H.
1.7 C bao nhiŒu thanh ghi chức năng ặc biệt ược ịnh nghĩa trong 8051, 8052?
1.8 Sau khi reset hệ thống, giÆ trị của SP của 8051 l bao nhiŒu?
1.9 Ta c thể sử dụng lệnh g ể khởi tạo trị cho SP của 8031 ể tạo stack 64 byte ở ỉnh của RAM nội?
1.10 Một chương tr nh con sử dụng cÆc thanh ghi R0-R7 mở rộng. Hªy minh họa l m cÆch n o chương
tr nh con n y chuyển sang sử dụng cÆc thanh ghi R ở bank 3 khi v o chương tr nh con n y v trả lại
bank thanh ghi cũ khi kết thœc chương tr nh con ?
1.11 MCU 80C31BH 1 hoạt ộng với thạch anh 16MHz nối v o cÆc ngı v o XTAL1 v XTAL2 của n .
Nếu kh ng c sử dụng lệnh MOVX, tần số của t n hiệu ALE l bao nhiŒu?
1.12 8051 ược sử dụng với thạch anh 4MHz, khi chu kỳ mÆy l bao nhiŒu?
1.13 Chu kỳ nhiệm vụ của ALE l bao nhiŒu? Giả sử phần mềm kh ng truy cập RAM ngo i. (chœ l chu
kỳ nhiệm vụ = chu kỳ bổn phận = chu kỳ l m việc = duty cycle = thời gian ON / chu kỳ của t n hiệu)
1.14 Ta biết rằng 8051 bị reset nếu ch n RST ược giữ ở mức cao trong tối thiểu 2 chu kỳ mÆy. (chœ l
với ặc t nh DC của 8051 th mức cao ở RST tối thiểu l 2.5V)
a) Nếu 8051 hoạt ộng với thạch anh 8MHz, khoảng thời gian tối thiểu giữ cho RST ở mức
cao ể reset hệ thống l bao nhiŒu?
b) H nh 2-15a cho thấy mạch RC døng ể reset bằng tay. Trong khi ang ấn nœt reset th
RST=5V v hệ thống ược giữ ở trạng thÆi reset. Như vậy sau khi nœt reset ược nhả ra th
8051 sẽ vẫn giữ ở trạng thÆi reset trong bao l u?
1.15 Ch n cổng P1.7 (ch n 8) c thể lÆi ược bao nhiŒu tải Schottky c ng suất thấp (LS)?
1.16 Liệt kŒ cÆc t n hiệu iều khiển bus của 8051 ể chọn cÆc EPROM ngo i vc RAM ngo i.
1.17 Địa chỉ bit của MSB của byte ở ịa chỉ 25H trong vøng dữ liệu nội của 8051 l bao nhiŒu?
1.18 Hªy liệt kŒ những lệnh døng ể ặt LSB của thanh ghi t ch lũy lŒn 1 m kh ng ảnh hưởng 7 bit khÆc?
1.19 Giả sử lệnh sau vừa ược thực thi:
MOV A, #55H
GiÆ trị của bit P trong PSW l bao nhiŒu?
1.20 Hªy viết cÆc lệnh døng ể sao chØp nội dung của R7 v o nhớ 100H ở RAM ngo i.
1.21 Giả sử ta ang døng bank 0, hªy ghi cÆc giÆ trị trong RAM nội của 8051 sau khi thực thi oạn mª
sau:
MOV R4, #32H
MOV R0, #12H
MOV R7, #3FH
MOV R5, #55H
1.22 Sau khi cấp iện cho VXL, hªy cho biết bằng cÆch n o chọn bank 2 bằng một lệnh.
lOMoARcPSD|36991220
1.23 Giả sử lệnh thứ nhất ược thực thi sau khi reset hệ thống l gọi chương tr nh con. Nội dung của PC
ược cất ở những ịa chỉ n o trong RAM nội trước khi rẽ nhÆnh chương tr nh?
1.24 Sự khÆc biệt giữa chế ộ nghỉ (idle) v chế ộ tắt nguồn?
1.25 Lệnh g døng ể ưa 8051 v o chế ộ tắt nguồn?
1.26 Tất cả cÆc thanh ghi R0 R7 rộng bao nhiŒu bit? Phần lớn cÆc thanh ghi trong 8051 rộng bao
nhiŒu bit? Kể tŒn cÆc thanh ghi 16 bit trong 8051.
1.27 Bit P của PSW l bao nhiŒu sau khi thực thi mỗi lệnh sau:
a) CLR C b) MOV A, #0CH c) MOV A, #0ABH
1.28 Những ịa chỉ bit n o sau y c giÆ trị l 1 sau khi thực thi (cÆc) lệnh:
a) MOV 26H, #26H b) SETB P1.1 c) MOV P3, #0CH d) MOV A,
#13H
e) MOV 30H, #55H f) MOV R0, #26H XRL 30H,
#0AAH MOV @R0, #7AH
1.29 Sau khi thực thi lệnh n y th bank thanh ghi n o ược chọn?
a) MOV PSW, #0C8H b) MOV PSW, #50H c) MOV PSW, #10H
1.30 Hªy minh họa l m cÆch n o c thể giao tiếp 2 RAM tĩnh (mỗi RAM 32KB) với 8051 ể chœng c thể
chiếm to n bộ vøng dữ liệu ngo i 64K.
1.31 Với h nh 3.15 trong sÆch, giả sử RAM ngo i c dung lượng l 2
11
x8, cÆc ch n P2.0, P2.1, v P2.2 ược
nối v o cÆc ch n A8, A9, v A10 tương ứng của RAM. Hªy cho biết:
a) với cÆch nối n y RAM ược chia l m bao nhiŒu trang?
b) muốn truy cập ến byte thứ 8 (thứ tự kể từ 0) của trang 5 th l m cÆch n o?
c) ịa chỉ thật của byte trŒn l bao nhiŒu?
d) viết oạn chương tr nh ể gÆn trị 56H v o ịa chỉ 548H.
1.32 Với hệ thống døng 8051, hªy thiết kế mạch giải mª ịa chỉ cho cÆc trường hợp sau: (giả sử t n hiệu
chọn chip ều l t ch cực thấp [/CS])
Trường hợp 1
Trường hợp 2
Tầm ịa chỉ
Thiết bị
Địa chỉ bắt ầu
Thiết bị
0000H 3FFFH
RAM
0000H
ROM
8000H 9FFFH
ROM
4000H
RAM 1
E000H FFFFH
I/O (8255 PIA)
8000H
RAM 2
FF00H
I/O (8255 PIA)
Phần 2 Tập lệnh
2.1 Hªy cho biết cÆch ịnh ịa chỉ của cÆc lệnh sau
a) MOV R1, A c) MOV A, #12H e) MOV R6, #28H g) MOVX A, @DPTR i) LJMP
0548H
b) MOV A, @R1 d) MOV A, 12H f) SJMP LOOP h) ACALL SUB1 j) PUSH B
2.2 Mª mÆy dạng hex của lệnh sau l g ?
INC DPTR
2.3 Mª mÆy dạng hex của lệnh sau l g ?
DEC R6
2.4 Lệnh n o ược biểu diễn bởi mª mÆy 5DH?
2.5 Lệnh n o ược biểu diễn bởi mª mÆy FFH?
2.6 Liệt kŒ tất cả cÆc lệnh 3 byte của 8051 c mª mÆy tận cøng l 5H.
2.7 Hªy minh họa bằng cÆch n o ta c thể chuyển nội dung của ịa chỉ nội 50H v o thanh ghi t ch lũy A
với ịnh ịa chỉ giÆn tiếp?
2.8 Mª lệnh n o kh ng ược ịnh nghĩa trong 8051?
2.9 Để nạp v o R4 giÆ 65H th c cần dấu # trong lệnh: MOV R4, #65H kh ng?
2.10 Ta xØt lệnh sau: MOV 50H, #0FFH
a) Mª lệnh của lệnh n y l bao nhiŒu?
b) Lệnh n y d i bao nhiŒu byte?
lOMoARcPSD| 36991220
c) Giải th ch mỗi byte của lệnh n y.
d) MCU phải cần bao nhiŒu chu kỳ mÆy ể thực hiện lệnh n y?
e) Nếu 8051 hoạt ộng với thạch anh 16 MHz, MCU phải mất bao l u mi thực thi xong lệnh
n y?
2.11 Offset tương ối của lệnh sau l bao nhiŒu?
SJMP AHEAD
nếu lệnh n y ang ở nhớ 0400H v 0401H, v nhªn AHEAD biểu diễn lệnh ở ịa chỉ 041FH.
2.12 Offset tương ối của lệnh sau l bao nhiŒu?
SJMP BACK
nếu lệnh n y ang ở nhớ A050H v A051H, v nhªn BACK biểu diễn lệnh ở ịa chỉ 9FE0H.
2.13 Giả sử lệnh AJMP AHEAD
ở bộ nhớ chương tr nh tại ịa chỉ 2FF0H v 2FF1H, v nhªn AHEAD tương ứng với lệnh ở ịa chỉ
2F96H. Những byte mÆy (dạng số hex) của lệnh n y l g ?
2.14 Tại một chỗ trong chương tr nh, nếu ta muốn chương tr nh rẽ nhÆnh ến nhªn EXIT nếu thanh ghi A
bằng mª ASCII của carriage return . Th ta phải sử dụng (những) lệnh g ?
2.15 Lệnh SJMP BACK
ở bộ nhớ chương tr nh tại ịa chỉ 0100H v 0101H, v nhªn BACK tương ứng với lệnh ở ịa chỉ 00AEH.
Những byte mª mÆy (dạng số hex) của lệnh n y l g ?
2.16 Lệnh sau thực hiện g ?
SETB 0D7H
C cÆch n o tốt hơn thực hiện cøng tÆc vụ n y? Tại sao?
2.17 Sự khÆc biệt giữa 2 lệnh sau l g ?
INC A
INC ACC
2.18 Hªy viết những byte mª mÆy cho lệnh sau
LJMP ONWARD
nếu nhªn ONWARD biểu diễn lệnh ở ịa chỉ 0A0F6H.
2.19 Giả sử thanh ghi t ch lũy A chứa 5AH. Nội dung trong thanh ghi A l g sau khi thực thi lệnh:
XRL A, #0FFH
2.20 Giả sử PSW chứa 0C0H v thanh ghi A chứa 50H trước khi thực thi lệnh RLC A. Nội dung của
thanh ghi A sau khi thực thi lệnh trŒn l bao nhiŒu?
2.21 Hªy viết (cÆc) lệnh tương ương ể thực hiện:
a) X a nội dung thanh ghi A
b) Lấy bø 1 giÆ trị ở thanh ghi A v cất lại v o A
2.22 y viết cÆc lệnh thực hiện:
a) Chia nguyŒn n i dung của A cho 16 (giả sử A < 256).
b) Nh n nguyŒn nội dung của A cho 8 (giả sử A <32).
2.23 Nội dung của thanh ghi A l bao nhiŒu sau khi 8051 thực hiện cÆc lệnh sau:
a) MOV A, #15H c) MOV A, #15 e) MOV A, #7FH
MOV R2, #13H MOV R5, #15 MOV 50H, #29H
ADD A, R2 ADD A, R5 MOV R0, #50H b) MOV R4, #25H d) MOV A, #25
XCHD A, @R0
MOV A, #1FH MOV R7, #18H
ADD A, R4 ADD A, R7
2.24 Hªy viết mª mÆy cho cÆc oạn chương tr nh trong 2.23, giả sử l ang sử dụng bank thanh ghi 0.
2.25 c lệnh n o kh ng hợp lệ trong cÆc lệnh sau?
1) MOV R3, #500
5) MOV R1, #50
9) MOV A, #255H
13) MOV R7, #00
2) MOV A, #50H
6) MOV A, #F5H
10) ADD R3, #50H
14) MOV R9, #50H
3) ADD A, R5
7) ADD A, #50H
11) ADD A, #F5H
15) ADD R7, R4
lOMoARcPSD| 36991220
4) ADD R3, A
8) ADD A, #255H
12) MOV A, @R3
16) PUSH A
2.26 Mỗi lệnh sau chiếm bao nhiŒu byte v thực hiện trong bao l u (giả sử XTAL 12MHz):
a) MOV
A, #55H
e) MOV A, R1
b) MOV
R3, #3
f) MOV R3, A
c) INC
R2
h) ADD A, R2
d) ADD
A, #0
i) MOVX A, @DPTR
2.27 GiÆ trị của cờ CY sau oạn mª sau:
a) CLR C b) MOV A, #54H c) MOV A, #00 d) MOV A, #250 CPL C ADD A,
#0C4H ADD A, #0FFH ADD A, #05
2.28 Viết cÆc oạn chương tr nh 8051:
a) Điền giÆ trị 48H v o cÆc nhớ trong RAM nội từ ịa chỉ 40H ến 89H bằng ch døng lệnh ịnh
ịa chỉ giÆn tiếp v v ng lặp.
b) X a 20 nhớ trong RAM nội với ịa chỉ bắt ầu l 80H.
c) Sao chØp 10 nhớ từ RAM nội c ịa chỉ ầu l 35H ến vøng nhớ khÆc c ịa chỉ ầu l 60H.
2.29 Viết chương tr nh cộng 2 số 16 bit. CÆc số l 3CE7H v 3B8DH. Đặt byte cao của tổng ở R7 v byte
thấp của tổng ở R6.
2.30 Viếtc lệnh 8051 ể thực hiện cÆc tÆc vụ sau:
a) Chuyển giÆ trị dữ liệu 55H v o cổng 1
b) Đặt bit 3 của Port 3 lŒn 1
c) Cộng dữ liệu ở ịa chỉ ược chứa trong R0 v o thanh ghi t ch lũy.
d) So sÆnh dữ liệu trong R0 với giÆ trị 10H v nhảy ến nhªn Label1 nếu chœng khÆc nhau.
e) Đợi ở ịa chỉ hiện h nh cho ến khi ở Port 3 bit 0 thay ổi từ 1 sang 0.
2.31 Viết chương tr nh lấy dữ liệu hex (c giÆ trị 00H FFH) từ cổng P1 v ổi n sang thập ph n. Cất cÆc số
lần lượt v o cÆc thanh ghi R5 (chứa h ng trăm), R6 (chứa h ng chục), R7 (chứa ơn vị).
2.32 Giả sử c 5 dữ liệu BCD 2 k số (digit) ược ặt liŒn tiếp trong RAM nội với ịa chỉ bắt ầu l 40H. Hªy
viết chương tr nh t nh tổng của 5 dữ liệu n y, kết quả ược cất v o RAM nội với ịa chỉ bắt ầu l 50H
(byte thấp ể ở ịa chỉ thấp). Giả sử cÆc dữ liệu BCD l : (40H)=71H, (41H)=11H, (42H)=65H,
(43H)=59H v (44h)=37H; hªy kiểm tra lại chương tr nh với cÆc dữ liệu n y.
2.33 Nội dung của cÆc thanh ghi v cÆc nhớ trong 8051 l :
Thanh ghi
Nội dung
Địa chỉ bộ nhớ nội
Nội dung
A
42H
22H
25H
B
5AH
23H
F5H
R0 (bank 0)
15H
24H
17H
R1 (bank 0)
09H
25H
5CH
SP
22H
26H
8AH
PC
B100H
27H
06H
Sau khi thực thi ọan chương tr nh sau th bảng giÆ trị trŒn sẽ thay ổi như thế n o?
MOV A, #1H
MOV B, #8H
MUL AB
MOV R0, #27H
ADD A, @R0
PUSH ACC
Giả sử XTAL=12MHz, hªy viết mª mÆy ọan chương tr nh trŒn v cho biết oạn chương tr nh
trŒn ược thực thi trong bao l u?
2.34 Nội dung của cÆc thanh ghi v cÆc nhớ trong 8051 l :
Thanh ghi
Nội dung
Địa chỉ bộ nhớ nội
Nội dung
A
42H
2FH
25H
B
5AH
30H
F5H
R0 (bank 0)
33H
31H
17H
SP
2FH
32H
05H
PC
8100H
33H
06H
lOMoARcPSD|36991220
Sau khi thực thi oạn chương tr nh sau th bảng giÆ trị trŒn sẽ thay ổi như thế n o?
PUSH ACC
MOV A, 32H
ADD A, @R0
MOV 31H, A
RL A
ANL A, #0F6H
DEC R0
MOV @R0, B
Giả sử XTAL=12MHz, hªy viết mª mÆy oạn chương tr nh trŒn v cho biết oạn chương tr nh
trŒn ược thực thi trong bao l u?
2.35 Hªy biểu diễn cÆc trị số ở stack v con trỏ ngăn xếp cho mỗi d ng của oạn chương tr nh sau:
ORG 0
MOV R0, #66H
MOV R3, #7FH
MOV R7, #5DH
PUSH 0
PUSH 3
PUSH 7
CLR A
MOV R3, A
MOV R7, A
POP 3
POP 7
POP 0
Đoạn chương tr nh c trả lạic trị cũ cho cÆc thanh ghi R0, R3, v R7 kh ng? Nếu kh ng th phải ổi
g ể lưu lại giÆ trị.
2.36 Hªy viết cÆc lệnh døng ể tạo ra xung xuống mức thấp trong 5 μs ở P1.7? Giả sử P1.7 ban ầu mức
cao v 8051 l m việc với thạch anh 12MHz.
2.37 Viết chương tr nh tạo ra s ngvu ng 83.3KHz ở P1.0 (giả sử hoạt ộng 12MHz).
2.38 Viết chương tr nh tạo ra xung mức cao trong 4 μs ở ch n P1.7 cứ sau 200 μs.
2.39 Viết cÆc chương tr nh ể c i ặt cÆc phØp toÆn logic như ở h nh E.3-1.
lOMoARcPSD|36991220
H nh E.3-1. CÆc b i toÆn lập tr nh logic: (a) NOR 3 ngı v o; (b) NAND 8 ngı v o; v (c) PhØp toÆn
logic døng 3 cổng.
2.40 Với h nh E.3-1(a), thời gian tr hoªn truyền trường hợp xấu nhất từ lœc c chuyển tiếp ở ngı v o ến
lœc c chuyển tiếp ở ngı ra l bao nhiŒu?
2.41 Sau khi thực thi nh m lệnh sau, nội dung của thanh ghi A l bao nhiŒu?
MOV A, #7FH
MOV 50H, #29H
MOV R0, #50H
XCHD A, @R0
2.42 Hªy viết những byte mª mÆy cho lệnh sau?
SETB P2.6
2.43 Ta phải sử dụng những lệnh g ể chØp cờ 0 (F0) trong PSW v o ch n cổng P1.5?
2.44 Dưới t nh huống n o th ASM51 (của Intel) sẽ chuyển lệnh JMP chung (tổng quÆt) th nh LJMP?
2.45 Bộ nhớ nội của 8051 ược khởi tạo trị như sau, ngay trước khi thực thi lệnh RET:
Địa chỉ
nội
Nội
dung
SFRs
Nội
dung
0BH
9AH
SP
0BH
0AH
78H
PC
0200H
09H
56H
A
55H
08H
34H
07H
12H
Nội dung của PC sau khi thực thi lệnh RET l bao nhiŒu?
2.46 Viết một oạn ngắn mª 8051 ọc liŒn tục 1 byte dữ liệu từ Port 1 v ghi n ra Port 2, cho ến khi byte ọc
ược bằng 4AH th dừng lại.
2.47 Cho oạn mª sau:
RTN: PUSH PSW
LOOP: MOV A, @R0
MOV @R1, A
INC R0
lOMoARcPSD|36991220
INC R1
DJNZ B, LOOP
POP PSW
RET
a) Chương tr nh con RTN l m g ?
b) Thanh ghi n o ược døng l m ịa chỉ nguồn?
c) Thanh ghi n o ưc døng l m ịa chỉ ch?
d) Thanh ghi B ược døng l m g trong chương tr nh con?
e) Ta nŒn thay ổi chương tr nh con trŒn như thế n o ể kh ng ảnh hưởng ến cÆc thanh ghi trong
chương tr nh gọi RTN?
2.48 Cho chương tr nh con 8051 như sau:
SUB: MOV R0, #20H
LOOP: MOV @R0, #0
INC R0
CJNE R0, #80H, LOOP
RET
a) Chương tr nh con n y l m g ?
b) Mỗi lệnh trong chương tr nh con trŒn thực thi mất mấy chu kỳ mÆy?
c) Mỗi lệnh d i bao nhiŒu byte?
d) Chương tr nh con trŒn thực thi my bao nhiŒu? (giả sử hoạt ộng 12MHz)
2.49 Một DIP switch 4 bit v LED 7 oạn anode chung ược nối v o 8051 như ược chỉ trong h nh E.3-2. Hªy
viết chương tr nh liŒn tục ọc mª 4 bit từ DIP switch v cập nhật cÆc LED ể hiển thị k tự hex th ch
hợp. Th dụ, nếu ọc ược mª 1100B th sẽ xuất hiện k tự hex C , như vậy cÆc oạn từ a ến g tương ứng
sẽ l ON, OFF, OFF, ON, ON, ON, v OFF. Chœ l việc ặt ch n cổng 8051 l 1 sẽ l m cho oạn
MOV
R0, #20H
MOV
R1, #30H
MOV
R2, #2
; ###
CLR
C
lOMoARcPSD| 36991220
NEXT: MOV
A, @R0
ADDC
A, @R1
MOV
@R0, A
INC
R0
INC
R1
DJNZ
R2, NEXT
; ***
a) Sau khi thực thi lệnh thứ ba (c chœ th ch ###), nội dung của R0, R1, v R2 l bao nhiŒu?
b) Lệnh c nhªn NEXT ược thực thi bao nhiŒu lần?
c) Sau khi ho n tất chương tr nh trŒn th nội dung của R0, R1, v R2 l bao nhiŒu?
d) Nếu nội dung của cÆc nhớ như sau:
(20H) = 45H
(21H) = 23
(30H) = 89H
(31H) = 67H
Cho biết nội dung của cÆc nhớ trŒn sau khi thực thi chương tr nh trŒn?
Chức năng của chương tr nh trŒn?
CÆc toÆn hạng ược cất trong bộ nhớ như thế n o?
2.51 XØt chương tr nh 8051 sau:
start: MOV R0, #05H
MOV R1, #40H
MOV R2, #0H ; ###
MOV @R1, #0H again:
MOV DPTR, #TABLE
MOV A, R2
MOVC A, @A + DPTR
ADD A, @R1 MOV @R1, A
INC R2
DJNZ R0, again
AJMP EXIT
TABLE: DB 10H, 11H, 12H, 13H, 14H
EXIT: END
a) Sau khi thực thi lệnh (c chœ th ch ###) th nội dung của R0, R1, v R2 l bao nhiŒu?
b) Lệnh c nhªn again ược thực thi bao nhiŒu lần?
c) Sau khi ho n tất chương tr nh trŒn th nội dung của R0, R1, v R2 l bao nhiŒu?
d) Nội dung của nhớ 40H sau khi thực thi chương tr nh trŒn?
e) Chức năng của chương tr nh trŒn?
f) Nếu kết quả của chương tr nh trŒn ược cất v o nhớ 50H th lệnh n o cần sửa ổi v ổi như thế n o?
2.52 XØt chương tr nh sau (giả sử LED l ịa chỉ của 1 bit xuất n o ).
BLINK: CPL LED
CALL DELAY
JMP BLINK
DELAY: MOV R1, #145
DLY2: MOV R2, #199
DLY1: MOV R3, #210
DJNZ R3, $
DJNZ R2, DLY1
DJNZ R1, DLY2
RET
lOMoARcPSD| 36991220
a) Giả sử XTAL c tần số 6MHz, hªy t nh thời gian ON v thời gian OFF của LED
b) T nh thời gian ON của LED trong oạn sau với XTAL l 12MHz
DELAY: MOV R1, #136
DLY2: MOV R2, #136
DLY1: MOV R3, #136
DJNZ R3, $
DJNZ R2, DLY1
DJNZ R1, DLY2
RET
2.53 Cho oạn mª sau:
RTN: PUSH B
LP: MOV B, @R0
CJNE A, B, NEXT
MOV R1, #01H SJMP FIN
NEXT: INC R0 DJNZ
R1, LP
MOV R1, #0H
FIN: POP B
RET
a) Chương tr nh con RTN l m g ?
b) Thanh ghi n o ược døng l m mẫu dữ liệu t m kiếm?
c) Thanh ghi n o ược døng chứa kết quả?
d) Thanh ghi B ược døng l m g trong chương tr nh con?
e) Giải th ch hoạt ộng của cÆc lệnh PUSH v POP trong chương tr nh con.
2.54 c nhớ RAM nội vi ịa chỉ 3FH v 40H chứa cÆc giÆ trị 42H v 04H tương ứng. Hªy t m cÆc
giÆ trị cÆc cÆc thanh ghi sau khi thực thi oạn chương tr nh sau:
- cÆc thanh ghi A & B v cờ CY sau khi thực thi lệnh MUL
- cÆc thanh ghi A & B v cờ CY sau khi thực thi lệnh DIV
MOV A, 3FH
MOV 0F0H, 40H
MUL AB
DIV AB
2.55 Hªy cho biết cÆc giÆ trị cờ trong PSW của 8051 sau khi thực thi cÆc lệnh sau: (giả sử giÆ trị ầu
của
PSW l 00H)
MOV A, #7FH
MOV 0F0H, #21H
ADD A, B
MOV 0F0H, #80H
SUBB A, B
2.56 Viết chương tr nh t m kiếm trong 1 bảng chứa 16 byte dữ liệu bắt ầu ở ịa chỉ 40H trong RAM nội
của 8051 với byte dữ liệu ược ọc từ Port 2
a) Khi ho n tất t m kiếm th ặt bit 1 của Port 1 lŒn 1.
b) Nếu t m thấy dữ liệu th ặt bit 2 của Port 1 lŒn 1.
c) Nếu kh ng t m thấy dữ liệu th x a bit 2 của Port 1 về 0.
2.57 Cho trưc oạn chương tr nh 8051 sau v cÆc giÆ trị ầu, hªy t m cÆc giÆ trị trong cÆc thanh ghi v
cÆc nhớ. CÆc giÆ trị ầu ở cÆc nhớ l : (55H) = 03H, (A003H) = 05H, (A005H) = 07H.
MOV R1, 55H
MOV A, R1
MOV DPTR, #0A000H
MOVC A, @A+DPTR
MOVC A, @A+DPTR
lOMoARcPSD| 36991220
MOV R1, A
MOV 55H, R1
2.58 Cho trưc oạn chương tr nh 8051 sau, hªy t m
a) CÆc nhớ bị ảnh hưởng v cÆc giÆ trị của chœng.
b) Tổng số byte cần cho chương tr nh
c) Tổng thời gian cần ể thực thi oạn chương tr nh n y (kể cả lệnh RET v giả sử tần số thạch anh
l 12MHz)
RTN: MOV R0, #80H
LOOP1: MOV @R0, #0FFH
DEC R0
CJNE R0, #20H, LOOP1
MOV R1, #90H
LOOP2: MOV @R1, #00H
INC R1
CJNE R1, #0F0H, LOOP2
RET
2.59 Hªy viết mª mÆy cho oạn chương tr nh sau:
ORG 300H
MOV A, #20H
MOV R0, #34H
MOV DPTR, #LABEL
ADD A, R0
AJMP LABEL
ORG 400H
LABEL: LJMP 0300H
2.60 Đoạn chương tr nh sau chạy v tận. Giả sử døng XTAL 6MHz cho clock của 8031. Như vậy ta ọc
ược tần số bao nhiŒu ở scope nếu o ở ch n P1.0
CLR C
LOOP1: MOV A, #47
LOOP2: DJNZ A, LOOP2
MOV P1.0, C
CPL C
AJMP LOOP1
Với cøng chương tr nh trŒn th tần số ở ch n ALE l bao nhiŒu?
2.61 Viết chương tr nh con ổi 1 k số BCD trong thanh ghi A th nh biểu diễn ASCII tương ứng trong nhớ
ược chỉ bởi thanh ghi R0. Nếu giÆ trị trong A kh ng phải BCD th ặt bit c ịa chỉ 00H c giÆ trị 1. Từ
hªy phÆt triển th nh chương tr nh con ổi 2 k số BCD trong thanh ghi A th nh biểu diễn ASCII của
chœng, kết quả ược cất v o cÆc nhớ c ịa chỉ bắt ầu cho trong R0, k số BCD c trọng số cao sẽ ược
cất ở ịa chỉ thấp. L m lại với chuyển ổi số Hex sang ASCII.
2.62 Viết chương tr nh con ổi biểu diễn ASCII ược cất trong nhớ ược chỉ bởi thanh ghi R0 th nh k số
BCD tương ứng trong thanh ghi A. Nếu giÆ trị trong A kh ng phải BCD th ặt bit c ịa chỉ 00H c
giÆ trị 1. Từ hªy phÆt triển th nh chương tr nh con ổi 2 k số dạng ASCII ược cất trong nh ược
chỉ bởi thanh ghi R0 (k số c trọng số cao sẽ ược cất ở ịa chỉ thấp). th nh BCD trong thanh ghi A. L
m lại với chuyển ổi ASCII sang số Hex.
2.63 Viết chương tr nh con BINTOBCD ổi 1 số nhị ph n 8 bit th nh biểu diễn BCD tương ứng của n (3 k
số BCD) ể trong cÆc nhớ c ịa chỉ bắt ầu ở trong R0, k số BCD c trọng số cao nhất sẽ ở ịa chỉ thấp
nhất.
2.64 Viết chương tr nh con BCDTOBIN ổi số BCD c 2 k số trong thanh ghi A th nh số nhị ph n trong
nhớ ược chỉ bởi R0.
lOMoARcPSD| 36991220
2.65 Viết chương tr nh xÆc ịnh xem c bao nhiŒu byte c trị l 0, < 0, > 0 trong một khối bộ nhớ; nhớ
40H sẽ chứa số byte c trị bằng 0, nhớ 41H sẽ chứa số byte c trị < 0, nhớ 42H sẽ chứa số byte c trị
> 0. nhớ 43H chứa ịa chỉ ầu khối bộ nhớ, nhớ 44H chứa số byte trong khối (chiều d i khối). Th
dụ: (43H)=45H, (44H)=06, (45H)=68H, (46H)=F2H, (47H)=87H, (48H)=00H, (49H)=59H,
(50H)=2AH th sau khi chạy oạn chương tr nh n y th (41H)=1, (42H)=2, (43H)=3.
2.66 T nh bø 2 của một số 16 bit c ịa chỉ ầu ược chỉ bởi R6 (byte cao ở ịa chỉ thấp) v kết quả ược cất v o
bộ nhớ với ịa chỉ ầu ược chỉ bởi R7. Th dụ: (R6)=40H, (R7)=42H, (40H)=45H, (41H)=2AH th kết
quả ở (42H)=BAH, (43H)=D6H. Hªy tr nh b y cÆc giải phÆp c thể c .
2.67 Viết chương tr nh t m phần tử nhỏ nhất trong 1 khối dữ liệu. Chiều d i của khối dữ liệu ở trong nhớ
41H v ịa chỉ bắt ầu khối ở trong nhớ 42H. Chứa phần tử nhỏ nhất trong nhớ 40H, giả sử khối dữ
liệu chứa cÆc số nhị ph n kh ng dấu. L m lại với t m phần tử lớn nhất.
2.68 Viết chương tr nh SORT sắp thứ cÆc số trong 1 khối dữ liệu. Chiều d i của khối dữ liệu ở trong
nhớ 41H v ịa chỉ bắt ầu khối ở trong nhớ 42H. Kết quả ược lưu v o trong vøng nhớ khối dữ liệu
ban ầu. (HD: døng phương phÆp bubble sort, xem trong cÆc sÆch về cấu trœc dữ liệu v giải
thuật)
2.69 Viết chương tr nh con nh n 2 số nguyŒn 8 bit c dấu, døng bø 2 ể biểu diễn cho cÆc số m. Kết quả l
số nguyŒn 16 bit c dấu ể trong thanh ghi R6 (byte cao) v R7 (byte thấp).
2.70 Viết chương tr nh con trừ số nguyŒn 16 bit c dấu X (ược cất ở R6 v R7, byte cao ở R6) với số
nguyŒn 16 bit c dấu Y (ược cất ở R4 v R5, byte cao ở R4), døng biểu diễn bø 2 cho cÆc số m.
2.71 Viết chương tr nh con SOSANH nhận 2 tham số 8 bit v so sÆnh chœng với nhau. Kết quả ược ặt
thanh ghi ACC. Nếu gọi cÆc tham số l X v Y th kết quả cất trong thanh ghi ACC l : -1 nếu X < Y;
0 nếu X = Y; v 1 nếu X > Y.
2.72 Viết chương tr nh con t nh tổng số bit 1 trong 1 byte cho trước ở thanh ghi A. L m lại với t nh tổng
số bit 0. Hªy viết chương tr nh con cho kết quả tổng số bit 1 v tổng số bit 0 trong thanh ghi A.
2.73 Viết chương tr nh con t nh trung b nh cộng của một dªy cÆc trị số 1 byte kh ng dấu với số ầu c ịa
chỉ ở R6, chiều d i của dªy số ở R7. Kết quả ược cất v o R5.
2.74 Hªy m tả stack, SP v nội dung của cÆc thanh ghi bị ảnh hưởng trong oạn chương tr nhsau. Giả sử
ban ầu (SP)=07H.
MOV R2, #55H
MOV R5, #0CCH
MOV R1, #0ADH
PUSH 2 PUSH
5
PUSH 1 POP
2
POP 1
POP 5
2.75 Viết chương tr nh x a ACC v cộng 5H v o ACC 10 lần bằng cÆch døng v ng lặp.
2.76 C 2KB RAM dữ liệu ược gắn v o 8051 (bắt ầu ở ịa chỉ 8000H). Viết chương tr nh (bắt ầu t
2030H): a) Điền to n bộ RAM 2K với trị 55H; b) kiểm tra lại giÆ trị ở mỗi nhớ c bằng 55H kh ng?
Nếu c sai th cho P1.1=1 v cho biết bao nhiŒu nhớ bị sai (cất v o R7).
2.77 Viết chương tr nh con ATOH ổi 1 byte ASCII sang số hex tương ứng (0 9 v A F; tương ứng ASCII
l 30H 39H v 41H 46H). Nếu byte ASCII kh ng thuộc 30H 39H hay 41H 46H th ặt cờ C lŒn 1. Aøp
dụng chương tr nh con ATOH ể ổi 2 byte ASCII liŒn tiếp trong RAM nội của 8051 (th dụ byte cao
ở 40H v byte thấp ở 41H) th nh mª hex 1 byte ở 1 nhớ trong RAM nội 8051 (th dụ 42H). Th dụ:
(40H)=36H v (41H)=42H th kết quả (42H)=6BH.
2.78 Viết chương tr nh c i ặt logic cho cÆc h m sau theo 2 cÆch: bằng cÆc lệnh xử l logic với biến
Boole, v bằng cÆc lệnh rẽ nhÆnh theo iều kiện với bit. Giả sử cÆc biến X, Y, Z, V, W v F tương
ứng với cÆc ch n P0.0 ến P0.5.
a) F = (X(Y+Z)). Z. (V+W)
b) F = (XYZ) + Z + V + W
c) F = X Y+ Y Z+ Z V W
d) F = (X +Y )(Z+V)(X+W )
lOMoARcPSD|36991220
e) F = ((XY + X Z ) V)
2.79 Viết chương tr nh copy 16 byte trong bộ nhớ mª ngo i (1000H 100FH) ến RAM nội từ 30H 3FH.
2.80 Viết chương tr nh copy 16 byte bộ nhớ dữ liệu ngo i (1000H 100FH) ến RAM nội từ 30H 3FH.
2.81 Viết chương tr nh con ổi 1 số BCD 2 k số th nh 2 mª (LED) 7 oạn. Số BCD ược ọc từ cổng P0 v kết
quả ược xuất ra P1 v P2 (P1 ứng với k số h ng chục, P2 ứng h ng ơn vị). Dạng kết nối phần cứng
cho P1 v P2 tương tự trong h nh E.2.81.
H nh E.2.81
lOMoARcPSD|36991220
Phần 3 Timer
Trong phần Timer n y, ta sẽ giả sử l 8051 ược s dụng với thạch anh 12MHz nếu b i tập kh ng cho biết
tần số thạch anh.
3.1 Viết chương tr nh 8051 tạo s ng vu ng ở P1.5 c tần số 100KHz (Hướng dẫn: Kh ng sử dụng timer).
3.2 Hiệu ứng của lệnh sau l g ?
a) SETB 8EH
b) MOV TMOD, #11010101B
3.3 Hªy cho biết cần nạp trị cho TMOD l bao nhiŒu ể
a) Timer 1 chạy chế ộ 2, Timer 0 chạy chế ộ 1
b) Timer 1 chạy chế ộ 0, Timer 0 chạy chế ộ 2
3.4 C bao nhiŒu cÆch ể dừng Timer ang chạy?
3.5 XØt chương tr nh 3 lệnh ở th dụ tạo dạng xung (th dụ ầu trong phần 3.5.8). Tần số v chu kỳ nhiệm
vụ của dạng s ng ược tạo ra ở ch n P1.0 của 8051 hoạt ộng với thạch anh 16MHz?
3.6 Hªy t nh thời gian tr hoªn của chương tr nh con DELAY sau với tần số thạch anh l : a) 12 MHz v
b) 11.0592 MHz.
DELAY: MOV R3,#250 ; 1 MC (1 chu kỳ mÆy)
HERE: NOP ; 1 MC
NOP ; 1 MC
NOP ; 1 MC
NOP ; 1 MC
DJNZ R3,HERE ; 2 MC
RET ; 1 MC
3.7 Viết lại b i giải của th dụ giao tiếp buzzer (th dụ cuối trong phần 3.5.8). ể bao gồm chế ộ restart
(bắt ầu lại). Nếu chuyển tiếp 1 sang 0 xảy ra khi buzzer phÆt tiếng kŒu, bắt ầu lại v ng ịnh th ể
tiếp tục cho buzzer kŒu trong gi y kế, xem minh họa ở h nh E.3.7.
3.8 Viết chương tr nh 8051 tạo s ng vu ng ở P1.2 c tần số 12KHz theo cÆch: a) døng Timer 0; v b)
kh ng døng timer.
3.9 Viết chương tr nh 8051 døng timer 1 ể tăng nội dung của nhớ TIME (trong RAM nội) thŒm 1 cứ
sau 20 ms.
3.10 Viết chương tr nh con MOTGIAY theo 2 cÆch: a) døng Timer 0; v b) kh ng døng timer. Aøp
dụng chương tr nh con trŒn ể tạo dạng s ng vu ng tuần ho n c chu kỳ 10 s, 20 s v 30 s tương ứng
với cÆc ch n P1.0, P1.1 v P1.2.
3.11 Viết chương tr nh 8051 døng timer:
a) ể tạo xung vu ng 500Hz c chu kỳ nhiệm vụ l 70% ở ch n P1.0.
Hnh E.3.7
lOMoARcPSD|36991220
b) Tương tự a) nhưng chu kỳ nhiệm vụ l 40% v xung n y chỉ tồn tại trong 10s.
3.12 Thiết kế ứng dụng ca xoay (turnstile) døng Timer 1 ể phÆt hiện lœc n o c người thứ 10 000 i v o
khu vực hội chợ. Giả sử (a) cảm biến cửa xoay nối v o T1 v tạo ra 1 xung khi c người i v o l m
xoay cửa, v (b) Łn ược nối v o ch n P1.7 (chœ thực tế c thŒm mạch giao tiếp từ P1.7 vi
Łn) v sÆng khi P1.7=1 v tắt khi P1.7=0. Như vậy 8051 sẽ ếm số sự kiện ở T1 v l m sÆng Łn ở
P1.7 khi người thứ 10 000 i v o khu vực hội chợ (xem h nh E.3.12).
H nh E.3.12
3.13 Chuẩn iều hưởng (hay c n gọi l cộng hưởng) quốc tế cho cÆc thiết bị m nhạc l A trŒn D trung (La
trŒn Đ trung) ở tần số 440 Hz. Viết chương tr nh 8051 ể tạo ra tần số iều hưởng n y v phÆt ra
tone 440 Hz ở loa nối ở P1.1 (xem h nh E.3.13). Do việc l m tr n cÆc giÆ trị ặt ở TL1/TH1, c 1
sai số nhỏ trong tần số ra. Tần số ra ch nh xÆc l bao nhiŒu v phần trăm sai số l bao nhiŒu? Muốn
c ược ch nh xÆc 440 Hz với chương tr nh bạn ª viết th giÆ trị của thạch anh l bao nhiŒu?
H nh E.3.13
3.14 Viết chương tr nh 8051 ể tạo ra tin hiệu 500 Hz ở P1.0 døng timer 0. Dạng s ng c chu kỳ nhiệm vụ
30%.
3.15 Mạch ở h nh E.3.15 sẽ cung cấp t n hiệu rất ch nh xÆc 60 Hz (với iều kiện Æp AC n y c tần số ổn
ịnh) v o T0 bằng cÆch lấy từ thứ cấp của một biến Æp. Khởi ộng Timer 0 sao cho n lấy xung nhịp
từ T0 v tr n 1 lần/gi y. Ở mỗi lần tr n, cập nhật giÆ trị thời gian trong ng y ược chứa trong bộ nh
nội của 8051 ở cÆc vị tr 50H (giờ), 51H (phœt), v 52H (gi y).
H nh E.3.15
lOMoARcPSD|36991220
Phần 4 Cổng nối tiếp (Serial Port)
4.1 Hªy t m giÆ trị của TH1 (dạng thập ph n v hex) ể ặt tốc ộ baud cho cÆc trường hợp sau nếu
SMOD=1: a) 9600 baud; b) 4800 baud. Giả sử rằng XTAL=11.0592 MHz
4.2 T m tốc ộ baud nếu TH1= 2, SMOD = 1 v XTAL =11.0592MHz.
4.3 Giả sử rằng cổng nối tiếp 8051 ược nối v o cổng COM của mÆy vi t nh, v ở PC ta sử dụng chương tr
nh terminal.exe ể gửi v nhận dữ liệu nối tiếp. P1 v P2 của 8051 ược nối v o cÆc LED v cÆc c ng tắc
tương ứng. Viết chương tr nh 8051 ể: a) gửi ến mÆy vi t nh th ng iệp We Are Ready! ; b) nhận bất cứ
dữ liệu n o ược gửi từ mÆy vi t nh v xuất n ra cÆc LED ang gắn ở P1; v c) lấy dữ
liệu trŒn cÆc c ng tắc nối v o P2 v gửi nối tiếp dữ liệu ến mÆy vi t nh. Chương tr nh thực a) một
lần, nhưng cÆc phần b) v c) liŒn tục. Sử dụng tốc ộ baud l 4800.
4.4 Giả sử XTAL=11.0592 MHz vi chương tr nh sau, hªy cho biết: a) chương tr nh n y l m g , b) t nh
tần số ược sử dụng bởi timer1 ể ặ tốc ộ baud, v c) t m tốc ộ baud của việc chuyển dữ liệu.
MOV A, PCON SETB
ACC.7
MOV PCON, A
MOV TMOD, #20H
MOV TH1, -3
MOV SCON, #50H
SETB TR1
MOV A, # B
LOOP: CLR TI MOV
SBUF, A
JNB TI, $
SJMP LOOP
4.5 Sử dụng cổng nối tiếp l m cổng hiển thị: Cho mạch ở h nh E.4.5
H nh E.4.5 Mạch nối bŒn ngo i với cổng nối tiếp 8051.
Với lệnh: MOV SBUF, A
Dữ liệu nhị ph n từ ACC sẽ ược truyền ra bŒn ngo i bắt ầu từ bit thấp nhất qua ch n RXD
của cổng nối tiếp sau khi thực thi lệnh trŒn. Khi kết thœc truyền bit SCON.1 sẽ tự ộng ược ặt
lŒn 1. IC 74LS164 trong h nh l thanh ghi dịch 8 bit v o nối tiếp ra song song (SIPO). Dữ liệu
nhị ph n 8 bit v o nối tiếp sẽ ược xuất ra song song. CÆc IC 74LS164 mắc kế tiếp nhau gtrị
ban ầu ược hiện trŒn hiển thị sẽ dch từ phải sang trÆi khi c thŒm giÆ trị mới.
lOMoARcPSD| 36991220
LED 7 oạn l loại anode chung, do khi ưa mức thấp v o c thể l m sÆng cÆc oạn n y (th
dụ: oạn a sẽ ng khi Q1 của 74LS164 l 0). Theo nguyŒn tắc n y ta c thể cho hiện 1 k tự trŒn
hiển thị nếu cÆc ngı ra tương ứng của 74LS164 ở mức thấp. Th dụ ể hiện ược k tự 2 th cần l m
sÆng cÆc oạn a, b, g, e v d, v vậy cÆc ngı ra tương ứng Q7, Q6, Q3, Q1 v Q0 phải ược ặt
mức thấp v cÆc ngı ra Q5, Q4 v Q2 giữ mức cao. Do ta cần gửi byte 34H ra bộ ệm dữ liệu
nối tiếp. Dữ liệu 34H ược gọi l mª k tự của k tự 2 . Bảng mª k tự cho cÆc k tự từ 0 ến F như sau:
K tự
D7 D6 D5 D4 D3 D2 D1 D0
Mª k tự
b g c dp e f a d
0
0 1 0 1 0 0 0 0
50H
1
0 1 0 1 1 1 1 1
5FH
2
0 0 1 1 0 1 0 0
34H
3
0 0 0 1 1 1 0 0
1CH
4
0 0 0 1 1 0 1 1
1BH
5
1 0 0 1 1 0 0 0
98H
6
1 0 0 1 0 0 0 0
90H
7
0 1 0 1 1 1 0 1
5DH
8
0 0 0 1 0 0 0 0
10H
9
0 0 0 1 1 0 0 1
19H
A
0 0 0 1 0 0 0 1
11H
B
1 0 0 1 0 0 1 0
92H
C
1 1 1 1 0 0 0 0
F0H
D
0 0 0 1 0 1 1 0
16H
E
1 0 1 1 0 0 0 0
B0H
F
1 0 1 1 0 0 0 1
B1H
Chœ : o ể l m cho tất cả cÆc oạn sÆng ta ấn nœt SW
o ể l m cho tất cả cÆc oạn tắt ta døng lệnh MOV SBUF, #FF Hªy viết
cÆc lệnh ể:
a) Hiển thị cÆc k tự 0 , 1 , 2 , 3 , v 4 từ phải sang trÆi. C nhận xØt g về kết quả
hiển thị?
b) Hiển thị k tự A trŒn bảng hiển thị?
CÆc vấn ề sau (4.6 ến 4.14) l cÆc chương tr nh tiŒu biểu ể giao tiếp với cÆc thiết bị ầu
cuối (terminal) hoặc cÆc thiết bị nối tiếp khÆc với mÆy vi t nh. Giả sử cổng nối tiếp ược
khởi ộng ở mode UART 8 bit v tốc ộ baud ược cung cấp bởi Timer 1.
4.6 Viết chương tr nh con OUTSTR gửi 1 chuỗi k tự ASCII kết thœc bởi k tự NULL ến thiết bị
nối tiếp nối với cổng nối tiếp của 8051 . Giả sữ chuỗi mª ASCII ở trong bộ nhớ mª bŒn ngo
i v chương tr nh gọi ặt ịa chỉ của chuỗi trong DPTR trước khi gọi OUTSTR. Chuỗi k tự kết
thœc bằng NULL l chuỗi byte ASCII kết thœc với byte 00H.
4.7 Viết chương tr nh con INLINE nhập 1 d ng cÆc mª ASCII từ thiết bị nối với cổng nối toếp
của 8051 v ặt n v o bộ nhớ dữ liệu nội bt ầu ở 50H. Giả sử d ng kết thœc bằng CR
(carriage return). Đặt mª CR v o trong bộ ệm d ng cøng với cÆc mª khÆc v rồi kết thœc bộ
ệm bằng byte NULL (00H).
4.8 Viết chương tr nh gửi liŒn tục bộ mẫu tự từ a tới z ến thiết bị gắn v o cổng nối tiếp, døng
chương tr nh con OUTCHR (c sẵn ) .
lOMoARcPSD|36991220
4.9 Giả sử cho trước chương tr nh con OUTCHR, hªy viết chương tr nh gửi liŒn tục bộ ASCII
hiển thị ược (cÆc mª từ 20H ến 7EH) ến thiết bị ang gắn v o cổng nối tiếp của 8051. 4.10
Sửa ổi lại lời giải của b i tập trŒn ể treo v cho xuất tiếp lại ra m n h nh døng cÆc mª XOFF
v XON nhận ược từ b n ph m. Tất cả cÆc mª khÆc bị bỏ qua (chœ : XOFF = CONTROL-S
= 13H v XON=CONTROL-Q=11H).
4.11 Giả sử cho trước cÆc chương tr nh con INCHAR v OUTCHR, hªy viết chương tr nh nhập
cÆc k tự từ b n ph m v v hiển thị chœng lại trŒn m n h nh, ổi những k tự chữ in thường
sang chữ in hoa.
4.12 Giả sử cho trước cÆc chương tr nh con INCHAR v OUTCHR, hªy viết chương tr nh nhập
cÆc k tự từ thiết bị ang gắn ở cổng nối tiếp 8051 v hiển thị chœng lại với dấu chấm ( . ) sẽ
thay thế cho cÆc k tự iều khiển (c cÆc mª ASCII 00H ến 1FH, v 7FH).
4.13 Giả sử cho trước chương tr nh con OUTCHR, hªy viết chương tr nh x a m n h nh VDT ang
gắn ở cổng nối tiếp 8051 v rồi gửi tŒn của bạn ến VDT 10 lần trŒn 10 d ng. Chức
năng x a VDT ược thực hiện bằng cÆch truyền CONTROL-Z với nhiều terminal hoặc
chuỗi k tự thoÆt <ESC>[2J trŒn terminal c hỗ trợ ANSI (American National Standards
Institute). Sử dụng cả 2 phương phÆp trong b i giải.
4.14 H nh 3.32 trong sÆch minh họa kỹ thuật mở rộng khả năng xuất của 8051. Giả sử với cấu
h nh như vậy, hªy viết chương tr nh khởi ộng cổng nối tiếp với chế ộ thanh ghi dịch v rồi
Ænh xạ nội dung của nhớ nội 20H ra 8 ngı ra phụ, mỗi gi y thực hiện 10 lần.
Phần 5 Ngắt (Interrupt)
5.1 Cho biết nhiệm vụ của bit SMOD trong 8051? Hªy nŒu cÆc bước ể thiết lập Timer døng
ngắt ể tr hoªn (l m trễ) một khoảng thời gian nhất ịnh?
5.2 Hªy viết cÆc lệnh ể: a) cho phØp ngắt nối tiếp, ngắt timer 0 v ngắt phần cứng bŒn ngo i 1;
v b) cấm ngắt timer 0; v c) cấm tất cả cÆc ngắt chỉ bằng 1 lệnh.
5.3 Sau khi thực thi oạn chương tr nh sau:
MOV IE, #99H
MOV IP, #10H
a) CÆc ngắt n o ược cho phØp?
b) Ngắt n o c ưu tiŒn cao nhất?
5.4 Thứ tự phục vụ cÆc ngắt nhứ thế n o nếu tất cả cÆc ngắt ược cho phØp xảy ra ồng thời?
5.5 Trong 1 hệ døng 8051 cho phØp cÆc ngắt /INT0, /INT1 v Timer 1 v cấm tất cả cÆc ngắt
khÆc. Nếu ngắt /INT1 t ch cực th sẽ tạo ra s ng vu ng 500 Hz ở ch n P1.0 (døng ngắt
Timer 1). S ng vu ng n y sẽ chấm dứt khi /INT0 t ch cực. Viết oạn chương tr nh khởi tạo trị
cho cÆc ngắt v ợi ngắt trong chương tr nh ch nh v cÆc chương tr nh ISR.
5.6 Viết chương tr nh lấy liŒn tục dữ liệu 8 bit từ P0 v gửi n ến P1 trong khi ồng thời tạo ra s
ng vu ng c chu kỳ 200 s ở ch n P2.1 (sử dụng Timer 0 ể tạo s ng vu ng)
5.7 Giả sử ch n /INT1 ược nối v o c ng tắc b nh thường ở mức cao, khi ch n n y xuống mức
thấp th n sẽ l m sÆng Łn LED. ĐŁn LED n y ược nối v o ch n P1.3 v b nh thường th tắt,
khi c mức thấp ở /INT1 th n sẽ sÆng trong khi /INT1 vẫn ở mức thấp.
5.8 Giả sử ch n /INT1 ược nối v o bộ tạo xung, viết chương tr nh nhận biết khi c cạnh xuống
của xung th sẽ ặt bit P1.3 lŒn 1 v l m cho Łn LED gắn ở P1.3 sÆng (vẽ mạch cứng).
Nghĩa l LED sẽ sÆng (ON) v tắt (OFF) cøng với tốc ộ của xung ưa v o ch n /INT1.
5.9 Viết chương tr nh 8051 lấy dữ liệu từ P1 v gửi n ến P2 liŒn tục, trong khi dữ liệu ến từ
cổng nối tiếp ược gửi ến P0. Giả sử tốc ộ baud l 9600.
5.10 Tạo s ng vu ng 1 kHz ở ch n P1.7 døng ngắt.
5.11 Tạo xung vu ng 7 kHz với chu kỳ nhiệm vụ 30% ch n P1.6 døng ngắt.
lOMoARcPSD|36991220
5.12 a) Viết chương tr nh phục vụ ngắt cho timer 0 ể tạo xung vu ng 500Hz c chu kỳ nhiệm vụ l
70% ở ch n P1.0
b) Tương tự a) nhưng chu kỳ nhiệm vụ l 40% v xung n y chỉ tồn tại trong 10s.
5.13 Hªy ghØp chương tr nh tạo s ng vu ng bằng ngắt của timer (trang 218) với chương tr nh
Xuất k tự bằng ngắt (trang 221) th nh 1 chương tr nh.
5.14 Hªy viết lại chương tr nh Xuất k tự bằng ngắt (trang 221) sao cho gửi 1 k tự/1 gi y (hướng
dẫn: sử dụng timer v xuất k tự trong ISR của timer).
Phần 6 Assembler
6.1 Hªy viết lại cÆc lệnh sau với dạng dữ liệu tức thời l nhị ph n:
a) MOV A, #255 c) MOV A, #1AH
b) MOV A, #11Q d) MOV A, # A
6.2 C g sai trong lệnh sau: ORL 80H, #F0H
6.3 Hªy t m cÆc k hiệu n o bị ặt tŒn sai:
?byte.bit @GOOD_bye 1
ST
_FLAG MY_PROGRAM
6.4 Hªy viết cÆc lệnh tương ương cÆc lệnh sau với dữ liệu tức thời l trị số hex:
a) MOV DPTR, # 0 EQ 48 c) MOV DPTR, #HIGH AB
b) MOV DPTR, # 1 d) MOV DPTR, #NOT (275 MOD 256)
6.5 Sự khÆc biệt giữa DB v DW?
6.6 Hªy ghi cÆc giÆ trị nhớ của oạn sau:
ORG 0FH
DW 5 SHL 4
DB 65535
DW 0
6.7 Viết ịnh nghĩa 1 macro døng iền 1 hằng số dữ liệu v o 1khối trong bộ nhớ dữ liệu ngo i.
Truyền ịa chỉ bắt ầu, chiều d i, v hằng số dữ liệu cho cÆc tham số macro.
6.8 Viết ịnh nghĩa cho cÆc macro sau:
JGE nhảy ến LABEL nếu thanh ghi t ch lũy c trị >= VALUE
JLT nhảy ến LABEL nếu thanh ghi t ch lũy c trị < VALUE
JLE nhảy ến LABEL nếu thanh ghi t ch lũy c trị <= VALUE
JOR nhảy ến LABEL nếu thanh ghi t ch lũy c trị ngo i tầm của oạn từ LOWER ến UPPER.
6.9 Viết ịnh nghĩa 1 macro c tŒn l CJNE_DPTR m sẽ nhảy ến nhªn LABEL nếu con trỏ dữ
liệu kh ng chứa giÆ trị VALUE. Định nga macro sao cho nội dung của tất cả cÆc thanh
ghi v cÆc nhớ kh ng bị ảnh hưởng.
| 1/18

Preview text:

lOMoARcPSD| 36991220 ĐHBK Tp HCM BMĐT GVPT: Hồ Trung Mỹ
Bài tập Vi Xử Lý Chương 3
B i tập trong chương n y ược chia l m 7 phần: T m tắt phần cứng (3.1+3.2), Tập lệnh
(3.3+3.4), Timer (3.5), Cổng nối tiếp (3.6), Ngắt (3.7), Assembler (3.8) v tổng hợp.
Phần 1 T m tắt phần cứng
1.1 Kể tŒn cÆc nh sản xuất khÆc (ngo i Intel) c chế tạo MCU 8051?
1.2 Ta sử dụng lệnh g ể ặt LSB của byte ở ịa chỉ 25H lŒn 1?
1.3 Hªy viết cÆc lệnh døng ể OR cÆc bit c ịa chỉ l 00H v 01H, kết quả cất v o bit c ịa chỉ 02H?
1.4 Sau khi thực thi cÆc lệnh sau th những bit n o c giÆ trị 1? MOV R0, #26H MOV @R0, #7AH
1.5 Hªy t m lệnh 1 byte c cøng hiệu ứng như lệnh 2 byte sau: MOV 0E0H, #55H
1.6 Hªy viết cÆc lệnh ể cất giÆ trị 0ABH v o RAM ngo i ở ịa chỉ 9A00H.
1.7 C bao nhiŒu thanh ghi chức năng ặc biệt ược ịnh nghĩa trong 8051, 8052?
1.8 Sau khi reset hệ thống, giÆ trị của SP của 8051 l bao nhiŒu?
1.9 Ta c thể sử dụng lệnh g ể khởi tạo trị cho SP của 8031 ể tạo stack 64 byte ở ỉnh của RAM nội?
1.10 Một chương tr nh con sử dụng cÆc thanh ghi R0-R7 mở rộng. Hªy minh họa l m cÆch n o chương
tr nh con n y chuyển sang sử dụng cÆc thanh ghi R ở bank 3 khi v o chương tr nh con n y v trả lại
bank thanh ghi cũ khi kết thœc chương tr nh con ?
1.11 MCU 80C31BH 1 hoạt ộng với thạch anh 16MHz nối v o cÆc ngı v o XTAL1 v XTAL2 của n .
Nếu kh ng c sử dụng lệnh MOVX, tần số của t n hiệu ALE l bao nhiŒu?
1.12 8051 ược sử dụng với thạch anh 4MHz, khi chu kỳ mÆy l bao nhiŒu?
1.13 Chu kỳ nhiệm vụ của ALE l bao nhiŒu? Giả sử phần mềm kh ng truy cập RAM ngo i. (chœ l chu
kỳ nhiệm vụ = chu kỳ bổn phận = chu kỳ l m việc = duty cycle = thời gian ON / chu kỳ của t n hiệu)
1.14 Ta biết rằng 8051 bị reset nếu ch n RST ược giữ ở mức cao trong tối thiểu 2 chu kỳ mÆy. (chœ l
với ặc t nh DC của 8051 th mức cao ở RST tối thiểu l 2.5V)
a) Nếu 8051 hoạt ộng với thạch anh 8MHz, khoảng thời gian tối thiểu giữ cho RST ở mức
cao ể reset hệ thống l bao nhiŒu?
b) H nh 2-15a cho thấy mạch RC døng ể reset bằng tay. Trong khi ang ấn nœt reset th
RST=5V v hệ thống ược giữ ở trạng thÆi reset. Như vậy sau khi nœt reset ược nhả ra th
8051 sẽ vẫn giữ ở trạng thÆi reset trong bao l u?
1.15 Ch n cổng P1.7 (ch n 8) c thể lÆi ược bao nhiŒu tải Schottky c ng suất thấp (LS)?
1.16 Liệt kŒ cÆc t n hiệu iều khiển bus của 8051 ể chọn cÆc EPROM ngo i v cÆc RAM ngo i.
1.17 Địa chỉ bit của MSB của byte ở ịa chỉ 25H trong vøng dữ liệu nội của 8051 l bao nhiŒu?
1.18 Hªy liệt kŒ những lệnh døng ể ặt LSB của thanh ghi t ch lũy lŒn 1 m kh ng ảnh hưởng 7 bit khÆc?
1.19 Giả sử lệnh sau vừa ược thực thi: MOV A, #55H
GiÆ trị của bit P trong PSW l bao nhiŒu?
1.20 Hªy viết cÆc lệnh døng ể sao chØp nội dung của R7 v o nhớ 100H ở RAM ngo i.
1.21 Giả sử ta ang døng bank 0, hªy ghi cÆc giÆ trị trong RAM nội của 8051 sau khi thực thi oạn mª sau: MOV R4, #32H MOV R0, #12H MOV R7, #3FH MOV R5, #55H
1.22 Sau khi cấp iện cho VXL, hªy cho biết bằng cÆch n o chọn bank 2 bằng một lệnh. lOMoARcPSD| 36991220
1.23 Giả sử lệnh thứ nhất ược thực thi sau khi reset hệ thống l gọi chương tr nh con. Nội dung của PC
ược cất ở những ịa chỉ n o trong RAM nội trước khi rẽ nhÆnh chương tr nh?
1.24 Sự khÆc biệt giữa chế ộ nghỉ (idle) v chế ộ tắt nguồn?
1.25 Lệnh g døng ể ưa 8051 v o chế ộ tắt nguồn?
1.26 Tất cả cÆc thanh ghi R0 R7 rộng bao nhiŒu bit? Phần lớn cÆc thanh ghi trong 8051 rộng bao
nhiŒu bit? Kể tŒn cÆc thanh ghi 16 bit trong 8051.
1.27 Bit P của PSW l bao nhiŒu sau khi thực thi mỗi lệnh sau: a) CLR C b) MOV A, #0CH c) MOV A, #0ABH
1.28 Những ịa chỉ bit n o sau y c giÆ trị l 1 sau khi thực thi (cÆc) lệnh: a) MOV 26H, #26H b) SETB P1.1 c) MOV P3, #0CH d) MOV A, #13H e) MOV 30H, #55H f) MOV R0, #26H XRL 30H, #0AAH MOV @R0, #7AH
1.29 Sau khi thực thi lệnh n y th bank thanh ghi n o ược chọn? a) MOV PSW, #0C8H
b) MOV PSW, #50H c) MOV PSW, #10H
1.30 Hªy minh họa l m cÆch n o c thể giao tiếp 2 RAM tĩnh (mỗi RAM 32KB) với 8051 ể chœng c thể
chiếm to n bộ vøng dữ liệu ngo i 64K.
1.31 Với h nh 3.15 trong sÆch, giả sử RAM ngo i c dung lượng l 211x8, cÆc ch n P2.0, P2.1, v P2.2 ược
nối v o cÆc ch n A8, A9, v A10 tương ứng của RAM. Hªy cho biết:
a) với cÆch nối n y RAM ược chia l m bao nhiŒu trang?
b) muốn truy cập ến byte thứ 8 (thứ tự kể từ 0) của trang 5 th l m cÆch n o?
c) ịa chỉ thật của byte trŒn l bao nhiŒu?
d) viết oạn chương tr nh ể gÆn trị 56H v o ịa chỉ 548H.
1.32 Với hệ thống døng 8051, hªy thiết kế mạch giải mª ịa chỉ cho cÆc trường hợp sau: (giả sử t n hiệu
chọn chip ều l t ch cực thấp [/CS]) Trường hợp 1 Trường hợp 2 Tầm ịa chỉ Thiết bị
Địa chỉ bắt ầu K ch thước Thiết bị 0000H 3FFFH RAM 0000H 8 K x 8 ROM 8000H 9FFFH ROM 4000H 16 K x 8 RAM 1 E000H FFFFH I/O (8255 PIA) 8000H 16 K x 8 RAM 2 FF00H 256 x 8 I/O (8255 PIA) Phần 2 Tập lệnh
2.1 Hªy cho biết cÆch ịnh ịa chỉ của cÆc lệnh sau a) MOV R1, A c) MOV A, #12H e) MOV R6, #28H g) MOVX A, @DPTR i) LJMP 0548H b) MOV A, @R1 d) MOV A, 12H f) SJMP LOOP h) ACALL SUB1 j) PUSH B
2.2 Mª mÆy dạng hex của lệnh sau l g ? INC DPTR
2.3 Mª mÆy dạng hex của lệnh sau l g ? DEC R6
2.4 Lệnh n o ược biểu diễn bởi mª mÆy 5DH?
2.5 Lệnh n o ược biểu diễn bởi mª mÆy FFH?
2.6 Liệt kŒ tất cả cÆc lệnh 3 byte của 8051 c mª mÆy tận cøng l 5H.
2.7 Hªy minh họa bằng cÆch n o ta c thể chuyển nội dung của ịa chỉ nội 50H v o thanh ghi t ch lũy A
với ịnh ịa chỉ giÆn tiếp?
2.8 Mª lệnh n o kh ng ược ịnh nghĩa trong 8051?
2.9 Để nạp v o R4 giÆ 65H th c cần dấu # trong lệnh: MOV R4, #65H kh ng?
2.10 Ta xØt lệnh sau: MOV 50H, #0FFH
a) Mª lệnh của lệnh n y l bao nhiŒu?
b) Lệnh n y d i bao nhiŒu byte? lOMoAR cPSD| 36991220
c) Giải th ch mỗi byte của lệnh n y.
d) MCU phải cần bao nhiŒu chu kỳ mÆy ể thực hiện lệnh n y?
e) Nếu 8051 hoạt ộng với thạch anh 16 MHz, MCU phải mất bao l u mới thực thi xong lệnh n y?
2.11 Offset tương ối của lệnh sau l bao nhiŒu? SJMP AHEAD
nếu lệnh n y ang ở nhớ 0400H v 0401H, v nhªn AHEAD biểu diễn lệnh ở ịa chỉ 041FH.
2.12 Offset tương ối của lệnh sau l bao nhiŒu? SJMP BACK
nếu lệnh n y ang ở nhớ A050H v A051H, v nhªn BACK biểu diễn lệnh ở ịa chỉ 9FE0H. 2.13 Giả sử lệnh AJMP AHEAD
ở bộ nhớ chương tr nh tại ịa chỉ 2FF0H v 2FF1H, v nhªn AHEAD tương ứng với lệnh ở ịa chỉ
2F96H. Những byte mª mÆy (dạng số hex) của lệnh n y l g ?
2.14 Tại một chỗ trong chương tr nh, nếu ta muốn chương tr nh rẽ nhÆnh ến nhªn EXIT nếu thanh ghi A
bằng mª ASCII của carriage return . Th ta phải sử dụng (những) lệnh g ? 2.15 Lệnh SJMP BACK
ở bộ nhớ chương tr nh tại ịa chỉ 0100H v 0101H, v nhªn BACK tương ứng với lệnh ở ịa chỉ 00AEH.
Những byte mª mÆy (dạng số hex) của lệnh n y l g ?
2.16 Lệnh sau thực hiện g ? SETB 0D7H
C cÆch n o tốt hơn thực hiện cøng tÆc vụ n y? Tại sao?
2.17 Sự khÆc biệt giữa 2 lệnh sau l g ? INC A INC ACC
2.18 Hªy viết những byte mª mÆy cho lệnh sau LJMP ONWARD
nếu nhªn ONWARD biểu diễn lệnh ở ịa chỉ 0A0F6H.
2.19 Giả sử thanh ghi t ch lũy A chứa 5AH. Nội dung trong thanh ghi A l g sau khi thực thi lệnh: XRL A, #0FFH
2.20 Giả sử PSW chứa 0C0H v thanh ghi A chứa 50H trước khi thực thi lệnh RLC A. Nội dung của
thanh ghi A sau khi thực thi lệnh trŒn l bao nhiŒu?
2.21 Hªy viết (cÆc) lệnh tương ương ể thực hiện: a) X a nội dung thanh ghi A
b) Lấy bø 1 giÆ trị ở thanh ghi A v cất lại v o A
2.22 Hªy viết cÆc lệnh thực hiện:
a) Chia nguyŒn n i dung của A cho 16 (giả sử A < 256).
b) Nh n nguyŒn nội dung của A cho 8 (giả sử A <32).
2.23 Nội dung của thanh ghi A l bao nhiŒu sau khi 8051 thực hiện cÆc lệnh sau: a) MOV A, #15H c) MOV A, #15 e) MOV A, #7FH MOV R2, #13H MOV R5, #15 MOV 50H, #29H
ADD A, R2 ADD A, R5 MOV R0, #50H b) MOV R4, #25H d) MOV A, #25 XCHD A, @R0 MOV A, #1FH MOV R7, #18H ADD A, R4 ADD A, R7
2.24 Hªy viết mª mÆy cho cÆc oạn chương tr nh trong 2.23, giả sử l ang sử dụng bank thanh ghi 0.
2.25 CÆc lệnh n o kh ng hợp lệ trong cÆc lệnh sau? 1) MOV R3, #500 5) MOV R1, #50
9) MOV A, #255H 13) MOV R7, #00 2) MOV A, #50H 6) MOV A, #F5H 10) ADD R3, #50H 14) MOV R9, #50H 3) ADD A, R5 7) ADD A, #50H 11) ADD A, #F5H 15) ADD R7, R4 lOMoAR cPSD| 36991220 4) ADD R3, A 8) ADD A, #255H 12) MOV A, @R3 16) PUSH A
2.26 Mỗi lệnh sau chiếm bao nhiŒu byte v thực hiện trong bao l u (giả sử XTAL 12MHz): a) MOV A, #55H e) MOV A, R1 b) MOV R3, #3 f) MOV R3, A c) INC R2 h) ADD A, R2 d) ADD A, #0 i) MOVX A, @DPTR
2.27 GiÆ trị của cờ CY sau oạn mª sau:
a) CLR C b) MOV A, #54H c) MOV A, #00 d) MOV A, #250 CPL C ADD A, #0C4H ADD A, #0FFH ADD A, #05
2.28 Viết cÆc oạn chương tr nh 8051:
a) Điền giÆ trị 48H v o cÆc nhớ trong RAM nội từ ịa chỉ 40H ến 89H bằng cÆch døng lệnh ịnh
ịa chỉ giÆn tiếp v v ng lặp.
b) X a 20 nhớ trong RAM nội với ịa chỉ bắt ầu l 80H.
c) Sao chØp 10 nhớ từ RAM nội c ịa chỉ ầu l 35H ến vøng nhớ khÆc c ịa chỉ ầu l 60H.
2.29 Viết chương tr nh cộng 2 số 16 bit. CÆc số l 3CE7H v 3B8DH. Đặt byte cao của tổng ở R7 v byte thấp của tổng ở R6.
2.30 Viết cÆc lệnh 8051 ể thực hiện cÆc tÆc vụ sau:
a) Chuyển giÆ trị dữ liệu 55H v o cổng 1
b) Đặt bit 3 của Port 3 lŒn 1
c) Cộng dữ liệu ở ịa chỉ ược chứa trong R0 v o thanh ghi t ch lũy.
d) So sÆnh dữ liệu trong R0 với giÆ trị 10H v nhảy ến nhªn Label1 nếu chœng khÆc nhau.
e) Đợi ở ịa chỉ hiện h nh cho ến khi ở Port 3 bit 0 thay ổi từ 1 sang 0.
2.31 Viết chương tr nh lấy dữ liệu hex (c giÆ trị 00H FFH) từ cổng P1 v ổi n sang thập ph n. Cất cÆc số
lần lượt v o cÆc thanh ghi R5 (chứa h ng trăm), R6 (chứa h ng chục), R7 (chứa ơn vị).
2.32 Giả sử c 5 dữ liệu BCD 2 k số (digit) ược ặt liŒn tiếp trong RAM nội với ịa chỉ bắt ầu l 40H. Hªy
viết chương tr nh t nh tổng của 5 dữ liệu n y, kết quả ược cất v o RAM nội với ịa chỉ bắt ầu l 50H
(byte thấp ể ở ịa chỉ thấp). Giả sử cÆc dữ liệu BCD l : (40H)=71H, (41H)=11H, (42H)=65H,
(43H)=59H v (44h)=37H; hªy kiểm tra lại chương tr nh với cÆc dữ liệu n y.
2.33 Nội dung của cÆc thanh ghi v cÆc nhớ trong 8051 l : Thanh ghi Nội dung
Địa chỉ bộ nhớ nội Nội dung A 42H 22H 25H B 5AH 23H F5H R0 (bank 0) 15H 24H 17H R1 (bank 0) 09H 25H 5CH SP 22H 26H 8AH PC B100H 27H 06H
Sau khi thực thi ọan chương tr nh sau th bảng giÆ trị trŒn sẽ thay ổi như thế n o? MOV A, #1H MOV B, #8H MUL AB MOV R0, #27H ADD A, @R0 PUSH ACC
Giả sử XTAL=12MHz, hªy viết mª mÆy ọan chương tr nh trŒn v cho biết oạn chương tr nh
trŒn ược thực thi trong bao l u?
2.34 Nội dung của cÆc thanh ghi v cÆc nhớ trong 8051 l : Thanh ghi Nội dung
Địa chỉ bộ nhớ nội Nội dung A 42H 2FH 25H B 5AH 30H F5H R0 (bank 0) 33H 31H 17H SP 2FH 32H 05H PC 8100H 33H 06H lOMoARcPSD| 36991220
Sau khi thực thi oạn chương tr nh sau th bảng giÆ trị trŒn sẽ thay ổi như thế n o? PUSH ACC MOV A, 32H ADD A, @R0 MOV 31H, A RL A ANL A, #0F6H DEC R0 MOV @R0, B
Giả sử XTAL=12MHz, hªy viết mª mÆy oạn chương tr nh trŒn v cho biết oạn chương tr nh
trŒn ược thực thi trong bao l u?
2.35 Hªy biểu diễn cÆc trị số ở stack v con trỏ ngăn xếp cho mỗi d ng của oạn chương tr nh sau: ORG 0 MOV R0, #66H MOV R3, #7FH MOV R7, #5DH PUSH 0 PUSH 3 PUSH 7 CLR A MOV R3, A MOV R7, A POP 3 POP 7 POP 0
Đoạn chương tr nh c trả lại cÆc trị cũ cho cÆc thanh ghi R0, R3, v R7 kh ng? Nếu kh ng th phải ổi g ể lưu lại giÆ trị.
2.36 Hªy viết cÆc lệnh døng ể tạo ra xung xuống mức thấp trong 5 μs ở P1.7? Giả sử P1.7 ban ầu ở mức
cao v 8051 l m việc với thạch anh 12MHz.
2.37 Viết chương tr nh tạo ra s ngvu ng 83.3KHz ở P1.0 (giả sử hoạt ộng 12MHz).
2.38 Viết chương tr nh tạo ra xung mức cao trong 4 μs ở ch n P1.7 cứ sau 200 μs.
2.39 Viết cÆc chương tr nh ể c i ặt cÆc phØp toÆn logic như ở h nh E.3-1. lOMoARcPSD| 36991220
H nh E.3-1. CÆc b i toÆn lập tr nh logic: (a) NOR 3 ngı v o; (b) NAND 8 ngı v o; v (c) PhØp toÆn logic døng 3 cổng.
2.40 Với h nh E.3-1(a), thời gian tr hoªn truyền trường hợp xấu nhất từ lœc c chuyển tiếp ở ngı v o ến
lœc c chuyển tiếp ở ngı ra l bao nhiŒu?
2.41 Sau khi thực thi nh m lệnh sau, nội dung của thanh ghi A l bao nhiŒu? MOV A, #7FH MOV 50H, #29H MOV R0, #50H XCHD A, @R0
2.42 Hªy viết những byte mª mÆy cho lệnh sau? SETB P2.6
2.43 Ta phải sử dụng những lệnh g ể chØp cờ 0 (F0) trong PSW v o ch n cổng P1.5?
2.44 Dưới t nh huống n o th ASM51 (của Intel) sẽ chuyển lệnh JMP chung (tổng quÆt) th nh LJMP?
2.45 Bộ nhớ nội của 8051 ược khởi tạo trị như sau, ngay trước khi thực thi lệnh RET: Địa chỉ Nội SFRs Nội nội dung dung 0BH 9AH SP 0BH 0AH 78H PC 0200H 09H 56H A 55H 08H 34H 07H 12H
Nội dung của PC sau khi thực thi lệnh RET l bao nhiŒu?
2.46 Viết một oạn ngắn mª 8051 ọc liŒn tục 1 byte dữ liệu từ Port 1 v ghi n ra Port 2, cho ến khi byte ọc
ược bằng 4AH th dừng lại. 2.47 Cho oạn mª sau: RTN: PUSH PSW LOOP: MOV A, @R0 MOV @R1, A INC R0 lOMoARcPSD| 36991220 INC R1 DJNZ B, LOOP POP PSW RET
a) Chương tr nh con RTN l m g ?
b) Thanh ghi n o ược døng l m ịa chỉ nguồn?
c) Thanh ghi n o ược døng l m ịa chỉ ch?
d) Thanh ghi B ược døng l m g trong chương tr nh con?
e) Ta nŒn thay ổi chương tr nh con trŒn như thế n o ể kh ng ảnh hưởng ến cÆc thanh ghi trong chương tr nh gọi RTN?
2.48 Cho chương tr nh con 8051 như sau: SUB: MOV R0, #20H LOOP: MOV @R0, #0 INC R0 CJNE R0, #80H, LOOP RET
a) Chương tr nh con n y l m g ?
b) Mỗi lệnh trong chương tr nh con trŒn thực thi mất mấy chu kỳ mÆy?
c) Mỗi lệnh d i bao nhiŒu byte?
d) Chương tr nh con trŒn thực thi mấy bao nhiŒu? (giả sử hoạt ộng 12MHz)
2.49 Một DIP switch 4 bit v LED 7 oạn anode chung ược nối v o 8051 như ược chỉ trong h nh E.3-2. Hªy
viết chương tr nh liŒn tục ọc mª 4 bit từ DIP switch v cập nhật cÆc LED ể hiển thị k tự hex th ch
hợp. Th dụ, nếu ọc ược mª 1100B th sẽ xuất hiện k tự hex C , như vậy cÆc oạn từ a ến g tương ứng
sẽ l ON, OFF, OFF, ON, ON, ON, v OFF. Chœ l việc ặt ch n cổng ở 8051 l 1 sẽ l m cho oạn MOV R0, #20H MOV R1, #30H MOV R2, #2 ; ### CLR C lOMoAR cPSD| 36991220 NEXT: MOV A, @R0 ADDC A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R2, NEXT ; ***
a) Sau khi thực thi lệnh thứ ba (c chœ th ch ###), nội dung của R0, R1, v R2 l bao nhiŒu?
b) Lệnh c nhªn NEXT ược thực thi bao nhiŒu lần?
c) Sau khi ho n tất chương tr nh trŒn th nội dung của R0, R1, v R2 l bao nhiŒu?
d) Nếu nội dung của cÆc nhớ như sau: (20H) = 45H (21H) = 23 (30H) = 89H (31H) = 67H
• Cho biết nội dung của cÆc nhớ trŒn sau khi thực thi chương tr nh trŒn?
• Chức năng của chương tr nh trŒn?
• CÆc toÆn hạng ược cất trong bộ nhớ như thế n o?
2.51 XØt chương tr nh 8051 sau: start: MOV R0, #05H MOV R1, #40H MOV R2, #0H ; ### MOV @R1, #0H again: MOV DPTR, #TABLE MOV A, R2 MOVC A, @A + DPTR ADD A, @R1 MOV @R1, A INC R2 DJNZ R0, again AJMP EXIT TABLE: DB 10H, 11H, 12H, 13H, 14H EXIT: END
a) Sau khi thực thi lệnh (c chœ th ch ###) th nội dung của R0, R1, v R2 l bao nhiŒu?
b) Lệnh c nhªn again ược thực thi bao nhiŒu lần?
c) Sau khi ho n tất chương tr nh trŒn th nội dung của R0, R1, v R2 l bao nhiŒu?
d) Nội dung của nhớ 40H sau khi thực thi chương tr nh trŒn?
e) Chức năng của chương tr nh trŒn?
f) Nếu kết quả của chương tr nh trŒn ược cất v o nhớ 50H th lệnh n o cần sửa ổi v ổi như thế n o?
2.52 XØt chương tr nh sau (giả sử LED l ịa chỉ của 1 bit xuất n o ). BLINK: CPL LED CALL DELAY JMP BLINK DELAY: MOV R1, #145 DLY2: MOV R2, #199 DLY1: MOV R3, #210 DJNZ R3, $ DJNZ R2, DLY1 DJNZ R1, DLY2 RET lOMoAR cPSD| 36991220
a) Giả sử XTAL c tần số 6MHz, hªy t nh thời gian ON v thời gian OFF của LED
b) T nh thời gian ON của LED trong oạn sau với XTAL l 12MHz DELAY: MOV R1, #136 DLY2: MOV R2, #136 DLY1: MOV R3, #136 DJNZ R3, $ DJNZ R2, DLY1 DJNZ R1, DLY2 RET 2.53 Cho oạn mª sau: RTN: PUSH B LP: MOV B, @R0 CJNE A, B, NEXT MOV R1, #01H SJMP FIN NEXT: INC R0 DJNZ R1, LP MOV R1, #0H FIN: POP B RET
a) Chương tr nh con RTN l m g ?
b) Thanh ghi n o ược døng l m mẫu dữ liệu t m kiếm?
c) Thanh ghi n o ược døng chứa kết quả?
d) Thanh ghi B ược døng l m g trong chương tr nh con?
e) Giải th ch hoạt ộng của cÆc lệnh PUSH v POP trong chương tr nh con.
2.54 CÆc nhớ RAM nội với ịa chỉ 3FH v 40H chứa cÆc giÆ trị 42H v 04H tương ứng. Hªy t m cÆc
giÆ trị cÆc cÆc thanh ghi sau khi thực thi oạn chương tr nh sau:
- cÆc thanh ghi A & B v cờ CY sau khi thực thi lệnh MUL
- cÆc thanh ghi A & B v cờ CY sau khi thực thi lệnh DIV MOV A, 3FH MOV 0F0H, 40H MUL AB DIV AB
2.55 Hªy cho biết cÆc giÆ trị cờ trong PSW của 8051 sau khi thực thi cÆc lệnh sau: (giả sử giÆ trị ầu của PSW l 00H) MOV A, #7FH MOV 0F0H, #21H ADD A, B MOV 0F0H, #80H SUBB A, B
2.56 Viết chương tr nh t m kiếm trong 1 bảng chứa 16 byte dữ liệu bắt ầu ở ịa chỉ 40H trong RAM nội
của 8051 với byte dữ liệu ược ọc từ Port 2
a) Khi ho n tất t m kiếm th ặt bit 1 của Port 1 lŒn 1.
b) Nếu t m thấy dữ liệu th ặt bit 2 của Port 1 lŒn 1.
c) Nếu kh ng t m thấy dữ liệu th x a bit 2 của Port 1 về 0.
2.57 Cho trước oạn chương tr nh 8051 sau v cÆc giÆ trị ầu, hªy t m cÆc giÆ trị trong cÆc thanh ghi v
cÆc nhớ. CÆc giÆ trị ầu ở cÆc nhớ l : (55H) = 03H, (A003H) = 05H, (A005H) = 07H. MOV R1, 55H MOV A, R1 MOV DPTR, #0A000H MOVC A, @A+DPTR MOVC A, @A+DPTR lOMoAR cPSD| 36991220 MOV R1, A MOV 55H, R1
2.58 Cho trước oạn chương tr nh 8051 sau, hªy t m
a) CÆc nhớ bị ảnh hưởng v cÆc giÆ trị của chœng.
b) Tổng số byte cần cho chương tr nh
c) Tổng thời gian cần ể thực thi oạn chương tr nh n y (kể cả lệnh RET v giả sử tần số thạch anh l 12MHz) RTN: MOV R0, #80H LOOP1: MOV @R0, #0FFH DEC R0 CJNE R0, #20H, LOOP1 MOV R1, #90H LOOP2: MOV @R1, #00H INC R1 CJNE R1, #0F0H, LOOP2 RET
2.59 Hªy viết mª mÆy cho oạn chương tr nh sau: ORG 300H MOV A, #20H MOV R0, #34H MOV DPTR, #LABEL ADD A, R0 AJMP LABEL ORG 400H LABEL: LJMP 0300H
2.60 Đoạn chương tr nh sau chạy v tận. Giả sử døng XTAL 6MHz cho clock của 8031. Như vậy ta ọc
ược tần số bao nhiŒu ở scope nếu o ở ch n P1.0 CLR C LOOP1: MOV A, #47 LOOP2: DJNZ A, LOOP2 MOV P1.0, C CPL C AJMP LOOP1
Với cøng chương tr nh trŒn th tần số ở ch n ALE l bao nhiŒu?
2.61 Viết chương tr nh con ổi 1 k số BCD trong thanh ghi A th nh biểu diễn ASCII tương ứng trong nhớ
ược chỉ bởi thanh ghi R0. Nếu giÆ trị trong A kh ng phải BCD th ặt bit c ịa chỉ 00H c giÆ trị 1. Từ
hªy phÆt triển th nh chương tr nh con ổi 2 k số BCD trong thanh ghi A th nh biểu diễn ASCII của
chœng, kết quả ược cất v o cÆc nhớ c ịa chỉ bắt ầu cho trong R0, k số BCD c trọng số cao sẽ ược
cất ở ịa chỉ thấp. L m lại với chuyển ổi số Hex sang ASCII.
2.62 Viết chương tr nh con ổi biểu diễn ASCII ược cất trong nhớ ược chỉ bởi thanh ghi R0 th nh k số
BCD tương ứng trong thanh ghi A. Nếu giÆ trị trong A kh ng phải BCD th ặt bit c ịa chỉ 00H c
giÆ trị 1. Từ hªy phÆt triển th nh chương tr nh con ổi 2 k số dạng ASCII ược cất trong nhớ ược
chỉ bởi thanh ghi R0 (k số c trọng số cao sẽ ược cất ở ịa chỉ thấp). th nh BCD trong thanh ghi A. L
m lại với chuyển ổi ASCII sang số Hex.
2.63 Viết chương tr nh con BINTOBCD ổi 1 số nhị ph n 8 bit th nh biểu diễn BCD tương ứng của n (3 k
số BCD) ể trong cÆc nhớ c ịa chỉ bắt ầu ở trong R0, k số BCD c trọng số cao nhất sẽ ở ịa chỉ thấp nhất.
2.64 Viết chương tr nh con BCDTOBIN ổi số BCD c 2 k số trong thanh ghi A th nh số nhị ph n trong nhớ ược chỉ bởi R0. lOMoAR cPSD| 36991220
2.65 Viết chương tr nh xÆc ịnh xem c bao nhiŒu byte c trị l 0, < 0, > 0 trong một khối bộ nhớ; nhớ
40H sẽ chứa số byte c trị bằng 0, nhớ 41H sẽ chứa số byte c trị < 0, nhớ 42H sẽ chứa số byte c trị
> 0. nhớ 43H chứa ịa chỉ ầu khối bộ nhớ, nhớ 44H chứa số byte trong khối (chiều d i khối). Th
dụ: (43H)=45H, (44H)=06, (45H)=68H, (46H)=F2H, (47H)=87H, (48H)=00H, (49H)=59H,
(50H)=2AH th sau khi chạy oạn chương tr nh n y th (41H)=1, (42H)=2, (43H)=3.
2.66 T nh bø 2 của một số 16 bit c ịa chỉ ầu ược chỉ bởi R6 (byte cao ở ịa chỉ thấp) v kết quả ược cất v o
bộ nhớ với ịa chỉ ầu ược chỉ bởi R7. Th dụ: (R6)=40H, (R7)=42H, (40H)=45H, (41H)=2AH th kết
quả ở (42H)=BAH, (43H)=D6H. Hªy tr nh b y cÆc giải phÆp c thể c .
2.67 Viết chương tr nh t m phần tử nhỏ nhất trong 1 khối dữ liệu. Chiều d i của khối dữ liệu ở trong nhớ
41H v ịa chỉ bắt ầu khối ở trong nhớ 42H. Chứa phần tử nhỏ nhất trong nhớ 40H, giả sử khối dữ
liệu chứa cÆc số nhị ph n kh ng dấu. L m lại với t m phần tử lớn nhất.
2.68 Viết chương tr nh SORT sắp thứ cÆc số trong 1 khối dữ liệu. Chiều d i của khối dữ liệu ở trong
nhớ 41H v ịa chỉ bắt ầu khối ở trong nhớ 42H. Kết quả ược lưu v o trong vøng nhớ khối dữ liệu
ban ầu. (HD: døng phương phÆp bubble sort, xem trong cÆc sÆch về cấu trœc dữ liệu v giải thuật)
2.69 Viết chương tr nh con nh n 2 số nguyŒn 8 bit c dấu, døng bø 2 ể biểu diễn cho cÆc số m. Kết quả l
số nguyŒn 16 bit c dấu ể trong thanh ghi R6 (byte cao) v R7 (byte thấp).
2.70 Viết chương tr nh con trừ số nguyŒn 16 bit c dấu X (ược cất ở R6 v R7, byte cao ở R6) với số
nguyŒn 16 bit c dấu Y (ược cất ở R4 v R5, byte cao ở R4), døng biểu diễn bø 2 cho cÆc số m.
2.71 Viết chương tr nh con SOSANH nhận 2 tham số 8 bit v so sÆnh chœng với nhau. Kết quả ược ặt ở
thanh ghi ACC. Nếu gọi cÆc tham số l X v Y th kết quả cất trong thanh ghi ACC l : -1 nếu X < Y;
0 nếu X = Y; v 1 nếu X > Y.
2.72 Viết chương tr nh con t nh tổng số bit 1 trong 1 byte cho trước ở thanh ghi A. L m lại với t nh tổng
số bit 0. Hªy viết chương tr nh con cho kết quả tổng số bit 1 v tổng số bit 0 trong thanh ghi A.
2.73 Viết chương tr nh con t nh trung b nh cộng của một dªy cÆc trị số 1 byte kh ng dấu với số ầu c ịa
chỉ ở R6, chiều d i của dªy số ở R7. Kết quả ược cất v o R5.
2.74 Hªy m tả stack, SP v nội dung của cÆc thanh ghi bị ảnh hưởng trong oạn chương tr nhsau. Giả sử ban ầu (SP)=07H. MOV R2, #55H MOV R5, #0CCH MOV R1, #0ADH PUSH 2 PUSH 5 PUSH 1 POP 2 POP 1 POP 5
2.75 Viết chương tr nh x a ACC v cộng 5H v o ACC 10 lần bằng cÆch døng v ng lặp.
2.76 C 2KB RAM dữ liệu ược gắn v o 8051 (bắt ầu ở ịa chỉ 8000H). Viết chương tr nh (bắt ầu từ
2030H): a) Điền to n bộ RAM 2K với trị 55H; b) kiểm tra lại giÆ trị ở mỗi nhớ c bằng 55H kh ng?
Nếu c sai th cho P1.1=1 v cho biết bao nhiŒu nhớ bị sai (cất v o R7).
2.77 Viết chương tr nh con ATOH ổi 1 byte ASCII sang số hex tương ứng (0 9 v A F; tương ứng ASCII
l 30H 39H v 41H 46H). Nếu byte ASCII kh ng thuộc 30H 39H hay 41H 46H th ặt cờ C lŒn 1. Aøp
dụng chương tr nh con ATOH ể ổi 2 byte ASCII liŒn tiếp trong RAM nội của 8051 (th dụ byte cao
ở 40H v byte thấp ở 41H) th nh mª hex 1 byte ở 1 nhớ trong RAM nội 8051 (th dụ ở 42H). Th dụ:
(40H)=36H v (41H)=42H th kết quả (42H)=6BH.
2.78 Viết chương tr nh c i ặt logic cho cÆc h m sau theo 2 cÆch: bằng cÆc lệnh xử l logic với biến
Boole, v bằng cÆc lệnh rẽ nhÆnh theo iều kiện với bit. Giả sử cÆc biến X, Y, Z, V, W v F tương
ứng với cÆc ch n P0.0 ến P0.5. a) F = (X(Y+Z)). Z. (V+W) b) F = (XYZ) + Z + V + W c) F = X Y+ Y Z+ Z V W d) F = (X +Y )(Z+V)(X+W ) lOMoARcPSD| 36991220 e) F = ((XY + X Z ) ⊕ V)
2.79 Viết chương tr nh copy 16 byte trong bộ nhớ mª ngo i (1000H 100FH) ến RAM nội từ 30H 3FH.
2.80 Viết chương tr nh copy 16 byte bộ nhớ dữ liệu ngo i (1000H 100FH) ến RAM nội từ 30H 3FH.
2.81 Viết chương tr nh con ổi 1 số BCD 2 k số th nh 2 mª (LED) 7 oạn. Số BCD ược ọc từ cổng P0 v kết
quả ược xuất ra P1 v P2 (P1 ứng với k số h ng chục, P2 ứng h ng ơn vị). Dạng kết nối phần cứng
cho P1 v P2 tương tự trong h nh E.2.81. H nh E.2.81 lOMoARcPSD| 36991220 Phần 3 Timer
Trong phần Timer n y, ta sẽ giả sử l 8051 ược sử dụng với thạch anh 12MHz nếu b i tập kh ng cho biết tần số thạch anh.
3.1 Viết chương tr nh 8051 tạo s ng vu ng ở P1.5 c tần số 100KHz (Hướng dẫn: Kh ng sử dụng timer).
3.2 Hiệu ứng của lệnh sau l g ? a) SETB 8EH b) MOV TMOD, #11010101B
3.3 Hªy cho biết cần nạp trị cho TMOD l bao nhiŒu ể
a) Timer 1 chạy chế ộ 2, Timer 0 chạy chế ộ 1
b) Timer 1 chạy chế ộ 0, Timer 0 chạy chế ộ 2
3.4 C bao nhiŒu cÆch ể dừng Timer ang chạy?
3.5 XØt chương tr nh 3 lệnh ở th dụ tạo dạng xung (th dụ ầu trong phần 3.5.8). Tần số v chu kỳ nhiệm
vụ của dạng s ng ược tạo ra ở ch n P1.0 của 8051 hoạt ộng với thạch anh 16MHz?
3.6 Hªy t nh thời gian tr hoªn của chương tr nh con DELAY sau với tần số thạch anh l : a) 12 MHz v b) 11.0592 MHz. DELAY: MOV R3,#250 ; 1 MC (1 chu kỳ mÆy) HERE: NOP ; 1 MC NOP ; 1 MC NOP ; 1 MC NOP ; 1 MC DJNZ R3,HERE ; 2 MC RET ; 1 MC
3.7 Viết lại b i giải của th dụ giao tiếp buzzer (th dụ cuối trong phần 3.5.8). ể bao gồm chế ộ restart
(bắt ầu lại). Nếu chuyển tiếp 1 sang 0 xảy ra khi buzzer phÆt tiếng kŒu, bắt ầu lại v ng ịnh th ể
tiếp tục cho buzzer kŒu trong gi y kế, xem minh họa ở h nh E.3.7. Hnh E.3.7
3.8 Viết chương tr nh 8051 tạo s ng vu ng ở P1.2 c tần số 12KHz theo cÆch: a) døng Timer 0; v b) kh ng døng timer.
3.9 Viết chương tr nh 8051 døng timer 1 ể tăng nội dung của nhớ TIME (trong RAM nội) thŒm 1 cứ sau 20 ms.
3.10 Viết chương tr nh con MOTGIAY theo 2 cÆch: a) døng Timer 0; v b) kh ng døng timer. Aøp
dụng chương tr nh con trŒn ể tạo dạng s ng vu ng tuần ho n c chu kỳ 10 s, 20 s v 30 s tương ứng
với cÆc ch n P1.0, P1.1 v P1.2.
3.11 Viết chương tr nh 8051 døng timer:
a) ể tạo xung vu ng 500Hz c chu kỳ nhiệm vụ l 70% ở ch n P1.0. lOMoARcPSD| 36991220
b) Tương tự a) nhưng chu kỳ nhiệm vụ l 40% v xung n y chỉ tồn tại trong 10s.
3.12 Thiết kế ứng dụng cửa xoay (turnstile) døng Timer 1 ể phÆt hiện lœc n o c người thứ 10 000 i v o
khu vực hội chợ. Giả sử (a) cảm biến cửa xoay nối v o T1 v tạo ra 1 xung khi c người i v o l m
xoay cửa, v (b) Łn ược nối v o ch n P1.7 (chœ thực tế c thŒm mạch giao tiếp từ P1.7 với
Łn) v sÆng khi P1.7=1 v tắt khi P1.7=0. Như vậy 8051 sẽ ếm số sự kiện ở T1 v l m sÆng Łn ở
P1.7 khi người thứ 10 000 i v o khu vực hội chợ (xem h nh E.3.12). H nh E.3.12
3.13 Chuẩn iều hưởng (hay c n gọi l cộng hưởng) quốc tế cho cÆc thiết bị m nhạc l A trŒn D trung (La
trŒn Đ trung) ở tần số 440 Hz. Viết chương tr nh 8051 ể tạo ra tần số iều hưởng n y v phÆt ra
tone 440 Hz ở loa nối ở P1.1 (xem h nh E.3.13). Do việc l m tr n cÆc giÆ trị ặt ở TL1/TH1, c 1
sai số nhỏ trong tần số ra. Tần số ra ch nh xÆc l bao nhiŒu v phần trăm sai số l bao nhiŒu? Muốn
c ược ch nh xÆc 440 Hz với chương tr nh bạn ª viết th giÆ trị của thạch anh l bao nhiŒu? H nh E.3.13
3.14 Viết chương tr nh 8051 ể tạo ra tin hiệu 500 Hz ở P1.0 døng timer 0. Dạng s ng c chu kỳ nhiệm vụ 30%.
3.15 Mạch ở h nh E.3.15 sẽ cung cấp t n hiệu rất ch nh xÆc 60 Hz (với iều kiện Æp AC n y c tần số ổn
ịnh) v o T0 bằng cÆch lấy từ thứ cấp của một biến Æp. Khởi ộng Timer 0 sao cho n lấy xung nhịp
từ T0 v tr n 1 lần/gi y. Ở mỗi lần tr n, cập nhật giÆ trị thời gian trong ng y ược chứa trong bộ nhớ
nội của 8051 ở cÆc vị tr 50H (giờ), 51H (phœt), v 52H (gi y). H nh E.3.15 lOMoARcPSD| 36991220
Phần 4 Cổng nối tiếp (Serial Port)
4.1 Hªy t m giÆ trị của TH1 (dạng thập ph n v hex) ể ặt tốc ộ baud cho cÆc trường hợp sau nếu
SMOD=1: a) 9600 baud; b) 4800 baud. Giả sử rằng XTAL=11.0592 MHz
4.2 T m tốc ộ baud nếu TH1= 2, SMOD = 1 v XTAL =11.0592MHz.
4.3 Giả sử rằng cổng nối tiếp 8051 ược nối v o cổng COM của mÆy vi t nh, v ở PC ta sử dụng chương tr
nh terminal.exe ể gửi v nhận dữ liệu nối tiếp. P1 v P2 của 8051 ược nối v o cÆc LED v cÆc c ng tắc
tương ứng. Viết chương tr nh 8051 ể: a) gửi ến mÆy vi t nh th ng iệp We Are Ready! ; b) nhận bất cứ
dữ liệu n o ược gửi từ mÆy vi t nh v xuất n ra cÆc LED ang gắn ở P1; v c) lấy dữ
liệu trŒn cÆc c ng tắc nối v o P2 v gửi nối tiếp dữ liệu ến mÆy vi t nh. Chương tr nh thực a) một
lần, nhưng cÆc phần b) v c) liŒn tục. Sử dụng tốc ộ baud l 4800.
4.4 Giả sử XTAL=11.0592 MHz với chương tr nh sau, hªy cho biết: a) chương tr nh n y l m g , b) t nh
tần số ược sử dụng bởi timer1 ể ặ tốc ộ baud, v c) t m tốc ộ baud của việc chuyển dữ liệu. MOV A, PCON SETB ACC.7 MOV PCON, A MOV TMOD, #20H MOV TH1, -3 MOV SCON, #50H SETB TR1 MOV A, # B LOOP: CLR TI MOV SBUF, A JNB TI, $ SJMP LOOP
4.5 Sử dụng cổng nối tiếp l m cổng hiển thị: Cho mạch ở h nh E.4.5
H nh E.4.5 Mạch nối bŒn ngo i với cổng nối tiếp 8051. Với lệnh: MOV SBUF, A
Dữ liệu nhị ph n từ ACC sẽ ược truyền ra bŒn ngo i bắt ầu từ bit thấp nhất qua ch n RXD
của cổng nối tiếp sau khi thực thi lệnh trŒn. Khi kết thœc truyền bit SCON.1 sẽ tự ộng ược ặt
lŒn 1. IC 74LS164 trong h nh l thanh ghi dịch 8 bit v o nối tiếp ra song song (SIPO). Dữ liệu
nhị ph n 8 bit v o nối tiếp sẽ ược xuất ra song song. CÆc IC 74LS164 mắc kế tiếp nhau ể giÆ trị
ban ầu ược hiện trŒn hiển thị sẽ dịch từ phải sang trÆi khi c thŒm giÆ trị mới. lOMoAR cPSD| 36991220
LED 7 oạn l loại anode chung, do khi ưa mức thấp v o c thể l m sÆng cÆc oạn n y (th
dụ: oạn a sẽ sÆng khi Q1 của 74LS164 l 0). Theo nguyŒn tắc n y ta c thể cho hiện 1 k tự trŒn
hiển thị nếu cÆc ngı ra tương ứng của 74LS164 ở mức thấp. Th dụ ể hiện ược k tự 2 th cần l m
sÆng cÆc oạn a, b, g, e v d, v vậy cÆc ngı ra tương ứng Q7, Q6, Q3, Q1 v Q0 phải ược ặt ở
mức thấp v cÆc ngı ra Q5, Q4 v Q2 giữ ở mức cao. Do ta cần gửi byte 34H ra bộ ệm dữ liệu
nối tiếp. Dữ liệu 34H ược gọi l mª k tự của k tự 2 . Bảng mª k tự cho cÆc k tự từ 0 ến F như sau: K tự D7 D6 D5 D4 D3 D2 D1 D0 Mª k tự b g c dp e f a d 0 0 1 0 1 0 0 0 0 50H 1 0 1 0 1 1 1 1 1 5FH 2 0 0 1 1 0 1 0 0 34H 3 0 0 0 1 1 1 0 0 1CH 4 0 0 0 1 1 0 1 1 1BH 5 1 0 0 1 1 0 0 0 98H 6 1 0 0 1 0 0 0 0 90H 7 0 1 0 1 1 1 0 1 5DH 8 0 0 0 1 0 0 0 0 10H 9 0 0 0 1 1 0 0 1 19H A 0 0 0 1 0 0 0 1 11H B 1 0 0 1 0 0 1 0 92H C 1 1 1 1 0 0 0 0 F0H D 0 0 0 1 0 1 1 0 16H E 1 0 1 1 0 0 0 0 B0H F 1 0 1 1 0 0 0 1 B1H
Chœ : o ể l m cho tất cả cÆc oạn sÆng ta ấn nœt SW
o ể l m cho tất cả cÆc oạn tắt ta døng lệnh MOV SBUF, #FF Hªy viết cÆc lệnh ể:
a) Hiển thị cÆc k tự 0 , 1 , 2 , 3 , v 4 từ phải sang trÆi. C nhận xØt g về kết quả hiển thị?
b) Hiển thị k tự A trŒn bảng hiển thị?
CÆc vấn ề sau (4.6 ến 4.14) l cÆc chương tr nh tiŒu biểu ể giao tiếp với cÆc thiết bị ầu
cuối (terminal) hoặc cÆc thiết bị nối tiếp khÆc với mÆy vi t nh. Giả sử cổng nối tiếp ược
khởi ộng ở mode UART 8 bit v tốc ộ baud ược cung cấp bởi Timer 1.

4.6 Viết chương tr nh con OUTSTR gửi 1 chuỗi k tự ASCII kết thœc bởi k tự NULL ến thiết bị
nối tiếp nối với cổng nối tiếp của 8051 . Giả sữ chuỗi mª ASCII ở trong bộ nhớ mª bŒn ngo
i v chương tr nh gọi ặt ịa chỉ của chuỗi trong DPTR trước khi gọi OUTSTR. Chuỗi k tự kết
thœc bằng NULL l chuỗi byte ASCII kết thœc với byte 00H.
4.7 Viết chương tr nh con INLINE nhập 1 d ng cÆc mª ASCII từ thiết bị nối với cổng nối toếp
của 8051 v ặt n v o bộ nhớ dữ liệu nội bắt ầu ở 50H. Giả sử d ng kết thœc bằng CR
(carriage return). Đặt mª CR v o trong bộ ệm d ng cøng với cÆc mª khÆc v rồi kết thœc bộ ệm bằng byte NULL (00H).
4.8 Viết chương tr nh gửi liŒn tục bộ mẫu tự từ a tới z ến thiết bị gắn v o cổng nối tiếp, døng
chương tr nh con OUTCHR (c sẵn ) . lOMoARcPSD| 36991220
4.9 Giả sử cho trước chương tr nh con OUTCHR, hªy viết chương tr nh gửi liŒn tục bộ ASCII
hiển thị ược (cÆc mª từ 20H ến 7EH) ến thiết bị ang gắn v o cổng nối tiếp của 8051. 4.10
Sửa ổi lại lời giải của b i tập trŒn ể treo v cho xuất tiếp lại ra m n h nh døng cÆc mª XOFF
v XON nhận ược từ b n ph m. Tất cả cÆc mª khÆc bị bỏ qua (chœ : XOFF = CONTROL-S = 13H v XON=CONTROL-Q=11H).
4.11 Giả sử cho trước cÆc chương tr nh con INCHAR v OUTCHR, hªy viết chương tr nh nhập
cÆc k tự từ b n ph m v v hiển thị chœng lại trŒn m n h nh, ổi những k tự chữ in thường sang chữ in hoa.
4.12 Giả sử cho trước cÆc chương tr nh con INCHAR v OUTCHR, hªy viết chương tr nh nhập
cÆc k tự từ thiết bị ang gắn ở cổng nối tiếp 8051 v hiển thị chœng lại với dấu chấm ( . ) sẽ
thay thế cho cÆc k tự iều khiển (c cÆc mª ASCII 00H ến 1FH, v 7FH).
4.13 Giả sử cho trước chương tr nh con OUTCHR, hªy viết chương tr nh x a m n h nh VDT ang
gắn ở cổng nối tiếp 8051 v rồi gửi tŒn của bạn ến VDT 10 lần trŒn 10 d ng. Chức
năng x a VDT ược thực hiện bằng cÆch truyền CONTROL-Z với nhiều terminal hoặc
chuỗi k tự thoÆt [2J trŒn terminal c hỗ trợ ANSI (American National Standards
Institute). Sử dụng cả 2 phương phÆp trong b i giải.
4.14 H nh 3.32 trong sÆch minh họa kỹ thuật mở rộng khả năng xuất của 8051. Giả sử với cấu
h nh như vậy, hªy viết chương tr nh khởi ộng cổng nối tiếp với chế ộ thanh ghi dịch v rồi
Ænh xạ nội dung của nhớ nội 20H ra 8 ngı ra phụ, mỗi gi y thực hiện 10 lần.
Phần 5 Ngắt (Interrupt)
5.1 Cho biết nhiệm vụ của bit SMOD trong 8051? Hªy nŒu cÆc bước ể thiết lập Timer døng
ngắt ể tr hoªn (l m trễ) một khoảng thời gian nhất ịnh?
5.2 Hªy viết cÆc lệnh ể: a) cho phØp ngắt nối tiếp, ngắt timer 0 v ngắt phần cứng bŒn ngo i 1;
v b) cấm ngắt timer 0; v c) cấm tất cả cÆc ngắt chỉ bằng 1 lệnh.
5.3 Sau khi thực thi oạn chương tr nh sau: MOV IE, #99H MOV IP, #10H
a) CÆc ngắt n o ược cho phØp?
b) Ngắt n o c ưu tiŒn cao nhất?
5.4 Thứ tự phục vụ cÆc ngắt nhứ thế n o nếu tất cả cÆc ngắt ược cho phØp xảy ra ồng thời?
5.5 Trong 1 hệ døng 8051 cho phØp cÆc ngắt /INT0, /INT1 v Timer 1 v cấm tất cả cÆc ngắt
khÆc. Nếu ngắt /INT1 t ch cực th sẽ tạo ra s ng vu ng 500 Hz ở ch n P1.0 (døng ngắt
Timer 1). S ng vu ng n y sẽ chấm dứt khi /INT0 t ch cực. Viết oạn chương tr nh khởi tạo trị
cho cÆc ngắt v ợi ngắt trong chương tr nh ch nh v cÆc chương tr nh ISR.
5.6 Viết chương tr nh lấy liŒn tục dữ liệu 8 bit từ P0 v gửi n ến P1 trong khi ồng thời tạo ra s
ng vu ng c chu kỳ 200 s ở ch n P2.1 (sử dụng Timer 0 ể tạo s ng vu ng)
5.7 Giả sử ch n /INT1 ược nối v o c ng tắc b nh thường ở mức cao, khi ch n n y xuống mức
thấp th n sẽ l m sÆng Łn LED. ĐŁn LED n y ược nối v o ch n P1.3 v b nh thường th tắt,
khi c mức thấp ở /INT1 th n sẽ sÆng trong khi /INT1 vẫn ở mức thấp.
5.8 Giả sử ch n /INT1 ược nối v o bộ tạo xung, viết chương tr nh nhận biết khi c cạnh xuống
của xung th sẽ ặt bit P1.3 lŒn 1 v l m cho Łn LED gắn ở P1.3 sÆng (vẽ mạch cứng).
Nghĩa l LED sẽ sÆng (ON) v tắt (OFF) cøng với tốc ộ của xung ưa v o ch n /INT1.
5.9 Viết chương tr nh 8051 lấy dữ liệu từ P1 v gửi n ến P2 liŒn tục, trong khi dữ liệu ến từ
cổng nối tiếp ược gửi ến P0. Giả sử tốc ộ baud l 9600.
5.10 Tạo s ng vu ng 1 kHz ở ch n P1.7 døng ngắt.
5.11 Tạo xung vu ng 7 kHz với chu kỳ nhiệm vụ 30% ch n P1.6 døng ngắt. lOMoARcPSD| 36991220
5.12 a) Viết chương tr nh phục vụ ngắt cho timer 0 ể tạo xung vu ng 500Hz c chu kỳ nhiệm vụ l 70% ở ch n P1.0
b) Tương tự a) nhưng chu kỳ nhiệm vụ l 40% v xung n y chỉ tồn tại trong 10s.
5.13 Hªy ghØp chương tr nh tạo s ng vu ng bằng ngắt của timer (trang 218) với chương tr nh
Xuất k tự bằng ngắt (trang 221) th nh 1 chương tr nh.
5.14 Hªy viết lại chương tr nh Xuất k tự bằng ngắt (trang 221) sao cho gửi 1 k tự/1 gi y (hướng
dẫn: sử dụng timer v xuất k tự trong ISR của timer). Phần 6 Assembler
6.1 Hªy viết lại cÆc lệnh sau với dạng dữ liệu tức thời l nhị ph n: a) MOV A, #255 c) MOV A, #1AH b) MOV A, #11Q d) MOV A, # A
6.2 C g sai trong lệnh sau: ORL 80H, #F0H
6.3 Hªy t m cÆc k hiệu n o bị ặt tŒn sai: ?byte.bit @GOOD_bye 1ST_FLAG MY_PROGRAM
6.4 Hªy viết cÆc lệnh tương ương cÆc lệnh sau với dữ liệu tức thời l trị số hex: a) MOV DPTR, # 0 EQ 48 c) MOV DPTR, #HIGH AB b) MOV DPTR, # 1 d) MOV DPTR, #NOT (275 MOD 256)
6.5 Sự khÆc biệt giữa DB v DW?
6.6 Hªy ghi cÆc giÆ trị nhớ của oạn sau: ORG 0FH DW 5 SHL 4 DB 65535 DW 0
6.7 Viết ịnh nghĩa 1 macro døng ể iền 1 hằng số dữ liệu v o 1khối trong bộ nhớ dữ liệu ngo i.
Truyền ịa chỉ bắt ầu, chiều d i, v hằng số dữ liệu cho cÆc tham số macro.
6.8 Viết ịnh nghĩa cho cÆc macro sau:
JGE nhảy ến LABEL nếu thanh ghi t ch lũy c trị >= VALUE
JLT nhảy ến LABEL nếu thanh ghi t ch lũy c trị < VALUE
JLE nhảy ến LABEL nếu thanh ghi t ch lũy c trị <= VALUE
JOR nhảy ến LABEL nếu thanh ghi t ch lũy c trị ngo i tầm của oạn từ LOWER ến UPPER.
6.9 Viết ịnh nghĩa 1 macro c tŒn l CJNE_DPTR m sẽ nhảy ến nhªn LABEL nếu con trỏ dữ
liệu kh ng chứa giÆ trị VALUE. Định nghĩa macro sao cho nội dung của tất cả cÆc thanh
ghi v cÆc nhớ kh ng bị ảnh hưởng.