VXL _BTOTHK–1/8
ĐHBK Tp HCM – Khoa ĐĐT
BMĐT
GVPT: H Trung M
Bài tp ôn thi hc k môn Vi x lý– AY1112-S2
Chú ý:
Trong các bài tp sau gi s dùng 8051 vi thch anh (XTAL) là 12 MHz
H s có du là h 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 biết cách định địa ch ca các toán hng trong mi lnh ca chương trình sau:
MOV R0, #40H
INC SP
MOV A, @R0
MOV ACC.0, C
DJNZ R1, $
Viết mã máy cho đon chương trình trên.
2. 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
3. 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à ô nh trong RAM ni có địa ch là 02H sau khi 8051 thc thi lnh “add A, R2”:
4. Tính độ di (offset) (theo s hex) cho các lnh có mã máy có byte ghi “??” trong đon chương trình sau:
VXL _BTOTHK–2/8
5. 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 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.
6. Viết chương trình con hp ng tìm phn t nh nht ca 1 mng các s 8 bit không du trong RAM d liu
bên ngoài vi s phn t N (N 255) ca mng trong ô nh 7FFFH và phn t đầu tiên ca mng có địa ch
8000H. Giá tr ca phn t nh nht được đặt trong R6 và ch s ca nó (bt đầu t ch s 0) được đặt trong
R7. Khi áp dng cùng chương trình này cho mng các s 8 bit có du thì ta phi chnh sa hoc thêm các lnh
nào?
7. 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.
8. Viết chương trình con thc hin phép toán AND 8 bit thanh ghi A và cho kết qu trong c C vi các cách
sau:
a) Áp dng lnh CJNE để tìm kết qu AND.
b) Áp dng lnh ANL cho biến Boole
ng dng chương trình con trên để tìm:
i) AND 4 bit thp ca cng P1 và kết qu xut ra P1.4
ii) AND 16 bit ca DPTR và kết qu để c C.
9. 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.
10. 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.
11. 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
12. 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.
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.
VXL _BTOTHK–3/8
Á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).
c) Viết chương trình con thc hin tr 2 s không du nhiu byte nhiu byte: N1 = N1 – N2.
13. 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).
14. Tn dng chương trình (bng hp ng hoc C) mô phng b đếm lên/xung 8 bit ngõ ra nh phân để
phng b đếm lê/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)
15. Viết chương trình tính tr trung bình (không du) cùa các s trong các thanh ghi t R1 đến R4 và kết qu
được đặt trong thanh ghi A (thương s) và B (dư s). Chương trình này được viết theo các cách sau:
a) Dùng cách định địa ch thanh ghi cho các thanh ghi R1..R4.
b) Dùng cách định địa ch gián tiếp cho các thanh ghi R1..R4.
16. Viết chương trình con tính giai tha cùa 1 s trong thanh ghi R0 ( 5) bng các cách sau:
a) Đệ qui (chương trình con gi chính nó)
b) Tra bng bng MOVC
17. 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
18. 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
19. 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)
VXL _BTOTHK–4/8
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.
20. 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.
21. 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
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.
22. 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
23. Viết chương trình con đếm s bit 0 trong thanh ghi R2 vi kết qu đặt trong thanh ghi R3. Áp dng
chương trình con này đếm s bit 1 trong thanh ghi R2.
24. Viết chương trình đọc t 32 byte t cng ni tiếp và ct vào 32 byte trong RAM ni t địa ch 20H đến
3FH. Gi s cng ni tiếp có tc độ baud là 4800. Thc hin công vic bng các cách sau:
a) Hi vòng vi kim tra c RI.
b) Ngt cng ni tiếp.
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).
Nếu P0.0 = 0 thì các bit P1.2..1.0 có tr nh phân thay đổi t ln nht đến nh nht và lp li (mi
tr được duy trì trong 0.25s).
26. Hãy thiết kế mch nhp nháy LED (3 LED vi 3 R hn dòng được gn vào các chân P1.2..P1.0) vi quy
lut sau:
Nếu P1.3=0 thì P1.2..1.0=000, 001, 010, 011, 100, 101, 110, 111 và lp li (thi gian tr gia 2 s
đếm là 200ms)
Nếu P1.3=1 thì P1.2..1.0=000, 001, 011, 010, 110, 111, 101, 100 và lp li (thi gian tr gia 2 s
đếm là 200ms)
Hãy viết chương trình bng hp ng hoc C cho mch này.
27. a) Thiết kế mch dùng 8051 mô phng b đếm lên/xung BCD 2 ký s vi hin th LED 7 đon có dn
kênh sau:
Kết ni vi 8051 theo qui ước sau:
P1 được ni vi các chân a đến g và dp ca mch hin th LED.
P2.0 và P2.1 được ni vi các chân /DIGIT1 và /DIGIT2 ca mch hin th LED.
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. (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 (ưu tiên thp nht)
b) Sa li chương trình a) vi chân RESET dùng chân ngt ngoài 0 (/INT0).
28. Thiết kế mch định thì đơn gin vi hin th trên LED 7 đon (như mch câu trên) cho thy s đếm t 0s
đến 60s. Mch hot động theo nguyên tc sau:
Khi có cnh xung tín hiu STOP/RUN (được ni vào chân ngt ngoài /INT0) thì s hin th thi
gian t 0 đến 60s và lp li (chế độ RUN), và khi có cnh xung STOP/RUN ln na thì nó s dng
(chế độ STOP) vi s hin th đứng yên không tăng na.
Sau khi reset h thng thì mch chế độ STOP và hin th 0s.
Hãy viết chương trình hp ng cho mch này vi định thì 1s dùng ngt timer 0 và chế độ STOP/RUN dùng
ngt ngoài /INT0 kích cnh xung.
29. Cho trước mch hin th sau:
Các kết ni ngoi vi vi 8051 như sau: