Quyển bài tập kỹ thuật Vi điều khiển này được biên soạn nhằm phục vụ cho việc giảng dạy bộ môn Vi điều khiển tại trường Đại học SPKT Hưng yên. Hệ thống các bài tập ở quyển sách này đã được tác giả biên soạn, tổng hợp sao cho phù hợp với nội dung đào tạo và giáo trình kỹ thuật Vi điều khiển. Vì vậy, khi giảng dạy môn này giáo viên cần liên hệ các bài tập cụ thể để áp dụng cho phù hợp với từng nội dung bài giảng.
14 trang |
Chia sẻ: maiphuongtt | Lượt xem: 2511 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài tập Kỹ thuật vi điều khiển, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
Trang
Lời giới thiệu 2
Phần 1. Bài tập căn bản
Nhóm lệnh di chuyển dữ liệu. 3
Bài tập 1.1 ... 1.3 3
Bài tập 1.4 ... 1.8 4
Bài tập 1.9 5
Nhóm lệnh tính toán số học. 5
Bài tập 2.1 ... 2.4 5
Bài tập 2.5 ... 2.9 6
Nhóm lệnh tính toán logic. 6
Bài tập 3.1 ... 3.7 7
Bài tập 3.8 ... 3.10 8
Nhóm lệnh rẽ nhánh chương trình. 8
Bài tập 4.1 ... 4.3 8
Bài tập 4.4 ... 4.8 9
Bài tập 4.9 ... 4.12 10
Bài tập 4.13 ... 4.14 11
Nhóm lệnh điều khiển biến logic. 11
Bài tập 5.1 ... 5.4 11
Phần 2. Bài tập ứng dụng cơ bản 12
Bài tập 1 ... 5 12
Bài tập 6 ...15 13
Tài liệu tham khảo. 14
LỜI GIỚI THIỆU
Quyển bài tập kỹ thuật Vi điều khiển này được biên soạn nhằm phục vụ cho việc giảng dạy bộ môn Vi điều khiển tại trường Đại học SPKT Hưng yên. Hệ thống các bài tập ở quyển sách này đã được tác giả biên soạn, tổng hợp sao cho phù hợp với nội dung đào tạo và giáo trình kỹ thuật Vi điều khiển. Vì vậy, khi giảng dạy môn này giáo viên cần liên hệ các bài tập cụ thể để áp dụng cho phù hợp với từng nội dung bài giảng.
Mặc dầu đã rất cố gắng trong quá trình biên soạn nhưng do trình độ và thời gian còn bị hạn chế nên chắc chắn quyển sách này không tránh khỏi những thiếu sót, rất mong nhận được những ý kiến phê bình, đóng góp của bạn đọc.
Hưng yên, tháng 10 năm 2003
Tác giả
PHẦN 1: BÀI TẬP CĂN BẢN
NHÓM LỆNH DI CHUYỂN DỮ LIỆU:
BÀI TẬP 1.1:
DỮ KIỆN
YÊU CẦU
- (30h) ở RAM nội = 40h.
- (40h) ở RAM nội = 10h.
- Chuyển nội dung tại vị trí 30h ở RAM nội vào R1 và A.
- Chuyển nội dung tại vị trí 40h ở RAM nội vào B.
- Chuyển nội dung 0CAh vào vị trí 40h ở RAM nội và cổng P2.
- Xác định giá trị của các thanh ghi R1, A, B, và nội dung của RAM nội tai các vị trí trên (bảng Main Registers).
- Xuất dữ liệu của A và B ra cổng P1 và P3.
BÀI TẬP 1.2:
DỮ KIỆN
YÊU CẦU
- (C) = 1; (P2) = 0C5h
- (P1) = 35h
Xác định nội dung mới của P1 sau khi thực hiện các lệnh sau:
MOV P1.3, C
MOV C, P2.3
MOV P1.2, C
BÀI TẬP 1.3:
DỮ KIỆN
YÊU CẦU
- (R0) = 11h; (R1) = 23h
- (11h) ở RAM ngoài = 55h
- Sao chép nội dung tại vị trí 11h ở RAM ngoài vào A.
- Sao chép nội dung 55h vào vị trí 23h của RAM ngoài.
- Xuất dữ liệu của A ra cổng P0 bằng phương pháp định địa chỉ trực tiếp.
BÀI TẬP 1.4:
DỮ KIỆN
YÊU CẦU
(SP) = 05h; (DPTR) = 1123h
Lưu nội dung 23h và 11h vào vị trí 06h và 07h của ngăn xếp ở RAM nội. Xác định nội dung mới của SP.
BÀI TẬP 1.5:
DỮ KIỆN
YÊU CẦU
- (SP) = 32h
- (30h), (31h) và (32h) ở RAM nội = 10h, 11h và 12h
Xác định nội dung mới của DPTR và SP sau khi thực hiện các lệnh sau:
POP DPH
POP DPL
BÀI TẬP 1.6:
DỮ KIỆN
YÊU CẦU
- (R1) = 30h; (A) = 0FFh
- (30h) ở RAM nội = 0Fh
- Hoán chuyển (A) và (30h) ở RAM nội.
- Xác định nội dung mới của A và (30h).
- Xuất (A) và (30h) ở RAM nội ra P1 và P3.
BÀI TẬP 1.7:
DỮ KIỆN
YÊU CẦU
- (R1) = 20h; (A) = 10001100b
- (20h) ở RAM nội = 11100001b
- Xác định (A), (20h) ở RAM nội sau khi thực hiện lệnh: XCHD A, @R1
- Xuất (A) và (20h) ở RAM nội ra P0 và P2.
BÀI TẬP 1.8:
(2A), (2B), (2C), (2D) và (2E) ở RAM nội là: 00h, 12h, 34h, 56h và 78h. Hãy xác định nội dung của bảng số liệu sau đây theo từng lệnh cho trước.
(2A)
(2B)
(2C)
(2D)
(2E)
(ACC)
MOV A, 2Eh
MOV 2Eh, 2Dh
MOV 2Dh, 2Ch
MOV 2Ch, 2Bh
MOV 2Bh, #0
BÀI TẬP 1.9:
(2A), (2B), (2C), (2D) và (2E) ở RAM nội là: 00h, 12h, 34h, 56h và 78h. Hãy xác định nội dung của bảng số liệu sau đây theo từng lệnh cho trước.
(2A)
(2B)
(2C)
(2D)
(2E)
(ACC)
CLR A
XCH A, 2Bh
XCH A, 2Ch
XCH A, 2Dh
XCH A, 2Eh
NHÓM LỆNH TÍNH TOÁN SỐ HỌC
BÀI TẬP 2.1:
DỮ KIỆN
YÊU CẦU
- (A) = 0C3h
- (R1) = 0AAh
Xác định nội dung của A, AC, CF, OV sau khi thực hiện lệnh:
ADD A, R1
BÀI TẬP 2.2:
DỮ KIỆN
YÊU CẦU
- (A) = 0C3h
- (R1) = 0AAh
Xác định nội dung của A, AC, CF, OV sau khi thực hiện lệnh:
ADDC A, R1
BÀI TẬP 2.3:
DỮ KIỆN
YÊU CẦU
(A) = 0C9h, (R2) = 54h
Xác định nội dung của A, AC, CF, OV sau khi thực hiện lệnh:
SUBB A, R2
BÀI TẬP 2.4:
DỮ KIỆN
YÊU CẦU
(R0) = 7Eh.
(7Eh) và (7Fh) ở RAM nội = 0FFh và 40h
Xác định lại: (R0); (7Eh) và (7Fh) ở RAM nội sau khi thực hiện các lệnh:
INC @R0
INC R0
INC @R0
BÀI TẬP 2.5:
DỮ KIỆN
YÊU CẦU
(R0) = 7Fh.
(7Eh) và (7Fh) ở RAM nội = 00h và 40h
Xác định lại: (R0); (7Eh) và (7Fh) ở RAM nội sau khi thực hiện các lệnh:
DEC @R0
DEC R0
DEC @R0
BÀI TẬP 2.6:
DỮ KIỆN
YÊU CẦU
(DPTR) = 12FEh
Xác định lại (DPTR) sau khi thực hiện các lệnh:
INC DPTR
INC DPTR
INC DPTR
BÀI TẬP 2.7:
DỮ KIỆN
YÊU CẦU
(A) = 50h, (B) = 0A0h
Xác định kết quả và (A), (B), (CF), (OV) sau khi thực hiện lệnh: MUL AB
BÀI TẬP 2.8:
DỮ KIỆN
YÊU CẦU
(A) = 0FBh, (B) = 12h
Xác định kết quả và (A), (B), (CF), (OV) sau khi thực hiện lệnh: DIV AB
BÀI TẬP 2.9:
DỮ KIỆN
YÊU CẦU
(A) = 56h, (R2) = 67h,
(CF) = 1
Xác định (A) sau khi thực hiện các lệnh:
ADDC A,R2
DA A
NHÓM LỆNH TÍNH TOÁN LOGIC
BÀI TẬP 3.1:
DỮ KIỆN
YÊU CẦU
(A) = 0C3H, (R0) = 55h
Sau khi thực hiện lệnh: ANL A, R0
(A)= ?
BÀI TẬP 3.2:
DỮ KIỆN
YÊU CẦU
P1.0=1, ACC.7=1 và OV=0
Hãy thiết lập cờ nhớ bằng lệnh ANL
BÀI TẬP 3.3:
DỮ KIỆN
YÊU CẦU
(A) = 0C3H, (R0) = 55h
Sau khi thực hiện lệnh: ORL A, R0
(A) = ?
BÀI TẬP 3.4:
DỮ KIỆN
YÊU CẦU
P1.0=1, ACC.7=1 và OV=0
Hãy thiết lập cờ nhớ bằng lệnh ORL
BÀI TẬP 3.5:
DỮ KIỆN
YÊU CẦU
(A) = 0C3H, (R0) = 0AAh
Sau khi thực hiện lệnh: XRL A, R0
(A) = ?
BÀI TẬP 3.6:
DỮ KIỆN
YÊU CẦU
(A) = 0C5h.
Sau khi thực hiện lệnh: RL A
(A) = ?
BÀI TẬP 3.7:
DỮ KIỆN
YÊU CẦU
(A) = 0C5h, (C) = 0.
Sau khi thực hiện lệnh: RLC A
(A) =?, (C) =?
BÀI TẬP 3.8:
DỮ KIỆN
YÊU CẦU
(A) = 0C5h.
Sau khi thực hiện lệnh: RR A
(A) =?
BÀI TẬP 3.9:
DỮ KIỆN
YÊU CẦU
(A) = 0C5h, (C) = 0.
Sau khi thực hiện lệnh: RRC A
(A) =?, (C) =?
BÀI TẬP 3.10:
DỮ KIỆN
YÊU CẦU
(A) = 0C5h
Sau khi thực hiện lệnh: SWAP A
(A) =?
4. NHÓM LỆNH RẼ NHÁNH CHƯƠNG TRÌNH
BÀI TẬP 4.1:
DỮ KIỆN
YÊU CẦU
(SP) = 07h. Nhãn CT_CON được đặt tại vị trí 0345h trong bộ nhớ chương trình.
Sau khi thực hiện lệnh ACALL CT_CON tại vị trí 0123h thì : (SP), (08h), (09h) và (PC) = ?
BÀI TẬP 4.2:
DỮ KIỆN
YÊU CẦU
(SP) = 07h. Nhãn CT_CON được đặt tại vị trí 1234h trong bộ nhớ chương trình.
Sau khi thực hiện lệnh LCALL CT_CON tại vị trí 0123h thì: (SP), (08h), (09h) và (PC) =?
BÀI TẬP 4.3:
DỮ KIỆN
YÊU CẦU
(SP) = 0Bh. (0Ah) và (0Bh) trong RAM nội = 23h và 01h.
-Xác định (SP) sau khi thực hiện lệnh RET
- XĐ địa chỉ tiếp theo của chương trình.
BÀI TẬP 4.4:
DỮ KIỆN
YÊU CẦU
(SP) = 0Bh. (0Ah) và (0Bh) trong RAM nội = 23h và 01h.
Một ngắt được phát hiện trong khi lệnh ở địa chỉ 0123h đang thực thi.
-Xác định (SP) sau khi thực hiện lệnh RETI
- XĐ địa chỉ tiếp theo của chương trình.
BÀI TẬP 4.5:
DỮ KIỆN
YÊU CẦU
(P1) = 0CAh. (A) = 56h.
Xác định địa chỉ rẽ nhánh của chương trình, khi thực hiện các lệnh:
JB P1.2, Label1
JB ACC.2, Lable2
BÀI TẬP 4.6:
DỮ KIỆN
YÊU CẦU
(P1) = 0CAh. (A) = 56h.
Xác định địa chỉ rẽ nhánh của chương trình, khi thực hiện các lệnh:
JNB P1.3, Label1
JNB ACC.3, Lable2
BÀI TẬP 4.7:
DỮ KIỆN
YÊU CẦU
(A) = 56h
Xác định địa chỉ rẽ nhánh của chương trình và nội dung mới của A, khi thực hiện các lệnh:
JBC ACC.3, Label1
JBC ACC.2, Lable2
BÀI TẬP 4.8:
DỮ KIỆN
YÊU CẦU
(C) = 0
Xác định địa chỉ rẽ nhánh của chương trình và nội dung mới của C, khi thực hiện các lệnh:
JC Label1
CPL C
JC Lable2
BÀI TẬP 4.9:
DỮ KIỆN
YÊU CẦU
(C) = 1.
Xác định địa chỉ rẽ nhánh của chương trình và nội dung mới của C, khi thực hiện các lệnh:
JNC Label1
CPL C
JNC Lable2
BÀI TẬP 4.10:
DỮ KIỆN
YÊU CẦU
(A) = 01h.
Xác định địa chỉ rẽ nhánh của chương trình và nội dung mới của A, khi thực hiện các lệnh:
JZ Label1
DEC A
JZ Lable2
BÀI TẬP 4.11:
DỮ KIỆN
YÊU CẦU
(A) = 00h.
Xác định địa chỉ rẽ nhánh của chương trình và nội dung mới của A, khi thực hiện các lệnh:
JNZ Label1
INC A
JNZ Lable2
BÀI TẬP 4.12:
DỮ KIỆN
YÊU CẦU
(40h), (50h) và (60h) ở RAM nội = 01h, 70h và 15h.
Xác định địa chỉ rẽ nhánh của chương trình và nội dung mới tại các vị trí 40h, 50h và 60h ở RAM nội, khi thực hiện các lệnh:
DJNZ 40h, Label1
DJNZ 50h, Label2
DJNZ 60h, Label3
BÀI TẬP 4.13:
DỮ KIỆN
YÊU CẦU
Sử dụng các lệnh:
MOV
CPL
DJNZ
Viết chương trình tạo ra 4 xung xuất hiện ở bit 7 của cổng P1. Mỗi một xung chiếm 3 chu kỳ máy
BÀI TẬP 4.14:
DỮ KIỆN
YÊU CẦU
Sử dụng các lệnh SETB, CLR và NOP
Viết chương trình tạo ra một xung có mức thấp trên bit 7 của cổng P2 chính xác 5 chu kỳ.
NHÓM LỆNH ĐIỀU KHIỂN BIẾN LOGIC
BÀI TẬP 5.1:
DỮ KIỆN
YÊU CẦU
(P1) = 5Dh.
Thực hiện lệnh xoá bit để có (P1) = 59h.
BÀI TẬP 5.2:
DỮ KIỆN
YÊU CẦU
(C) = 0, (P1) = 34h.
Sử dụng lệnh thiết lập bit để có: (P1) = 35h, và (C) = 1.
BÀI TẬP 5.3:
DỮ KIỆN
YÊU CẦU
Cổng P1 vừa được ghi nội dung 5Bh.
Sử dụng lệnh lấy bù bit để có: (P1) = 5Dh
BÀI TẬP 5.4:
DỮ KIỆN
YÊU CẦU
Sau khi thực hiện xong lệnh:
CPL A
(A) = 0A3h
Xác định nội dung ban đầu của A.
PHẦN 2: BÀI TẬP ỨNG DỤNG CƠ BẢN
BÀI TẬP 1 : Kiểm tra cổng vào/ ra của Vi xử lý On-chip 8 bit.
Yêu cầu: Viết chương trình xuất dữ liệu ra cổng P1 theo bảng số liệu sau:
P1
11111110
11111100
11111000
11110000
11100000
11000000
10000000
00000000
11111111
Lưu ý: thực hiện hàm Wait với thời gian chính xác 1 s.
BÀI TẬP 2 : Viết chương trình đìêu khiển hệ thống quảng cáo điện tử chạy tự động với nhiều chế độ hiển thị khác nhau.
BÀI TẬP 3 : Viết chương trình đìêu khiển hệ thống quảng cáo điện tử hiển thị bán tự động với nhiều chế độ khác nhau (cho phép người sử dụng lựa chọn các chế độ hiển thị khác nhau).
BÀI TẬP 4 : Viết chương trình đìêu khiển hiển thị LED 7 thanh (đếm tiến từ 0 đến F). Quá trình hiển thị được lặp đi lặp lại nhiều lần.
BÀI TẬP 5 : Viết chương trình đìêu khiển LED 7 thanh hiển thị theo sơ đồ khối sau:
Đếm tiến
Đếm lùi
Start
BÀI TẬP 6 : Viết chương trình đìêu khiển LED 7 thanh hiển thị theo các yêu cầu sau:
- Nếu INT0=0 thì hiển thị số 0,
- Nếu INT0=1 thì hiển thị số 1.
BÀI TẬP 7 : Viết chương trình đìêu khiển LED 7 thanh hiển thị theo các yêu cầu sau:
- Nếu INT0=0 thì hiển thị số 0, INT0=1 thì hiển thị số 1.
- Nếu INT1=0 thì hiển thị, INT1=1 thì không hiển thị.
BÀI TẬP 8 : Viết chương trình đìêu khiển LED 7 thanh hiển thị theo các yêu cầu sau:
- Nếu INT1=0 thì hiển thị, INT1=1 thì không hiển thị.
- Nếu INT0=0 thì hiển thị số 0 nhấp nháy, INT0=1 thì hiển thị số 1 nhấp nháy.
BÀI TẬP 9 : Viết chương trình đìêu khiển LED 7 thanh hiển thị theo các yêu cầu sau:
- Nếu INT1=0 thì hiển thị, INT1=1 thì không hiển thị.
- Nếu INT0=0 thì đếm lùi, INT0=1 thì đếm tiến.
- Chỉ thay đổi khi thực hiện xong việc gọi bảng số liệu.
BÀI TẬP 10 : Viết chương trình đìêu khiển LED 7 thanh hiển thị theo các yêu cầu sau:
- Nếu INT1=0 thì hiển thị, INT1=1 thì dừng.
- Nếu INT0=0 thì đếm lùi, INT0=1 thì đếm tiến.
- Chỉ thay đổi khi thực hiện xong việc gọi bảng số liệu.
BÀI TẬP 11: Viết chương trình nạp giá trị hằng số (1) vào RAM ngoài tại vùng nhớ được định địa chỉ từ 1000h đến 10FFh .
BÀI TẬP 12: Viết chương trình tạo tín hiệu âm thanh với tần số 500 Hz tại bit 0 của cổng P1.
BÀI TẬP 13: Viết chương trình tạo tín hiệu âm thanh với tần số 500 Hz tại bit 0 của cổng P1, có giới hạn về mặt thời gian: âm thanh kéo dài 5 s sau đó tắt.
BÀI TẬP 14: Viết chương trình để VXL thực hiện chức năng biến đổi A/D
BÀI TẬP 15: Viết chương trình để VXL thực hiện chức năng biến đổi D/A
TÀI LIỆU THAM KHẢO:
The 8051 Microcontroller - I. Scott Mackenzie.
The MCS*51 Microcontroller Family User’s Manuel - INTEL - 1994.
The AT89 Family of Microcontrollers - ATMEL - 2003.
Microcomputer Components – SAB80C515 8 bit Single-chip Microcontroller Family - SIEMENS - 1995.
Mikrocomputertechnik – Prof.Dr.Ing. G.Schnell – Fachhochschule Frankfurt am Main - 2001.
Kỹ thuật Vi xử lý - Văn Thế Minh - NXB GD - 1997.
Kỹ thuật VXL & lập trình ASSEMBLY cho hệ VXL - Đỗ Xuân Tiến – NXB KH&KT - 2001.
Họ VĐK 8051 - Tống Văn On & Hoàng Đức Hải - NXB LĐXH - 2001