Bài tập vi xử lý (họ vi điều khiển 8051) - Lê Chí Thông (Có đáp án)

Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
ĐÁP ÁN BÀI TẬP VI XỬ LÝ (HỌ VI ĐIỀU KHIỂN 8051)  
1. CẤU TRÚC PHẦN CỨNG - GIẢI MàĐỊA CHỈ  
1.1 Sꢀ dꢁng 1 vi mꢂch 74138 và các cꢃng cꢄn thiꢅt ꢆꢇ thiꢅt kꢅ mꢂch giꢈi mã ꢆꢉa chꢊ tꢂo ra các tín  
hiꢋu chꢌn chip tưꢍng ꢎng các vùng ꢆꢉa chꢊ sau:  
Tín hiꢋu chꢌn chip  
Vùng ꢆꢉa chꢊ  
ꢏꢐc tính truy xuꢑt  
PSEN  
0000H - 3FFFH  
CS0  
CS1  
CS2  
4000H - 7FFFH  
6000H - 7FFFH  
PSEN  
RD,WR  
8000H - 87FFH  
8800H - 8FFFH  
CS3  
CS4  
RD  
WR  
1.2  
hiꢋu ch  
S
ꢀ
d
ꢁ
ng 1 vi m  
ꢂ
ch 74138 và các c  
ꢎ
ꢃ
ng cꢄ  
sau:  
n thi  
ꢅ
t
ꢆꢇ thiꢅt kꢅ mꢂch giꢈi mã ꢆꢉa chꢊ tꢂo ra các tín  
ꢌ
n chip tưꢍng  
ng các vùng ꢆꢉa chꢊ  
Tín hi  
ꢋ
u ch n chip Vùng ꢆꢉa ch  
ꢌ
ꢊ
ꢏꢐc tính truy xu  
PSEN  
ꢑt  
9800H - 9BFFH  
9800H - 9BFFH  
CS0  
CS1  
RD,WR  
9C00H - 9DFFH  
9E00H - 9EFFH  
CS2  
CS3  
RD,WR  
RD,WR  
1.3 Ch  
ꢊ
tín hi u ch  
dùng m  
ꢌ
ꢒ
t vi m  
ꢂ
ch 74138 (không dùng thêm c  
ꢎ
ꢃng), thiꢅt kꢅ mꢂch giꢈi mã ꢆꢉa chꢊ tꢂo ra mꢒt  
ng t ꢆꢉa ch F000H-F3FFH.  
ꢋ
n chip /CS tưꢍng  
ꢄ
m
ꢊ
2. SỬ DỤNG TẬP LỆNH  
Truy xuất RAM nội  
2.1 Vi  
ꢆꢉa ch  
ꢅ
t CT ghi 40H vào ô nh  
ꢓ
ꢓ 30H cꢔa RAM nꢒi theo 2 cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc tiꢅp và ꢆꢉnh  
ꢊ
ô nh gián tiꢅp).  
Cách 1: Định địa chỉ trực tiếp  
ORG 0000H  
MOV 30H,#40H  
END  
Cách 2: Định địa chỉ gián tiếp  
ORG 0000H  
MOV R0,#30H  
MOV @R0,#40H  
END  
Đáp án bài tập Vi Xử Lý 8051 - Trang 1/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
2.2 Viꢅt CT xóa ô nhꢓ 31H cꢔa RAM nꢒi theo 2 cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô  
nhꢓ gián tiꢅp).  
HD: Xóa là ghi giá trị 0.  
2.3 Viꢅt CT ghi nꢒi dung thanh ghi A vào ô nhꢓ 32H cꢔa RAM nꢒi theo 2 cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ  
trꢕc tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
CÁCH 1:  
ORG 0000H  
MOV 32H,A  
END  
CÁCH 2:  
ORG 0000H  
MOV R0,#32H  
MOV @R0,A  
END  
2.4 Viꢅt CT ꢆꢌc ô nhꢓ 33H cꢔa RAM nꢒi vào thanh ghi A theo 2 cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc tiꢅp  
và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
CÁCH 1:  
ORG 0000H  
MOV A,33H  
END  
CÁCH 2:  
ORG 0000H  
MOV R0,#33H  
MOV A,@R0  
END  
2.5 Viꢅt CT chuyꢇn dꢖ liꢋu ô nhꢓ 34H cꢔa RAM nꢒi vào ô nhꢓ 35H cꢔa RAM nꢒi theo 2 cách  
(ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
CÁCH 1:  
ORG 0000H  
MOV 35H,34H  
END  
CÁCH 2:  
ORG 0000H  
MOV R0,#34H  
MOV A,@R0  
INC R0  
MOV @R0,A  
END  
Truy xuất RAM ngoài  
2.6 Viꢅt CT ghi 40H vào ô nhꢓ 0030H cꢔa RAM ngoài.  
Đáp án bài tập Vi Xử Lý 8051 - Trang 2/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
ORG 0000H  
MOV A,#40H  
MOV DPTR,#0030H  
MOVX @DPTR,A  
END  
2.7 Viꢅt CT xóa ô nhꢓ 0031H cꢔa RAM ngoài.  
HD: Ghi giá trị 0.  
2.8 Viꢅt CT ꢆꢌc ô nhꢓ 0032H cꢔa RAM ngoài vào thanh ghi A.  
ORG 0000H  
MOV DPTR,#0032H  
MOVX A,@DPTR  
END  
2.8 Viꢅt CT ghi nꢒi dung thanh ghi A vào ô nhꢓ 0033H cꢔa RAM ngoài.  
ORG 0000H  
MOV DPTR,#0033H  
MOVX @DPTR,A  
END  
2.10 Viꢅt CT chuyꢇn dꢖ liꢋu ô nhꢓ 0034H cꢔa RAM ngoài vào ô nhꢓ 0035H cꢔa RAM ngoài.  
ORG 0000H  
MOV DPTR,#0034H  
MOVX A,@DPTR  
INC DPTR  
MOVX @DPTR,A  
END  
Truy xuất Port  
2.11 Viꢅt CT xuꢑt 0FH ra Port 1.  
ORG 0000H  
MOV P1,#0FH  
END  
2.12 Viꢅt CT xuꢑt F0H ra Port 2.  
2.13 Viꢅt CT xuꢑt nꢒi dung thanh ghi A ra Port 1.  
ORG 0000H  
MOV P1,A  
END  
2.14 Viꢅt CT nhꢗp tꢘ Port 1 vào thanh ghi A.  
ORG 0000H  
MOV A,P1  
END  
2.15 Viꢅt CT nhꢗp tꢘ Port 1 và xuꢑt ra Port 2.  
Đáp án bài tập Vi Xử Lý 8051 - Trang 3/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
2.16 Viꢅt CT xuꢑt 1 (mꢎc logic cao) ra chân P1.0  
ORG 0000H  
SETB P1.0  
END  
2.17 Viꢅt CT xuꢑt 0 (mꢎc logic thꢑp) ra chân P1.1  
ORG 0000H  
CLR P1.1  
END  
Truy xuất RAM nội, RAM ngoài và Port  
2.18 Viꢅt CT chuyꢇn dꢖ liꢋu ô nhꢓ 40H (RAM nꢒi) ꢆꢅn ô nhꢓ 2000H (RAM ngoài). Làm theo 2  
cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
CÁCH 1:  
ORG 0000H  
MOV A,40H  
MOV DPTR,#2000H  
MOVX @DPTR,A  
END  
CÁCH 2:  
ORG 0000H  
MOV R0,#40H  
MOV DPTR,#2000H  
MOV A,@R0  
MOVX @DPTR,A  
END  
2.19 Viꢅt CT chuyꢇn dꢖ liꢋu ô nhꢓ 2001H (RAM ngoài) vào ô nhꢓ 41H (RAM nꢒi). Làm theo 2  
cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
2.20 Viꢅt CT nhꢗp tꢘ Port 1 vào ô nhꢓ 42H (RAM nꢒi). Làm theo 2 cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc  
tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
CÁCH 1:  
ORG 0000H  
MOV 42H,P1  
END  
CÁCH 2:  
ORG 0000H  
MOV R0,#40H  
MOV @R0,P1  
END  
2.21 Viꢅt CT nhꢗp tꢘ Port 1 vào ô nhꢓ 2002H (RAM ngoài).  
ORG 0000H  
MOV DPTR,#2002H  
Đáp án bài tập Vi Xử Lý 8051 - Trang 4/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
MOV A,P1  
MOVX @DPTR,A  
END  
2.22 Viꢅt CT lꢑy ô nhꢓ 43H (RAM nꢒi) xuꢑt ra Port 1. Làm theo 2 cách (ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ trꢕc  
tiꢅp và ꢆꢉnh ꢆꢉa chꢊ ô nhꢓ gián tiꢅp).  
2.23 Viꢅt CT lꢑy ô nhꢓ 2003H (RAM ngoài) xuꢑt ra Port 1.  
Sử dụng vòng lặp  
2.24 Viꢅt CT xóa 20 ô nhꢓ RAM nꢒi có ꢆꢉa chꢊ bꢙt ꢆꢄu là 30H.  
ORG 0000H  
MOV R0,#30H  
MOV R2,#20  
laplai:  
MOV @R0,#0  
INC R0  
DJNZ R2,laplai  
END  
2.25 Viꢅt CT xóa các ô nhꢓ RAM nꢒi tꢘ ꢆꢉa chꢊ 20H ꢆꢅn 7FH.  
ORG 0000H  
MOV R0,#20H  
laplai:  
MOV @R0,#0  
INC R0  
CJNE R0,#80H,laplai  
END  
2.26 Viꢅt CT xóa 250 ô nhꢓ RAM ngoài có ꢆꢉa chꢊ bꢙt ꢆꢄu là 4000H.  
ORG 0000H  
MOV DPTR,#4000H  
CLR A  
MOV R7,#250  
lap1: MOVX @DPTR,A  
INC DPTR  
DJNZ R7,lap1  
END  
2.27 Viꢅt CT xóa 2500 ô nhꢓ RAM ngoài có ꢆꢉa chꢊ bꢙt ꢆꢄu là 4000H.  
ORG 0000H  
MOV DPTR,#4000H  
CLR A  
MOV R6,#10  
lap2: MOV R7,#250  
Đáp án bài tập Vi Xử Lý 8051 - Trang 5/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
lap1: MOVX @DPTR,A  
INC DPTR  
DJNZ R7,lap1  
DJNZ R6,lap2  
END  
2.28 Viꢅt CT xóa toàn bꢒ RAM ngoài có dung lưꢚng 8KB, biꢅt rꢛng ꢆꢉa chꢊ ꢆꢄu là 2000H.  
HD: 8KB = 8192Byte  
2.29 Viꢅt CT chuyꢇn mꢒt chuꢜi dꢖ liꢋu gꢝm 10 byte trong RAM nꢒi có ꢆꢉa chꢊ ꢆꢄu là 30H ꢆꢅn vùng  
RAM nꢒi có ꢆꢉa chꢊ ꢆꢄu là 40H.  
ORG 0000H  
MOV R0,#30H  
MOV R1,#40H  
MOV R2,#10  
lap: MOV A,@R0  
MOV @R1,A  
INC R0  
INC R1  
DJNZ R2,lap  
END  
2.30 Viꢅt CT chuyꢇn mꢒt chuꢜi dꢖ liꢋu gꢝm 100 byte trong RAM ngoài có ꢆꢉa chꢊ ꢆꢄu là 2000H  
ꢆꢅn vùng RAM ngoài có ꢆꢉa chꢊ ꢆꢄu là 4000H.  
2.31 Viꢅt CT chuyꢇn mꢒt chuꢜi dꢖ liꢋu gꢝm 10 byte trong RAM nꢒi có ꢆꢉa chꢊ ꢆꢄu là 30H ꢆꢅn vùng  
RAM ngoài có ꢆꢉa chꢊ ꢆꢄu là 4000H.  
ORG 0000H  
MOV R0,#30H  
MOV DPTR,#4000H  
MOV R3,#10  
lap: MOV A,@R0  
MOVX @DPTR,A  
INC R0  
INC DPTR  
DJNZ R3,lap  
END  
2.32 Viꢅt CT chuyꢇn mꢒt chuꢜi dꢖ liꢋu gꢝm 10 byte trong RAM ngoài có ꢆꢉa chꢊ ꢆꢄu là 5F00H ꢆꢅn  
vùng RAM nꢒi có ꢆꢉa chꢊ ꢆꢄu là 40H.  
2.33 Cho mꢒt chuꢜi dꢖ liꢋu gꢝm 20 byte liên tiꢅp trong RAM nꢒi, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 20H. Hãy viꢅt  
CT lꢄn lưꢚt xuꢑt các dꢖ kiꢋu này ra Port 1.  
2.34 Giꢈ sꢀ Port 1 ꢆưꢚc nꢞi ꢆꢅn mꢒt thiꢅt bꢉ phát dꢖ liꢋu (ví dꢁ như 8 nút nhꢑn). Hãy viꢅt CT nhꢗn  
liên tiꢅp 10 byte dꢖ liꢋu tꢘ thiꢅt bꢉ phát này và ghi vào 10 ô nhꢓ (RAM nꢒi) liên tiꢅp bꢙt ꢆꢄu tꢘ ô  
nhꢓ 50H.  
ORG 0000H  
Đáp án bài tập Vi Xử Lý 8051 - Trang 6/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
MOV R0,#50H  
MOV R4,#10  
loop: MOV @R0,P1  
INC R0  
DJNZ R4,loop  
END  
Tạo trễ (delay)  
2.35 Viꢅt CT con delay 100ꢟs, biꢅt rꢛng thꢂch anh (xtal) dùng trong hꢋ thꢞng là:  
a. 12 MHz  
Với thạch anh 12MHz thì chu ký máy TM = 1µs. Do đó, 100 µs = 100 TM  
ctcondelay:  
MOV R2,#50  
DJNZ R2,$  
RET  
b. 6 MHz  
Với thạch anh 6MHz thì chu ký máy TM = 2µs. Do đó, 100 µs = 50 TM  
ctcondelay:  
MOV R2,#25  
DJNZ R2,$  
RET  
2.36 Viꢅt CT con delay 100ms, biꢅt rꢛng thꢂch anh (xtal) dùng trong hꢋ thꢞng là:  
a. 12 MHz  
Với thạch anh 12MHz thì chu ký máy TM = 1µs. Do đó, 100 ms = 100000 TM  
ctcondelay:  
MOV R3,#200  
lap: MOV R2,#250  
DJNZ R2,$  
DJNZ R3,#lap  
RET  
b. 11,0592 MHz  
2.37 Viꢅt CT con delay 1s, biꢅt rꢛng thꢂch anh (xtal) dùng trong hꢋ thꢞng là:  
a. 12 MHz  
b. 24 MHz  
Tạo xung  
2.38 Viꢅt CT tꢂo mꢒt xung dưꢍng (  
là 12 MHz.  
) tꢂi chân P1.0 vꢓi ꢆꢒ rꢒng xung 1ms, biꢅt rꢛng xtal  
CÁCH 1:  
ORG 0000H  
Đáp án bài tập Vi Xử Lý 8051 - Trang 7/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
CLR P1.0  
SETB P1.0  
MOV R3,#2  
lap: MOV R2,#250  
DJNZ R2,$  
DJNZ R3,lap  
CLR P1.0  
END  
CÁCH 2:  
ORG 0000H  
CLR P1.0  
SETB P1.0  
ACALL delay1ms  
CLR P1.0  
SJMP ketthuc  
delay1ms:  
MOV R3,#2  
lap: MOV R2,#250  
DJNZ R2,$  
DJNZ R3,lap  
RET  
ketthuc:  
NOP  
END  
2.39 Viꢅt CT tꢂo chuꢜi xung vuông có f = 100 KHz tꢂi chân P1.1 (Xtal 12 MHz).  
ORG 0000H  
lap: CPL P1.1  
NOP  
NOP  
SJMP lap  
END  
2.40 Viꢅt CT tꢂo chuꢜi xung vuông có f = 100 KHz và có chu kꢠ làm viꢋc D = 40% tꢂi chân P1.2  
(Xtal 12 MHz).  
ORG 0000H  
lap: SETB P1.2  
NOP  
NOP  
NOP  
CLR P1.2  
NOP  
Đáp án bài tập Vi Xử Lý 8051 - Trang 8/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
NOP  
NOP  
SJMP lap  
END  
2.41 Viꢅt CT tꢂo chuꢜi xung vuông có f = 10 KHz tꢂi chân P1.3 (Xtal 24 MHz).  
ORG 0000H  
lap: CPL P1.3  
ACALL delay50  
SJMP lap  
delay50:  
MOV R4,#25  
DJNZ R4,$  
RET  
END  
2.42 Viꢅt CT tꢂo chuꢜi xung vuông có f = 10 KHz và có chu kꢠ làm viꢋc D = 30% tꢂi chân P1.3  
(Xtal 24 MHz).  
ORG 0000H  
lap: SETB P1.3  
ACALL delay30  
CLR P1.3  
ACALL delay70  
SJMP lap  
delay30:  
MOV R4,#15  
DJNZ R4,$  
RET  
delay70:  
MOV R4,#35  
DJNZ R4,$  
RET  
END  
2.43 Viꢅt CT tꢂo chuꢜi xung vuông có f = 10 Hz tꢂi chân P1.4 (Xtal 12 MHz).  
2.44 Viꢅt CT tꢂo chuꢜi xung vuông có f = 10 Hz và có chu kꢠ làm viꢋc D = 25% tꢂi chân P1.5 (Xtal  
12 MHz).  
Các phép toán  
2.45 Cho mꢒt chuꢜi sꢞ 8 bit không dꢑu trong RAM nꢒi gꢝm 10 sꢞ bꢙt ꢆꢄu tꢘ ô nhꢓ 30H. Hãy viꢅt  
CT con cꢒng chuꢜi sꢞ này và ghi kꢅt quꢈ vào ô nhꢓ 2FH (giꢈ sꢀ kꢅt quꢈ nhꢡ hꢍn hoꢐc bꢛng 255).  
ORG 0000H  
MOV R0,#30H  
CLR A  
Đáp án bài tập Vi Xử Lý 8051 - Trang 9/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
MOV R2,#10  
lap: ADD A,@R0  
INC R0  
DJNZ R2,lap  
MOV 2FH,A  
END  
2.46 Cho mꢒt chuꢜi sꢞ 8 bit không dꢑu trong RAM nꢒi gꢝm 10 sꢞ bꢙt ꢆꢄu tꢘ ô nhꢓ 30H. Hãy viꢅt  
CT con cꢒng chuꢜi sꢞ này và ghi kꢅt quꢈ vào ô nhꢓ 2EH:2FH (ô nhꢓ 2EH chꢎa byte cao cꢔa kꢅt  
quꢈ và ô nhꢓ 2FH chꢎa byte thꢑp cꢔa kꢅt quꢈ).  
ORG 0000H  
MOV R0,#30H ;địa chỉ bắt đầu  
MOV R2,#10 ;số lần lặp  
CLR A  
;byte thấp của kết quả  
MOV 2EH,#0 ;byte cao của kết quả  
CLR C  
lap: ADD A,@R0  
JNC boqua  
INC 2EH  
boqua:INC R0  
DJNZ R2,lap  
MOV 2FH,A  
END  
2.47 Cho mꢒt chuꢜi sꢞ 16 bit không dꢑu trong RAM nꢒi gꢝm 10 sꢞ bꢙt ꢆꢄu tꢘ ô nhꢓ 30H theo  
nguyên tꢙc ô nhꢓ có ꢆꢉa chꢊ nhꢡ hꢍn chꢎa byte cao và ô nhꢓ có ꢆꢉa chꢊ lꢓn hꢍn chꢎa byte thꢑp. (Ví  
dꢁ: byte cao cꢔa sꢞ 16 bit ꢆꢄu tiên ꢆưꢚc cꢑt tꢂi ô nhꢓ 30H và byte thꢑp cꢔa sꢞ 16 bit ꢆꢄu tiên ꢆưꢚc  
cꢑt tꢂi ô nhꢓ 31H). Hãy viꢅt CT con cꢒng chuꢜi sꢞ này và cꢑt kꢅt quꢈ vào ô nhꢓ 2EH:2FH.  
2.48 Viꢅt CT con lꢑy bù 2 sꢞ 16 bit chꢎa trong R2:R3.  
So sánh  
2.49 Cho hai sꢞ 8 bit, sꢞ thꢎ 1 chꢎa trong (30H), sꢞ thꢎ 2 chꢎa trong (31H). Viꢅt CT con so sánh  
hai sꢞ này. Nꢅu sꢞ thꢎ 1 lꢓn hꢍn hoꢐc bꢛng sꢞ thꢎ 2 thì set cꢢ F0, nꢅu ngưꢚc lꢂi thì xóa cꢢ F0.  
ORG 0000H  
MOV A,30H  
CJNE A,31H,ke  
JNC lonhoacbang  
CLR F0  
hoac CJNE A,31H,$+3  
JNC lonhoacbang  
ke:  
SJMP tiep  
lonhoacbang:  
SETB F0  
tiep: NOP  
END  
Đáp án bài tập Vi Xử Lý 8051 - Trang 10/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
2.50 Cho hai sꢞ 16 bit, sꢞ thꢎ 1 chꢎa trong (30H):(31H), sꢞ thꢎ 2 chꢎa trong (32H):(33H). Viꢅt CT  
con so sánh hai sꢞ này. Nꢅu sꢞ thꢎ 1 lꢓn hꢍn hoꢐc bꢛng sꢞ thꢎ 2 thì set cꢢ F0, nꢅu ngưꢚc lꢂi thì xóa  
cꢢ F0.  
2.51 Cho mꢒt chuꢜi ký tꢕ dưꢓi dꢂng mã ASCII trong RAM nꢒi, dài 20 byte, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 50H.  
Viꢅt CT xuꢑt các ký tꢕ in hoa có trong chuꢜi này ra Port 1. Biꢅt rꢛng mã ASCII cꢔa ký tꢕ in hoa là  
tꢘ 65 (chꢖ A) ꢆꢅn 90 (chꢖ Z).  
ORG 0000H  
MOV R0,#50H  
MOV R3,#20  
lap: MOV A,@R0  
CJNE A,#65,ke  
JC boqua  
hoac CJNE A,#65,$+3  
JC boqua  
ke:  
CJNE A,#91,ke2  
CJNE A,#91,$+3  
JNC boqua  
ke2: JNC boqua  
MOV P1,A  
boqua:INC R0  
DJNZ R3,lap  
END  
2.52 Viꢅt CT nhꢗp mꢒt chuꢜi ký tꢕ tꢘ Port 1 dưꢓi dꢂng mã ASCII và ghi vào RAM ngoài, bꢙt ꢆꢄu  
tꢘ ꢆꢉa chꢊ 0000H. Biꢅt rꢛng chuꢜi này kꢅt thúc bꢛng ký tꢕ CR (có mã ASCII là 0DH) và ghi cꢈ ký  
tꢕ này vào RAM.  
ORG 0000H  
MOV DPTR,#0000H  
tiep: MOV A,P1  
MOVX @DPTR,A  
INC DPTR  
CJNE A,#0DH,tiep  
END  
2.53 Viꢅt CT nhꢗp mꢒt chuꢜi ký tꢕ tꢘ Port 1 dưꢓi dꢂng mã ASCII và ghi vào RAM ngoài, bꢙt ꢆꢄu  
tꢘ ꢆꢉa chꢊ 0000H. Biꢅt rꢛng chuꢜi này kꢅt thúc bꢛng ký tꢕ CR (có mã ASCII là 0DH) và không ghi  
ký tꢕ này vào RAM.  
ORG 0000H  
MOV DPTR,#0000H  
lap: MOV A,P1  
CJNE A,#0DH,tiep  
SJMP ketthuc  
tiep: MOVX @DPTR,A  
INC DPTR  
SJMP lap  
ketthuc:  
NOP  
Đáp án bài tập Vi Xử Lý 8051 - Trang 11/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
END  
2.54 Viꢅt CT nhꢗp mꢒt chuꢜi ký tꢕ tꢘ Port 1 dưꢓi dꢂng mã ASCII và ghi vào RAM ngoài, bꢙt ꢆꢄu  
tꢘ ꢆꢉa chꢊ 0000H. Biꢅt rꢛng chuꢜi này kꢅt thúc bꢛng ký tꢕ CR (có mã ASCII là 0DH) và không ghi  
ký tꢕ này vào RAM mà thay bꢛng ký tꢕ null (có mã ASCII là 00H).  
2.55 Cho mꢒt chuꢜi ký tꢕ dưꢓi dꢂng mã ASCII trong RAM nꢒi, dài 20 byte, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 50H.  
Viꢅt CT ꢆꢃi các ký tꢕ in hoa có trong chuꢜi này thành ký tꢕ thưꢢng. Biꢅt rꢛng mã ASCII cꢔa ký tꢕ  
thưꢢng bꢛng mã ASCII cꢔa ký tꢕ in hoa cꢒng thêm 32.  
2.56 Cho mꢒt chuꢜi ký tꢕ sꢞ dưꢓi dꢂng mã ASCII trong RAM nꢒi, dài 20 byte, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ  
50H. Viꢅt CT ꢆꢃi các ký tꢕ sꢞ này thành mã BCD. Biꢅt rꢛng mã ASCII cꢔa các ký tꢕ sꢞ là tꢘ 30H  
(sꢞ 0) ꢆꢅn 39H (sꢞ 9).  
Sử dụng lệnh nhảy có điều kiện  
2.57 Cho mꢒt chuꢜi dꢖ liꢋu dưꢓi dꢂng sꢞ có dꢑu trong RAM ngoài, dài 100 byte, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ  
0100H. Viꢅt CT lꢄn lưꢚt xuꢑt các dꢖ liꢋu trong chuꢜi ra Port 1 nꢅu là sꢞ dưꢍng (xem sꢞ 0 là dưꢍng)  
và xuꢑt ra Port 2 nꢅu là sꢞ âm.  
ORG 0000H  
MOV DPTR,#0100H  
MOV R4,#100  
lap: MOVX A,@DPTR  
JNB ACC.7,duong  
MOV P2,A  
SJMP tiep  
duong:MOV P1,A  
tiep: INC DPTR  
DJNZ R4,lap  
END  
2.58 Cho mꢒt chuꢜi dꢖ liꢋu dưꢓi dꢂng sꢞ có dꢑu trong RAM ngoài, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 0100H và kꢅt  
thúc bꢛng sꢞ 0. Viꢅt CT lꢄn lưꢚt xuꢑt các dꢖ liꢋu trong chuꢜi ra Port 1 nꢅu là sꢞ dưꢍng và xuꢑt ra  
Port 2 nꢅu là sꢞ âm.  
ORG 0000H  
MOV DPTR,#0100H  
lap: MOVX A,@DPTR  
JNB ACC.7,duong  
MOV P2,A  
SJMP tiep  
duong:MOV P1,A  
tiep: INC DPTR  
CJNE A,#0,lap  
END  
2.59 Cho mꢒt chuꢜi dꢖ liꢋu dưꢓi dꢂng sꢞ không dꢑu trong RAM ngoài, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 0100H và  
ꢆꢒ dài chuꢜi là nꢒi dung ô nhꢓ 00FFH. Viꢅt CT ꢆꢅm sꢞ sꢞ chꢣn (chia hꢅt cho 2) có trong chuꢜi và  
cꢑt vào ô nhꢓ 00FEH.  
HD: Số chẵn có LSB=0  
Đáp án bài tập Vi Xử Lý 8051 - Trang 12/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
2.60 Cho mꢒt chuꢜi dꢖ liꢋu dưꢓi dꢂng sꢞ không dꢑu trong RAM ngoài, bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 0100H và  
ꢆꢒ dài chuꢜi là nꢒi dung ô nhꢓ 00FFH. Viꢅt CT ghi các sꢞ chꢣn (xem sꢞ 0 là sꢞ chꢣn) có trong  
chuꢜi vào RAM nꢒi bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 30H cho ꢆꢅn khi gꢐp sꢞ lꢤ thì dꢘng.  
2.61 Viꢅt CT con có nhiꢋm vꢁ lꢑy 1 byte tꢘ 1 chuꢜi data gꢝm 20 byte cꢑt trong Ram ngoài bꢙt ꢆꢄu  
tꢘ ꢆꢉa chꢊ 2000H và xuꢑt ra Port1. Mꢜi lꢄn gꢌi CT con chꢊ xuꢑt 1 byte, lꢄn gꢌi kꢅ thì xuꢑt byte kꢅ  
tiꢅp, lꢄn gꢌi thꢎ 21 thì lꢂi xuꢑt byte ꢆꢄu, ...  
3. TIMER  
3.1 Viꢅt CT con mang tên DELAY500 có nhiꢋm vꢁ tꢂo trꢥ 0,5ms dùng Timer. (Xtal 6MHz).  
…
MOV TMOD,#00000010B  
…
delay500:  
MOV TL0,#-250  
SETB TR0  
JNB TF0,$  
CLR TR0  
CLR TF0  
RET  
3.2 Viꢅt CT con mang tên DELAY10 có nhiꢋm vꢁ tꢂo trꢥ 10ms dùng Timer. (Xtal 12MHz).  
…
MOV TMOD,#00000001B  
…
delay10:  
MOV TH0,#HIGH(-10000)  
MOV TL0,#LOW(-10000)  
SETB TR0  
JNB TF0,$  
CLR TR0  
CLR TF0  
RET  
3.3 Dùng CT con DELAY500 (bài 3.1) ꢆꢇ viꢅt CT tꢂo sóng vuông f=1KHz tꢂi P1.0.  
3.4 Dùng CT con DELAY10 (bài 3.2) ꢆꢇ viꢅt CT tꢂo sóng vuông f=50Hz tꢂi P1.1.  
3.5 Dùng CT con DELAY500 (bài 3.1) ꢆꢇ viꢅt CT tꢂo sóng vuông f=500Hz (D=25%) tꢂi P1.2.  
3.6 Dùng CT con DELAY10 (bài 3.2) ꢆꢇ viꢅt CT tꢂo sóng vuông f=20Hz (D=20%) tꢂi P1.3.  
3.7 Viꢅt CT dùng Timer tꢂo sóng vuông f=500Hz tꢂi P1.4. (Xtal 12MHz).  
3.8 Viꢅt CT dùng Timer tꢂo sóng vuông f=20KHz tꢂi P1.5. (Xtal 24MHz).  
3.9 Viꢅt CT dùng Timer tꢂo 2 sóng vuông có cùng f= 1KHz tꢂi P1.6 và P1.7. Biꢅt rꢛng sóng vuông  
tꢂi P1.7 chꢗm pha hꢍn sóng vuông tꢂi P1.6 100(s. (Xtal 12MHz).  
3.10 Viꢅt CT dùng Timer ꢆiꢦu khiꢇn ꢆèn giao thông tꢂi mꢒt giao lꢒ. Cho biꢅt rꢛng:  
Đáp án bài tập Vi Xử Lý 8051 - Trang 13/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
Đèn  
Bit điều khiển Thời gian  
Xanh 1  
P1.0  
P1.1  
P1.2  
P1.3  
P1.4  
P1.5  
25s  
Vàng 1  
3s  
ꢏꢡ 1  
Xanh 2  
33s  
3s  
Vàng 2  
ꢏꢡ 2  
ꢏèn sáng khi bit ꢆiꢦu khiꢇn bꢛng 0.  
4. SERIAL PORT  
4.1 Viꢅt CT ꢆꢌc 1 chuꢜi data chꢎa trong RAM nꢒi tꢘ ꢆꢉa chꢊ 30H ꢆꢅn 50H và xuꢑt ra 1 thiꢅt bꢉ (ví  
dꢁ như màn hình tinh thꢇ lꢡng LCD) ꢆưꢚc nꢞi vꢓi port nꢞi tiꢅp cꢔa 8051 (chꢅ ꢆꢒ UART 8 bit, 2400  
baud). Cho Xtal 11,059 MHz.  
ORG 0000H  
MOV TMOD,#00100000B  
MOV SCON,#01010010B  
MOV TH1,#-12  
SETB TR1  
MOV R0,#30H  
lap: MOV A,@R0  
JNB TI,$  
CLR TI  
MOV SBUF,A  
INC R0  
CJNE R0,#51H,lap  
END  
4.2 Viꢅt CT nhꢗn 1 chuꢜi data tꢘ 1 thiꢅt bꢉ ngoài (ví dꢁ như máy ꢆꢌc mã vꢂch) nꢞi vꢓi 8051 qua  
port nꢞi tiꢅp (chꢅ ꢆꢒ UART 8 bit, 4800 baud) và ghi data vào RAM nꢒi tꢘ ꢆꢉa chꢊ 40H. Biꢅt rꢛng  
chuꢜi data gꢝm 20 byte và Xtal 11,059MHz.  
ORG 0000H  
MOV TMOD,#00100000B  
MOV SCON,#01010010B  
MOV TH1,#-6  
SETB TR1  
MOV R0,#40H  
MOV R2,#20  
lap: JNB RI,$  
CLR RI  
MOV A,SBUF  
MOV @R0,A  
Đáp án bài tập Vi Xử Lý 8051 - Trang 14/15  
Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện Tử  
Lê Chí Thông – [email protected]  
INC R0  
DJNZ R2,lap  
END  
4.3 Viꢅt CT lꢑy 1 chuꢜi data chꢎa trong RAM ngoài bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 2000H và xuꢑt ra 1 thiꢅt bꢉ  
ꢆưꢚc nꢞi vꢓi port nꢞi tiꢅp cꢔa 8051 (chꢅ ꢆꢒ UART 8 bit, 1200 baud). Chuꢜi kꢅt thúc bꢧi ký tꢕ EOT  
(có mã ASCII là 04H) và ký tꢕ này cꢨng ꢆưꢚc xuꢑt ra (Xtal 11,059 MHz).  
4.4 Làm lꢂi bài 4.3 nhưng không xuꢑt ký tꢕ EOT.  
4.5 Viꢅt CT nhꢗn 1 chuꢜi data tꢘ 1 thiꢅt bꢉ ngoài nꢞi vꢓi 8051 qua port nꢞi tiꢅp (chꢅ ꢆꢒ UART 8 bit,  
9600 baud) và ghi data vào RAM ngoài bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 4000H. Chuꢜi data bꢙt ꢆꢄu bꢛng ký tꢕ  
STX (02H) và kꢅt thúc bꢛng ký tꢕ ETX (03H). Không ghi 2 ký tꢕ này vào RAM. Cho Xtal  
11,059MHz.  
4.6 Viꢅt CT con mang tên XUAT có nhiꢋm vꢁ lꢑy 1 chuꢜi data chꢎa trong RAM ngoài xuꢑt ra port  
nꢞi tiꢅp ꢧ chꢅ ꢆꢒ UART 9 bit. Bit thꢎ 9 là bit parity chꢣn. Chuꢜi data kꢅt thúc bꢛng ký tꢕ null  
(00H). CT gꢌi CT con XUAT sꢩ ꢆꢐt ꢆꢉa chꢊ bꢙt ꢆꢄu cꢔa chuꢜi vào DPTR trưꢓc khi gꢌi CT con  
XUAT. Giꢈ sꢀ port nꢞi tiꢅp ꢆã ꢆưꢚc khꢧi ꢆꢒng.  
4.7 Viꢅt CT con mang tên NHAP có nhiꢋm vꢁ nhꢗp 1 chuꢜi data gꢝm 30 byte tꢘ port nꢞi tiꢅp ꢧ chꢅ  
ꢆꢒ UART 9 bit, bit thꢎ 9 là bit parity lꢤ. Nꢅu data nhꢗn ꢆưꢚc không bꢉ lꢜi thì ghi vào 1 vùng nhꢓ  
cꢔa RAM nꢒi, nꢅu bꢉ lꢜi thì không ghi. CT gꢌi CT con NHAP sꢩ ꢆꢐt ꢆꢉa chꢊ ꢆꢄu cꢔa vùng nhꢓ vào  
thanh ghi R0 trưꢓc khi gꢌi CT con NHAP. Giꢈ sꢀ port nꢞi tiꢅp ꢆã ꢆưꢚc khꢧi ꢆꢒng.  
5. INTERRUPT  
5.1 Viꢅt CT dùng ngꢙt Timer ꢆꢇ tꢂo sóng vuông f=2KHz tꢂi P1.7. (Xtal 12MHz).  
5.2 Viꢅt CT dùng ngꢙt Timer ꢆꢇ tꢂo sóng vuông f=200Hz tꢂi P1.6. (Xtal 12MHz).  
5.3 Viꢅt CT dùng ngꢙt Timer ꢆꢇ tꢂo ꢆꢝng thꢢi 2 sóng vuông 1KHz và 50Hz tꢂi P1.0 và P1.1. (Xtal  
6MHz)  
5.4 Viꢅt CT lꢑy 1 chuꢜi data chꢎa trong Ram ngoài bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 6200H ꢆꢅn ꢆꢉa chꢊ 62FFH và  
xuꢑt ra Port1, mꢜi lꢄn xuꢑt cách nhau 50ms. Sꢀ dꢁng ngꢙt Timer. Xtal 12MHz.  
5.5 Viꢅt CT nhꢗp data tꢘ thiꢅt bꢉ ngoài kꢅt nꢞi vꢓi 8051 qua Port1, mꢜi lꢄn nhꢗp cách nhau 5s, data  
nhꢗp vꢦ ꢆưꢚc ghi vào vùng Ram nꢒi bꢙt ꢆꢄu tꢘ ꢆꢉa chꢊ 50H ꢆꢅn ꢆꢉa chꢊ 5FH. Biꢅt rꢛng sau khi ghi  
vào ô nhꢓ cuꢞi cùng thì trꢧ lꢂi ghi vào ô nhꢓ ꢆꢄu. Sꢀ dꢁng ngꢙt Timer. Xtal 12MHz.  
5.6 Viꢅt CT phát liên tꢁc chuꢜi sꢞ tꢘ 0 ꢆꢅn 9 ra port nꢞi tiꢅp theo chꢅ ꢆꢒ UART 8 bit, 2400 baud. Sꢀ  
dꢁng ngꢙt serial. Xtal 12MHz.  
5.7 Viꢅt CT chꢢ nhꢗn data tꢘ 1 thiꢅt bꢉ ngoài gꢧi ꢆꢅn 8051 qua port nꢞi tiꢅp (chꢅ ꢆꢒ UART 8 bit,  
19200 baud). Nꢅu nhꢗn ꢆưꢚc ký tꢕ STX (02H) thì bꢗt sáng LED, nꢅu nhꢗn ꢆưꢚc ký tꢕ ETX (03H)  
thì tꢙt LED, biꢅt rꢛng LED ꢆưꢚc ꢆiꢦu khiꢇn bꢛng ngõ P1.3 (LED sáng khi bit ꢆiꢦu khiꢇn bꢛng 1).  
Sꢀ dꢁng ngꢙt serial. Xtal 11,059MHz.  
5.8 Viꢅt CT chꢢ nhꢗn 1 xung cꢂnh xuꢞng ꢆưa vào chân /INT0 (P3.2), khi có xung thì nhꢗp data tꢘ  
Port1 và phát ra port nꢞi tiꢅp ꢧ chꢅ ꢆꢒ UART 9 bit 4800 baud, bit thꢎ 9 là bit parity lꢤ. Xtal 6MHz.  
5.9 Viꢅt CT ꢆꢅm sꢞ xung ꢆưa vào chân /INT1 (P3.3) và ꢆiꢦu khiꢇn relay thông qua chân P3.0 (relay  
ꢆóng khi P3.0 bꢛng 1), cꢑt sꢞ ꢆꢅm vào ô nhꢓ 40H cꢔa Ram nꢒi, nꢅu sꢞ ꢆꢅm chưa ꢆꢅn 100 thì ꢆóng  
relay, nꢅu sꢞ ꢆꢅm ꢆꢂt 100 thì ngꢙt relay.  
Đáp án bài tập Vi Xử Lý 8051 - Trang 15/15  
pdf 15 trang baolam 30800 Free
Bạn đang xem tài liệu "Bài tập vi xử lý (họ vi điều khiển 8051) - Lê Chí Thông (Có đáp án)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_tap_vi_xu_ly_ho_vi_dieu_khien_8051_le_chi_thong_co_dap_a.pdf