You are on page 1of 5

Bài tập Kỹ thuật Vi xử lý

Lê Trung Dũng
1
Đại học Thủy Lợi, Hà Nội, 10000, Vietnam
2
dung_lt@tlu.edu.vn

Tóm tắt nội dung Nội dung này được soạn thảo nhằm mục đích củng
cố kiến thức cho môn học Kỹ thuật Vi xử lý, mã môn học AUTO274,
đang được giảng dạy tại Đại học Thủy Lợi.

Keywords: Microcontroller · 8051 · Assembly.

1 Cấu trúc phần cứng

1.1 Mạch giải mã

Nội dung của phần này sẽ tập trung củng cố kiến thức về mạch giải mã địa chỉ
cho RAM và ROM khi ghép nối với 8051.

1. Thiết kế mạch giải mã địa chỉ bộ nhớ gồm 16KB RAM trên cơ sở vi mạch
RAM loại 4KB và 32KB ROM trên cơ sở vi mạch ROM loại 16KB. Địa chỉ vùng
RAM bắt đầu từ 0000h và địa chỉ vùng ROM tiếp theo sau địa chỉ vùng RAM.

2. Cho mạch giải mã địa chỉ của hệ thống dùng Vi xử lý 8051 được mô tả
như trong hình 1

(a) Xác định vùng địa chỉ của các SRAM:


– Vùng địa chỉ của SRAM thứ nhất (U1)
– Vùng địa chỉ của SRAM thứ nhất (U2)
(b) Viết các lệnh Assembly để 8051 chép 01 byte từ địa chỉ đầu của SRAM thứ
nhất (U1) vào byte có địa chỉ cuối của SRAM thứ hai (U2)

2 Tập lệnh

2.1 Truy xuất RAM nội

1. Viết chương trình ghi 50H vào ô nhớ 40H 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).
2. Viết chương trình xóa ô nhớ 30H 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).

Đại học Thủy Lợi - Bộ môn Kỹ thuật Điều khiển và tự động hóa.
2 Lê Trung Dũng

Address bus (A0-A15)

Data bus (D0-D7)

A0-A10 D0-D7 A0-A10 D0-D7

RD của 8051
RD RD của 8051
RD
DS2016
DS2016

WR của 8051 RAM WR của 8051 RAM


WR WR
2k x 8 2k x 8
0 CS U1
CS U2

A13
C 1
A12
B 2
A11
A 3
LS74138
4
5V
G1 5
A14 G2A
6
A15 G2B 7

Hình 1. Mạch giải mã địa chỉ

3. Viết chương trình ghi nội dung thanh ghi A vào ô nhớ 33H 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).
4. Viết chương trình đọc ô nhớ 44H 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).
5. Viết chương trình chuyển dữ liệu ô nhớ 55H của RAM nội vào ô nhớ 33H
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).

2.2 Truy xuất RAM ngoại


1. Viết chương trình ghi 45H vào ô nhớ 0033H của RAM ngoài.
2. Viết chương trình chuyển dữ liệu ô nhớ 4334H của RAM ngoài vào ô nhớ
5335H của RAM ngoài.

2.3 Truy xuất các cổng


1. Viết chương trình nhập dữ liệu từ P0 và xuất ra P2.
2. Viết chương trình đọc tín hiệu từ chân P0.3 và xuất tín hiệu đó ra P2.3
3. Viết chương trình đọc tín hiệu từ chân P1.3 và xuất tín hiệu đó ra P1.4
4. Viết chương trình đọc tín hiệu từ P0 và cổng P1 thể hiện giá trị đảo của P0

2.4 Sử dụng vòng lặp


1. Viết chương trình xóa 30 ô nhớ RAM nội có địa chỉ bắt đầu là 40H.
2. Viết chương trình xóa 100 ô nhớ RAM ngoại có địa chỉ bắt đầu là 0330H.
Bài tập Kỹ thuật Vi xử lý 3

2.5 Hàm trễ

1. Viết chương trình con delay 100µs, biết rằng thạch anh (xtal) dùng trong
hệ thống là:
(a) 12 Mhz
(b) 6 Mhz
2. Viết chương trình con delay 100ms, biết rằng thạch anh (xtal) dùng trong
hệ thống là:
(a) 12 Mhz
(b) 6 Mhz

2.6 Tạo xung

1. Viết chương trình tạo xung vuông gồm một sườn xung dương và một sườn
xung âm với độ rộng của xung là 100µs tại chân P0.0, biết rằng thạch anh
(xtal) dùng trong hệ thống là:
(a) 12 Mhz
(b) 6 Mhz
2. Viết chương trình tạo chuỗi xung vuông có f = 100 KHz, độ rộng xung là
50% tại chân P1.1, biết rằng thạch anh (xtal) dùng trong hệ thống là:
(a) 12 Mhz
(b) 24 Mhz
3. Viết chương trình tạo chuỗi xung vuông có f = 100 KHz, độ rộng xung là
40% tại chân P0.0, biết rằng thạch anh (xtal) dùng trong hệ thống là:
(a) 12 Mhz
(b) 6 Mhz

