VXL _BTOT_AY1213-S2–1/8
ĐHBK Tp HCM – Khoa ĐĐT
BMĐT
GVPT: H Trung M
Bài tp ôn thi hc k – Môn hc: Vi x lý – AY1213-S2
Chú ý:
Trong các bài tp sau gi s dùng 8051 vi thch anh (XTAL) là 12 MHz
H thng s có du là h thng có s âm được biu din bng s bù 2.
Khi đềi ch nói viết chương trình thì ngm hiu là viết bng hp ng 8051.
1) Cho trước mch gii mã địa ch ca h thng dùng VXL 8051:
a) Xác định vùng địa ch ca các SRAM
b) Viết các lnh 8051 để sao chép 10 byte t vùng nhđịa ch đầu là địa ch đầu ca SRAM th nht
(U1) đến vùng nhđịa ch đầu là địa ch đầu ca là địa ch đầu ca SRAM th hai (U2)
2) Cho trước mch giao tiếp 8051 vi SRAM 4KB:
VXL _BTOT_AY1213-S2–2/8
a) Viết đon chương trình sao chép 10 byte t b nh chương trình bt đầu t địa ch 0100H đến SRAM
bt đầu t địa ch 0240H bng MOVX vi: i) DPTR, và ii) R0.
b) Thay vì dùng chân ALE ni vào chân LE mch cht, người ta ni chân P3.0 đến chân LE ca mch
cht. Khi đó hãy viết các lnh để sao chép 1 byte địa ch 0375H vào thanh ghi R7.
c) Thay vì dùng cng P2 ni đến các đường địa ch A8–A11 ca SRAM, người ta dùng cng P1 thay cho
cng P2. Khi đó hãy viết các lnh để sao chép 1 byte địa ch 0758H vào thanh ghi R7.
3) Thiết kế mch giao tiếp b nh cho 8051 vi b nh chương trình bên ngoài ROM 16KB và b nh d liu
SRAM 32KB đều có vùng địa ch bt đầu t 0000H. Mch này được xây dng t 1 IC gii mã 74138, 2 ROM
8Kx8 và 4 SRAM 8Kx8.
4) Cho biết ni dung ca thanh ghi A sau khi thc thi mi đon chương trình sau:
(a) (b) (c) (d) (e)
MOV 20h,#75h
MOV R1,#20H
MOV A,@R1
ANL a,#0FH
MOV R1,#2
MOV A,1
ORL A,#40H
XRL A,#0FH
MOV A
,
#0FFH
CLR C
MOV ACC.7,C
CPL C
MOV ACC.0,C
X
RL A,ACC
ADD A
,
#0F7H
SETB C
MOV R1,#89H
ADDC A,R1
MOV A,#56H
SWAP A
RR A
RR A
5) Cho biết ni dung ca các thanh ghi A, R0, R1, R2, R3, SP, PC, các ô nh trong ROM có địa ch là 0001H
và 0A8FH, và các ô nh ca RAM ni có địa ch là 01H, 02H và 03H sau khi 8051 thc thi lnh “add A, R2”:
Dòng Địa ch Mã máy Lnh
1 0000 ORG 0
2 0000 020A80 LJMP Start
3 0A80 ORG 0A80H
4 0A80 758170 Start: MOV SP,#70H
5 0A83 7A1C MOV R2,#1CH
6 0A85 7428 MOV A,#28H
7 0A87 78C7 MOV R0,#0C7H
8 0A89 C002 PUSH 2
9 0A8B C000 PUSH 0
10 0A8D 2A ADD A, R2
11 0A8E D001 POP 1
12 0A90 29 ADD A, R1
13 0A91 D000 POP 0
14 0A93 EB MOV A, R3
15 0A94 28 ADD A, R0
16 0A95 80FE SJMP $
17 0A97 END
6) Cho trước bng sau:
Địa ch
ROM (hex) Mã máy (hex) Lnh 8051 Cách định địa ch ca toán hng
th nht th hai
O
RG 0
MOV R0,#30H
MOV R1,#10
C
LR A
MOV R2,A
MOV R3,A
Loop: MOV A,@R0
J
B ACC.7,Neg
I
NC R3
S
JMP Cont
Neg:
I
NC R2
Cont:
I
NC R0
D
JNZ R1,Loop
S
JMP $
ND
a) Đin vào các ch trng trong ct địa ch ROM chương trình, ct mã máy và ct các cách địa ch.
b) Cho biết đon chương trình trên làm gì và vai trò ca các thanh ghi R0, R1, R2, và R3 là gì?
VXL _BTOT_AY1213-S2–3/8
7) Cho biết ni dung ca SP và RAM ni sau khi thc thi đon chương trình sau:
MOV SP,#49h
MOV R1,#5BH
PUSH 1
ORL 48H,#0A5h
XRL 4AH,#63h
POP 00h
PUSH 48H
Địa ch
RAM Trước khi thc thi Sau khi thc thi
SP 07H
4AH 08H
49H 07H
48H 06H
00H 05H
8) Hãy cho biết giá tr ca SP và ni dung ca stack sau khi thc thi mi dòng lnh sau:
ORG 0BH
LCALL DELAY
SJMP $
ORG 300H
DELAY: MOV R5, #0FFH
AGAIN: DJNZ R5, AGAIN
RET
9) a) Viết chương trình hp ng để sao chép khi d liu 10 byte (ca RAM ngoài) có địa ch đầu là 8020H
đến khi d liu (RAM ngoài) có địa ch đầu là 8040H.
b) Viết chương trình hp ng để sao chép khi d liu 10 byte (ca RAM ni) có địa ch đầu là 20H đến
khi d liu ( RAM ngoài) có địa ch đầu là 8040H.
10) Hãy hoàn tt chương trình sau da theo các chú thích đi kèm ti mi lnh
. . . . . . . ; chương trình bt đầu t địa ch 100H
start: . . . . . . . ; A 9BH
. . . . . . . ; R0 32H vào thanh ghi A
. . . . . . . ; A A + R0
. . . . . . . ; DPTR 2010H
. . . . . . . ; ct A vào ô nh 2010H RAM ngoài
here: . . . . . . . ; lp vòng ti đây
END ; Kết thúc chương trình
11) Viết chương trình con hp ng hoc C để so sánh 2 s 8 bit X và Y trong các thanh ghi R5 và R6 tương
ng. Kết qu so sánh được đặt trong R7 theo quy ước sau:
X < Y thì R7 = 01H
X = Y thì R7 = 02H
X > Y thì R7 = 04H
C F0 (trong PSW) dùng để chn so sánh s không du (khi F0=0) hay có du (khi F0=1).
Áp dng chương trình con trên để so sánh 2 s 16 bit không du đặt trong RAM ni vi byte thp địa ch
thp, s th nht bt đầu t địa ch 30H và s th hai bt đầu t 40H.
12) Viết chương trình con thc hin phép toán OR 8 bit thanh ghi A và cho kết qu trong c C vi các cách
sau:
a) Áp dng lnh JZ hoc JNZ để tìm kết qu OR.
b) Áp dng lnh ORL cho biến Boole
ng dng chương trình con trên để tìm:
i) OR 4 bit thp ca cng P1 và kết qu xut ra P1.4
ii) OR 16 bit ca DPTR và kết qu để c C.
13) Viết chương trình con thc hin phép toán XOR 8 bit thanh ghi A và cho kết qu trong c C vi các
cách sau:
a) Tn dng c parity P để tìm kết qu XOR.
b) Đếm s bit 1 trong thanh ghi A để tìm kết qu XOR.
ng dng chương trình con trên để tìm:
i) XOR 4 bit thp ca cng P1 và kết qu xut ra P1.4
ii) XOR 16 bit ca DPTR và kết qu để c C.
14) a) Viết chương trình con thc hin cng 2 s không du nhiu byte. Gi s trước khi gi chương trình con
này thì:
R0 cha địa ch đầu ca toán hng th nht (trùng vi địa ch ca byte thp nht) N1.
VXL _BTOT_AY1213-S2–4/8
R1 cha địa ch đầu ca toán hng th hai (trùng vi địa ch ca byte thp nht) N2.
R2 cha s byte trong mi toán hng (c 2 toán hng có cùng chiu dài).
Toán hng nhiu byte được để trong RAM ni ca 8051 vi sp th t byte theo “little endian”.
Kết qu ca phép tính được ct li vào cùng vùng nh ca toán hng 1, nghĩa là tính N1 = N1 + N2.
Áp dng tính cng 2 toán hng 5 byte có các địa chĩ đầu là 20H và 30H.
b) Tương t a) nhưng thc hin cng 2 s BCD không du nhiu byte vi R2 cha tr s 2k (k > 0).
Viết chương trình con thc hin tr 2 s không du nhiu byte nhiu byte: N1 = N1 – N2.
15) Viết chương trình con thc hin các phép tính sau theo ni dung ca thanh ghi R0 (nếu R0 >7 thì R3 = 0)
R0 Phép toán R0 Phép toán
0 R3 = R1 + R2 4 R3 = R1 AND R2
1 R3 = R1 – R2 5 R3 = R1 OR R2
2 R3 = R1 * R2 6 R3 = R1 XOR R2
3 R3 = R1 / R2
(ch ly thương s)
7 R3 = NOT(R1)
vi các cách sau:
a) Tn dng lnh CJNE
b) Tn dng lnh JMP @A+DPTR
16) Viết chương trình bng hp ng hoc C để mô phng b đếm lên/xung 8 bit vi ngõ ra 8 bit cng P2.
B đếm này có các chân điu khin sau:
P0.0 = RESET = khi có cnh xung chân này thì ngõ ra P2 là 0. (ưu tiên cao nht)
P0.1 = UP = khi có cnh xung thì giá tr ca P2 được tăng thêm 1 (có ưu tiên nhì)
P0.3 = DOWN = khi có cnh xung thì giá tr ca P2 được gim đi 1 (ưu tiên thp nht)
Sa li chương trình vi chân RESET dùng ngt ngoài 0 (/INT0).
17) Tn dng chương trình (bng hp ng hoc C) mô phng b đếm lên/xung 4 bit ngõ ra nh phân để
phng b đếm lên/xung 4 bit có cho phép np tr đầu và tr cui ca b đếm (gi s giá tr đầu là 4 bit cao
ca P1 và giá tr cui là 4 bit thp ca P1, giá tr đầu luôn luôn nh hơn giá tr cui). B đếm này có các chân
điu khin sau:
P0.0 = RESET = khi có cnh xung chân này thì np tr đầu và cui vào counter để cho phép tr
bt đầu đếm là giá tr đầu. (có ưu tiên cao nht)
P0.1 = UP = khi có cnh xung thì giá tr ca P2 được tăng thêm 1 (có ưu tiên nhì)
P0.3 = DOWN = khi có cnh xung thì giá tr ca P2 được gim đi 1 (có ưu tiên thp nht)
18) Xét 1 mch 8051 vi các công tc: SW1 được ni vi P0.0, SW2 ni vi P0.1; và các LED được ni:
LED 1 được ni vi P0.2, LED 2 được ni vi P0.3. Gi s LED có VLED=2V và ILED=10mA. Hãy v sơ đồ
mch và viết chương trình hp ng hoc C cho mch này. Qui lut hot động ca mch như sau:
P0.1 P0.0 LED 2 LED 1
0 0 Tt Tt
0 1 Tt Sáng
1 0 Sáng Tt
1 1 Nhp nháy chu k 1s Nhp nháy chu k 1s
ngược pha vi LED 2
19) Cho trước chương trình con Delay sau:
Delay: MOV R1,#255
L1: MOV R0,#255
L2: DJNZ R0, L2
DJNZ R1, L1
RET
a) Hãy ghi chú thích s chu k máy (MC) cho mi lnh và t đó suy ra thi gian tr ca CT con này.
b) Nếu mun làm tr 100 ms thì ta phi np cho R1 giá tr là bao nhiêu?
c) Hãy viết li chương trình con làm tr 100 ms dùng Timer (không dùng ngt Timer).
20) Chương trình con sau to tr 1 giây vi XTAL=12MHz.
DELAY: MOV R0, #0
MOV R1, #0
MOV R2, #8
LOOP: DJNZ R0, LOOP
DJNZ R1, LOOP
VXL _BTOT_AY1213-S2–5/8
DJNZ R2, LOOP
RET
a) Nếu s dng XTAL = 6MHz thì phi sa các tham s nào trong chương trình trên để vn có tr 1 giây?
b) Chương trình con trên có sai s bao nhiêu? Hãy sa li chương trên đểđộ chính xác cao nht có th
được.
21) Viết chương trình to sóng vuông (TON=TOFF) chân P1.1 có tn s theo qui tc sau: 500 Hz nếu P1.0 = 0,
100 Hz nếu P1.0 = 1.
Phn to thi gian tr được thc hin bng các cách sau:
a) Bng phn mm (dùng DJNZ và NOP nếu cn).
b) Bng timer0 không dùng ngt.
c) Bng ngt timer0
22) Thiết kế mch 8051 có chc năng sau: (SV t chn bt c chân nào ca cng I/O cho ngõ vào điu khin)
Các ngõ ra sáng ln lượt liên tc theo qui lut sau khi ngõ vào điu khin bng 0
Đèn LED xanh sáng trong 5 s trong khi các đèn LED khác tt.
Đèn LED vàng sáng trong 2 s trong khi các đèn LED khác tt..
Đèn LED đỏ sáng trong 8 s trong khi các đèn LED khác tt..
Chđèn LED vàng sáng nhp nháy vi chu k 2 s khi ngõ vào điu khin bng 1.
23) Cho trước mch sau vi các chân ra 1Y1 ni vi đon a,1Y2 ni vi đon b,..,2Y3 ni vi đon g ca
LED 7 đon cathod chung vi các R hn dòng là 330.
Mch hot động như sau: (ưu tiên cao hơn P2.0)
Khi có cnh xung P2.0 thì hin ln lượt t 0 đến 9 vi thi gian hin 1 s là 1s và lp li.
Khi có cnh xung P2.1 thì hin ln lượt t 0 đến F vi thi gian hin 1 s là 1s và lp li.
a) Hãy viết chương trình hp ng hoc C cho mch này.
b) Viết li chương trình trên dùng ngt ngoài 0 và ngt ngoài 1 thay cho các tín hiu đưa vào P2.0 và
P2.1.
24) Viết chương trình tìm giá tr ca y (trong thanh ghi R7) bng 2 cách: dùng các lnh MUL và lnh MOVC,
vi giá tr y cn tính là
a) y = x2+ 2x + 5 vi x (trong thanh ghi A) có giá tr t 0 đến 9
b) y = x2 – 2x + 3 vi x (trong thanh ghi A) có giá tr t 0 đến 9
25) Mt mch dùng 8051 để to hiu ng trên LED vi các kết ni LED và công tc/khóa như sau:
Các LED đươc ni vào P1.0, P1.1 và P1.2, còn công tc được ni vào P0.0. Gi s đin tr kéo lên P0.0
là 10K và các đin tr hn dòng cho LED là 330.
Viết chương trình hp ng hoc C để thc hin công vic sau:
Nếu P0.0 = 1 thì các bit P1.2..1.0 có tr nh phân thay đổi t nh nht đến ln nht và lp li (mi
tr được duy trì trong 0.25s).