2.7 Phép toán

1. 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ết6 chương trình 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).
2. 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 chương trình con cộng chuỗi số này và cất kết quả vào
ô nhớ 2EH:2FH.
3. Viết chương trình con lấy bù 2 số 16 bit chứa trong R2:R3.

2.8 So sánh

1. Cho hai số 8 bit, số thứ nhất chứa trong (60H), số thứ hai chứa trong (39H).
Viết chương trình con so sánh hai số này. Nếu số thứ nhất nhỏ hơn hoặc
bằng số thứ hai thì set bit P0.0, nếu ngược lại thì xóa bit P0.0.
4 Lê Trung Dũng

2. Cho một chuỗi ký tự dưới dạng mã ASCII trong RAM nội, dài 16 byte, bắt
đầu từ địa chỉ 40H. Viết chương trình chỉ 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).
3. Viết chương trình 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ỉ 1000H. 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.

2.9 Lệnh nhảy có điều kiện


1. 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ỉ 0F00H. Viết chương trình lần lượt xuất các dữ liệu trong
chuỗi ra Port 1 nếu là số không âm và xuất ra Port 2 nếu là số âm.
2. 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ỉ 011FH và độ dài chuỗi là nội dung ô nhớ 0030H. Viết chương trình
ghi các số lẻ có trong chuỗi vào RAM nội bắt đầu từ địa chỉ 30H cho đến
khi gặp số không lẻ thì dừng.

3 Bộ định thời
1. Viết chương trình con mang tên là Tre500 để tạo trễ 0.5ms dùng Timer 0
khi vi điều khiển dùng thạch anh 12Mhz.
2. Viết chương trình con mang tên là Tre1000 để tạo trễ 1ms dùng Timer 1 khi
vi điều khiển dùng thạch anh 6Mhz.
3. Viết chương trình con để tạo xung vuông tuần hoàn có tần số f=500Hz với
độ rộng xung D=50% tại chân P0.0 khi vi điều khiển dùng thạch anh Xtal
12 Mhz.
4. Viết chương trình con để tạo xung vuông tuần hoàn có tần số f=200Hz với
độ rộng xung D=25% tại chân P1.0 khi vi điều khiển dùng thạch anh Xtal
12 Mhz.

4 Truyền thông nối tiếp


1. Viết chương trình đọc 1 chuỗi dữ liệu chứa trong RAM nội từ địa chỉ
30H đến 60H và xuất ra cổng truyền thông nối tiếp với tốc độ baudrate
2400bps (bit/giây) ở chế độ UART 8 bit. Vi điều khiển sử dụng thạch anh
11.0592Mhz.
2. Viết chương trình nhận 1 chuối dữ liệu (20 byte) qua cổng truyền thông nối
tiếp chế độ UART 8 bit, tốc độ baud là 9600 và ghi vào RAM nội từ địa chỉ
50H. Vi điều khiển sử dụng thạch anh 11.0592Mhz.

5 Ngắt
1. Viết chương trình dùng ngắt bộ định thời 0 để tạo xung vuông tuần hoàn có
tần số f = 2kHz tại P0.0. Biết rằng vi điều khiển dùng thạch anh 12MHz.
Bài tập Kỹ thuật Vi xử lý 5

2. Dùng ngắt bộ định thời 0 và 1 để tạo đồng thời 2 xung vuông tuần hoàn có
tần số lần lượt là 1kHz và 100Hz tại chân P1.0 và P1.1 khi 8051 sử dụng
thạch anh 6Mhz.
3. Viết chương trình phát một chuỗi dữ liệu chứa trong RAM từ địa chỉ 50H
tới 70H qua cổng truyền thông nối tiếp ở chế độ UART 8 bit, 9600. Có sywr
dụng ngắt truyền thông nối tiếp. Biết rằng vi điều khiển sử dụng thạch anh
11.0592Mhz.
4. Viết chương trình chờ nhận 1 xung âm tại chân P3.2. Khi xuất hiện xung
thì gửi một ký tự @ ra cổng truyền thông nối tiếp ở chế độ UART 9 bit, tốc
độ baud 9600. Trong đó bit thứ 9 là bit kiểm lỗi chẵn/lẻ và vi điều khiển
dùng thạch anh 6Mhz.

Tài liệu
1. Tống Văn On, Họ vi điều khiển 8051. NXB: Lao Động - 2001
2. Phạm Quang Huy & Nguyễn Trọng Hiếu, Vi điều khiển và Ứng dụng Ardunio dành
cho người tự học. NXB: Bách khoa Hà Nội -2015.
3. Lê Chí Thông, Bài tập Vi xử lý, Đại Học Bách Khoa TP.HCM – Khoa Điện-Điện
Tử

You might also like