BÀI 8 GHÉP NỐI VÀ TRAO ĐỔI DỮ LIỆU TRONG HỆ VI XỬ LÝ - Pdf 21

BÀI 8: GHÉP NỐI VÀ TRAO ĐỔI DỮ LIỆU TRONG HỆ VI XỬ

4.1. GHÉP NỐI VI XỬ LÝ/VI ĐIỀU KHIỂN VỚI BỘ NHỚ NGOÀI
Trong chương II chúng ta đã nói đến chức năng cũng như một số bộ nhớ bán dẫn
thông dụng. Trong phần này chúng ta sẽ tiếp tục nghiên cứu cách thức ghép nối vi điều khiển
8051 với bộ nhớ ngoài khi muốn mở rộng thêm không gian nhớ.
4.1.1. MỘT SỐ CHÂN CỦA 8051 PHỤC VỤ CHO GHÉP NỐI VỚI
BỘ NHỚ NGOÀI
4.1.1.1. Chân EA
Ở các ví dụ từ trước đến nay, chúng ta sử dụng ROM trên chip hoặc ROM
ngoài để lưu mã chương trình. Nếu muốn sử dụng đồng thời cả hai bộ nhớ ROM thì có
được không? Câu trả lời là có (hình 4.2.1a).
- Bằng cách nối EA lên Vcc, khi RESET thì 8051 thực hiện chương trình ở trên
chip trước, khi chạy xong thì mới chuyển sang chạy chương trình trên ROM
ngoài. 8051 sẽ nạp các mã lệnh bắt đầu từ địa chỉ 0000h đến 0FFFh (địa chỉ
cuối cùng của ROM trên chip). Sau đó bộ đếm chương trình (con trỏ lệnh PC)
tạo ra địa chỉ 1000h và tự động chuyển hướng ra ROM ngoài có chứa mã
chương trình.
- Nếu nối EA xuống Mass thì vi điều khiển sẽ chỉ thực hiện lệnh có trên ROM
ngoài từ địa chỉ 0000h đến FFFFh
0000h
FFFFh
ngoµi
chip
ngoµi
chip
FFFFh
0000h
ea = gnd ea = vcc
0FFFh
1000h

WR
của bộ nhớ dữ liệu ngoài. Khi đọc dữ liệu từ bộ nhớ vào vi điều khiển thì
chân
RD
sẽ tích cực ở mức thấp, ngược lại khi ghi dữ liệu từ vi điều khiển ra bộ nhớ
thì chân
WR
sẽ tích cực ở mức thấp.
A 0
D 0
A D 6
A 1
U 6 6
7 4 L S 3 7 3
3
4
7
8
1 3
1 4
1 7
1 8
11 1
2
5
6
9
1 2
1 5
1 6

3 0
4 02 0
3 1
1 9
1 8
9
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
1
2
3
4
5
6
7
8
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8

P 1 . 7
P 2 . 0 / A 8
P 2 . 1 / A 9
P 2 . 2 / A 1 0
P 2 . 3 / A 1 1
P 2 . 4 / A 1 2
P 2 . 5 / A 1 3
P 2 . 6 / A 1 4
P 2 . 7 / A 1 5
P 3 . 0 / R X D
P 3 . 1 / T X D
P 3 . 2 / I N T 0
P 3 . 3 / I N T 1
P 3 . 4 / T 0
P 3 . 5 / T 1
P 3 . 6 / W R
P 3 . 7 / R D
A 7
A 2
A D 7
A 3
A D 5
A D 2
A D 1
A D 4
A 5
V C C
A D 3
A 6
Hình 4.2.1b. Ghép nối 8051 với IC chốt 74LS373

A 7
A L E
A D 2
R 3
R
A 4
U 6 9
2 7 6 4
1 0
9
8
7
6
5
4
3
2 5
2 4
2 1
2 3
2
1 1
1 2
1 3
1 5
1 6
1 7
1 8
1 9
2 81 4

A D 6
A D 0
A 9
A D 0 A D 0
U 6 5
8 0 5 1
2 9
3 0
4 02 0
3 1
1 9
1 8
9
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
1
2
3
4
5
6
7
8
2 1

P 1 . 0
P 1 . 1
P 1 . 2
P 1 . 3
P 1 . 4
P 1 . 5
P 1 . 6
P 1 . 7
P 2 . 0 / A 8
P 2 . 1 / A 9
P 2 . 2 / A 1 0
P 2 . 3 / A 1 1
P 2 . 4 / A 1 2
P 2 . 5 / A 1 3
P 2 . 6 / A 1 4
P 2 . 7 / A 1 5
P 3 . 0 / R X D
P 3 . 1 / T X D
P 3 . 2 / I N T 0
P 3 . 3 / I N T 1
P 3 . 4 / T 0
P 3 . 5 / T 1
P 3 . 6 / W R
P 3 . 7 / R D
P S E N
A D 2
A 7
A D 4
A D 1
D 1

3
4
7
8
1 3
1 4
1 7
1 8
1
1 1
2
5
6
9
1 2
1 5
1 6
1 9
2 01 0
D 0
D 1
D 2
D 3
D 4
D 5
D 6
D 7
O E
L E
Q 0

NGOÀI
Ta biết rằng thanh ghi bộ đếm chương trình PC của 8051 là 16 bit và do vậy có thể
truy cập được 2
16
= 64Kb mã chương trình. ở nhiều ví dụ dữ liệu được đặt trong không
gian mã chương trình và dùng lệnh MOVC A, @A+DPTR để lấy dữ liệu. Chữ C trong
lệnh MOVC là từ chữ mã lệnh (Code) để báo rằng dữ liệu được đặt trong không gian mã
lệnh của 8051. Tuy nhiên họ 8051 còn có không gian dữ liệu riêng biệt.
Vì thanh ghi con trỏ dữ liệu DPTR có độ dài 16 bit nên nó cũng có thể quản lý
được tối đa 64Kb ô nhớ dữ liệu. Như vậy 8051 có tổng cộng 128Kb không gian địa chỉ,
trong đó 64Kb dành cho mã chương trình và 64Kb dành cho dữ liệu. Không gian chương
trình được truy cập nhờ thanh ghi PC, còn không gian dữ liệu được truy cập nhờ thanh ghi
DPTR và một lệnh có tên MOVX (chữ X là từ External để chỉ không gian bộ nhớ dữ liệu
được thực hiện từ bộ nhớ ngoài). Để chuyển dữ liệu lưu trữ ở bộ nhớ dữ liệu ngoài vào
CPU lệnh MOVX A, @DPTR được thực hiện và lệnh sẽ đọc byte dữ liệu do thanh ghi
DPTR trỏ đến. Mặc dù cả hai lệnh MOVC A, @A+DPTR và MOVX A, @DPTR khá
3
giống nhau về hình thức, nhưng điểm khác nhau cơ bản một lệnh thực hiện nhận dữ liệu
từ vùng nhớ chương trình, còn lệnh kia thì nhận dữ liệu từ vùng dữ liệu.
Để nối ghép 8051 với bộ nhớ dữ liệu ngoài thì cần sử dụng chân RD để điều
khiển đọc dữ liệu và chân WR để điều khiển ghi dữ liệu. Bộ nhớ dữ liệu có thể là ROM
dữ liệu hoặc RAM dữ liệu. Khi kết nối với ROM dữ liệu thì chỉ cần sử dụng chân RD (vì
bộ nhớ ROM là bộ nhớ chỉ đọc), còn khi kết nối với bộ nhớ RAM dữ liệu thì cần sử dụng
cả 2 chân RD và WR (bộ nhớ RAM vừa cho phép đọc vừa cho phép ghi dữ liệu).
Ví dụ 1: Hãy vẽ sơ đồ kết nối vi điều khiển 8051 với bộ nhớ ROM dữ liệu dung
lượng 8Kx8 và viết chương trình đọc 30 byte dữ liệu ở bộ nhớ dữ liệu ngoài từ địa chỉ
1000h đưa ra cổng P1.
Giải:
Sơ đồ kết nối 8051 với bộ nhớ ROM dữ liệu như sau:
Lưu ý rằng ta sử dụng cổng logic để làm bộ giải mã cho ROM dữ liệu tạo ra địa

6
7
8
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
P S E N
A L E
V C CG N D
E A
X 1
X 2
R S T
P 0 . 0 / A D 0
P 0 . 1 / A D 1
P 0 . 2 / A D 2
P 0 . 3 / A D 3

N O T
12
A 5
A D 1
A 1 2
A 6
C 6
3 3 p
A 1 4
A 1 1
R D
A 7
A D 6
C 5
3 3 p
V C C
A D 0
V C C
A D 5
A D 1
A 7
U 4
N O T
12
R D
A 1 0
A D 7
A 2
A 5
S W 1

U 2
7 4 L S 3 7 3
3
4
7
8
1 3
1 4
1 7
1 8
1
1 1
2
5
6
9
1 2
1 5
1 6
1 9
2 0
1 0
D 0
D 1
D 2
D 3
D 4
D 5
D 6
D 7

U 7
2 7 6 4
1 0
9
8
7
6
5
4
3
2 5
2 4
2 1
2 3
2
1 1
1 2
1 3
1 5
1 6
1 7
1 8
1 9
2 81 4
2 2
2 7
1
2 0
A 0
A 1

MOV R2, #30 ;so byte can chuyen vao
AGAIN:
4
MOVX A, @DPTR
MOV P1, A
INC DPTR
DJNZ R2, AGAIN
Ví dụ 2: Vẽ sơ đồ ghép nối 8051 với RAM dữ liệu ngoài 6264 dung lượng 8Kx8
và viết chương trình để 8051 lấy 10 byte dữ liệu được cất từ địa chỉ 1000h trên RAM dữ
liệu ngoài đưa vào RAM nội có địa chỉ từ 30h.
Giải: Sơ đồ kết nối như sau:
Lưu ý rằng ta sử dụng cổng logic để làm bộ giải mã cho RAM dữ liệu tạo ra địa
chỉ vùng dữ liệu từ 0000h – 1FFFh và chân RD, WR của 8051 được nối lần lượt với chân
OE, WE của RAM dữ liệu.
A 1 5
A 1 0
A D 0
U 5
N O T
12
A 3
R D
A D 1
A D 2A D 2
C 4
1 0 u
A 3
A 7
A 1 3
V C C

9
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
1
2
3
4
5
6
7
8
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
1 0
1 1
1 2
1 3
1 4

P 2 . 4 / A 1 2
P 2 . 5 / A 1 3
P 2 . 6 / A 1 4
P 2 . 7 / A 1 5
P 3 . 0 / R X D
P 3 . 1 / T X D
P 3 . 2 / I N T 0
P 3 . 3 / I N T 1
P 3 . 4 / T 0
P 3 . 5 / T 1
P 3 . 6 / W R
P 3 . 7 / R D
A D 2
A D 1
U 2
7 4 L S 3 7 3
3
4
7
8
1 3
1 4
1 7
1 8
1
1 1
2
5
6
9

A L E
A 5
U 7
6 2 6 4
1 0
9
8
7
6
5
4
3
2 5
2 4
2 1
2 3
2
1 1
1 2
1 3
1 5
1 6
1 7
1 8
1 9
2 81 4
2 2
2 7
2 0
2 6

U 6
N A N D 1
1
2
3
4
A D 5
V C C
A 1 4
Y 1
1 1 . 0 5 9 2
A 1 2
A 7
A 4
U 3
N O T
12
A 8 A 0
A D 4
A L E
C 5
3 3 p
S W 1
A 1 1
A D 6
A 1 2
A D 3
A 5
A D 4
V C C

Vùng địa chỉ
Đặc tính
truy xuất
Loại bộ nhớ
Dung lượng
0CS
0000H - 3FFFH
PSEN
EPROM 27128
16Kx8
1CS
4000H - 7FFFH
PSEN
EPROM 27128
16Kx8
2CS
8000H - 9FFFH
WR,RD
HM6264B
8Kx8
Giải:
Trước hết chúng ta hãy phân tích về vùng nhớ của từng IC trên.
- EPROM 27128 (16Kx8) có 14 chân địa chỉ từ A0 – A13 vì 16K = 2
4
.2
10
= 2
14
byte.
- IC này có thể địa chỉ được 2

9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0
Địa
chỉ
IC1
0

0
0

0
0


1
0

1
0

1
0

1
0

1
IC2
0

0
1

1
0

1
0

1
0

1
0


1
0

1
IC3
1

1
0

0
0

0
0

1
0

1
0

1
0

1
0

1

bảng trạng thái của IC này (xem phần các mạch phụ trợ) thấy chân C luông bằng 0, do vậy
chân này sẽ được nối xuống Mass. Ta sẽ sử dụng 2 chân địa chỉ cao là A14 và A15 để
phối hợp với A và B tạo ra các tín hiệu chọn chip.
6
Sơ đồ kết nối như sau:
A 1 2
A 1 4
D 1A D 1
A 1 0
A 3
V C C
D 0A 0
A 7
A L E
Y 2
W R
A 3
A 2
A 1 1
A D 6
P S E N
A D 0
A 5
A 7
A 9
A 0
A D 7
A D 2
A 1 1
U 7 2

G 2 B
A 1 1
A 1 5
A 1 2
V C C
A 0
A 1 2
V C C
A D 4
U 7 1
2 7 1 2 8
1 0
9
8
7
6
5
4
3
2 5
2 4
2 1
2 3
2
2 6
1
1 1
1 2
1 3
1 5

D 6
D 7
V C C
G N D
C E
O E
P G M
D 1
A 1 3
A 8
A 3
A 1 1
A 8
S W 1
Y 1
A D 1
A 4
A 2
A 1
A 9
A 7
Y 1
A 1 2
V C C
D 2
A 5
D 1
V C C
A D 3
Y 0

1 6
1 7
1 8
1 9
2 81 4
2 2
2 7
2 0
2 6
A 0
A 1
A 2
A 3
A 4
A 5
A 6
A 7
A 8
A 9
A 1 0
A 1 1
A 1 2
D 0
D 1
D 2
D 3
D 4
D 5
D 6
D 7

9
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
1
2
3
4
5
6
7
8
2 1
2 2
2 3
2 4
2 5
2 6
2 7
2 8
1 0
1 1
1 2
1 3
1 4

P 2 . 4 / A 1 2
P 2 . 5 / A 1 3
P 2 . 6 / A 1 4
P 2 . 7 / A 1 5
P 3 . 0 / R X D
P 3 . 1 / T X D
P 3 . 2 / I N T 0
P 3 . 3 / I N T 1
P 3 . 4 / T 0
P 3 . 5 / T 1
P 3 . 6 / W R
P 3 . 7 / R D
U 6 6
7 4 L S 3 7 3
3
4
7
8
1 3
1 4
1 7
1 8
1
1 1
2
5
6
9
1 2
1 5

2 7 1 2 8
1 0
9
8
7
6
5
4
3
2 5
2 4
2 1
2 3
2
2 6
1
1 1
1 2
1 3
1 5
1 6
1 7
1 8
1 9
2 8
1 4
2 0
2 2
2 7
A 0

V C C
A 1
V C C
A 8
A 9
A 8
V C C
R D
D 5
A 1 4
A D 7
A D 5
A 1 2
A 9
Y 2
A D 4
A D 0
A 1 0
A 3
A 4A 4
A L E
A 1 3
A D 5
A 1 3
D 4
A 1 0
A D 7
A D 0
A 5
A 1 5

1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
2 0
1 0
A 0
A 1
A 2
A 3
A 4
A 5
A 6
A 7
G
D I R
B 0
B 1
B 2
B 3
B 4
B 5
B 6
B 7
V C C
G N D

là IC 8255A. 8255A là một vi mạch ghép nối được dùng rất phổ biến cho các hệ vi xử lý 8
- 16 bit. Nó cho phép giao tiếp mềm dẻo trong nhiều ứng dụng thực tế với nhiều cửa vào
ra. Đối với các hệ vi xử lý nhỏ, 8255A có thể nối trực tiếp với các mạch vi xử lý. Trong
7
các hệ thống lớn hơn, việc ghép nối chỉ cần thêm một số mạch tối thiểu. Đó là một trong
những tính chất quan trọng của bộ ghép nối 8255A.
Tính linh hoạt của vi mạch này thể hiện ở khả năng lập trình. Qua một thanh ghi
điều khiển, người sử dụng có thể đặt chế độ hoạt động và cấu hình của các cửa vào ra. Các
chân số liệu tạo nên BUS dữ liệu theo hai hướng, rộng 8 bit. Tất cả các dữ liệu khi truy
nhập đọc hoặc ghi được dẫn qua các đường dẫn này.
4.2.2. GHÉP NỐI 8051 VỚI 8255A
4.2.2.1. Chức năng các chân của 8255A
8255A là một chip DIP 40 chân (Sơ đồ chân hình 4.1.1a và sơ đồ khối hình
4.1.1b). Có 3 cổng truy cập riêng biệt. Cổng A, cổng B, cổng C và đều là các cổng 8
bit. Các cổng này có thể là các cổng vào hoặc ra và có thể thay đổi một cách linh hoạt.
- Các chân từ PA0 – PA7: Có thể lập trình thanh 8 bit đầu vào hoặc 8 bit đầu ra
hoặc cả 8 bit hai chiều vào/ra.
- Các chân từ PB0 – PB7: Có thể lập trình thanh 8 bit đầu vào hoặc 8 bit đầu ra
hoặc cả 8 bit hai chiều vào/ra.
- Các chân từ PC0 – PC7: Có thể lập trình thanh 8 bit đầu vào hoặc 8 bit đầu ra.
8 Bit này cũng có thể được chia thành hai phần: Các bit cao (PC4 – PC7) là
PCH và các bit thấp (PC0 – PC3) là PCL. Mỗi phần có thể được dùng làm đầu
vào hoặc đầu ra.
- Các chân
RD

WR
: Đây là hai chân điều khiển tích cực ở mức thấp tới
8255A được nối từ
RD

các cổng A, B, C hoặc các thanh ghi điều khiển theo bảng dưới đây (Bảng
5.4.2a).
8
Bảng 5.4.2a. Phối hợp
CS
và A
1
A
2
chọn cổng
CS
A
0
A
1
Chọn cổng
0 0 0 Cổng A
0 0 1 Cổng B
0 1 0 Cổng C
0 1 1 Thanh ghi điều khiển
1 x x 8255 không được chọn
Sau đây là bảng phối hợp các chân
CS
, A, 1 A2,
RD

WR
để tạo ra chức
năng các cổng và thanh ghi điều khiển của 8255A.
Bảng 5.4.2b. Các lệnh chọn cổng và thanh ghi của 8255

A1
RESET
CS
WR
RD
D7
D0
PB
2
PA3
PA2
PA1
PA0
P1.4
P1.5
GND
A1
A0
PA
5
PA
6
PA
7
WR
RESE
TTTT
TT
D
0

37
34
33
32
30
29
31
28
27
26
24
23
25
22
21
8
2
5
5
A
D
1
D
2
D
3
D
4
D
5

Trong khi các cổng A, B, C được dùng để xuất/nhập dữ liệu thì thanh ghi điều
khiển phải được lập trình để chọn chế độ làm việc cho các cổng này. Các cổng của
8255A có thể được lập trình theo một trong các chế độ dưới đây.
 Chế độ 0: Vào/ra thông thường
- Các cửa A, B, C được làm việc độc lập nhau.
- Các cửa A, B, C có thể là cửa vào hoặc ra tuỳ theo chế độ trong thanh ghi điều
khiển (ra số liệu được chốt, vào không chốt).
- Không có sự đối thoại giữa vi xử lý với thiết bị ngoại vi. Nếu muốn có tín hiệu
đối thoại phải dùng các bit của một cửa nào đó (thường là cửa C) bằng cách
xác lập từng bit PCi. Khi đó cửa C được xem như là hai cửa 4 bit với khả năng
lập/xoá từng bit.
 Chế độ 1: Chốt vào/ra
Chia làm hai nhóm.
- Nhóm A: Gồm cửa A để trao đổi số liệu và nửa C cao (PC4 - PC7) để đối thoại
với vi xử lý và thiết bị ngoại vi của cửa A.
- Nhóm B: Gồm cửa B để trao đổi số liệu và nửa C thấp (PC0 - PC3) để đối
thoại với vi xử lý và thiết bị ngoại vi của cửa B.
 Chế độ 2: Bus hai chiều
Chỉ dùng cho cửa A với số liệu vào/ra 2 chiều tạo thành một Bus chứa:
- Cửa A (Bus hai chiều).
- 5 đường điều khiển (PC3 – PC7).
10
Đệm
dữ
liệu
Logic
điều
khiển
đọc
ghi

- Trường hợp 1 có từ điều khiển là: 1000 0000 = 80H
- Trường hợp 2 có từ điều khiển là: 1001 0001 = 91H
Ví dụ 2: Cho sơ đồ ghép nối 8081 với 8255A (hình 5.4.2d) hãy:
a) Tìm các địa chỉ vào/ra được gán cho các cổng A, B, C và thanh ghi điều khiển.
b) Hãy lập trình 8255A cho các cổng A, B, C thành các cổng ra.
c) viết một chương trình để gửi 55H và AAH đến cổng ra một cách liên tục.
Giải:
1 = I/O Mode
0 = BSR
Mode
Mode Selection
00 = Mode 0
01 = Mode 1
1x = Mode2
Port A
1 = Input
0 = Output
Port C (Upper
PC7 - PC4)
1 = Input
0 = Output
Mode
Selcction
0 = Mode 0
1 = Mode 1
Port B
1 = Input
0 = Output
Port C (Lowe
PC3 – PC0)

(PC)
x 1 x x x x x x x x x x x x 1 1
=4003H
(CR)
b) Từ điều khiển cho 8255A cho cấu hình: Tất cả các cổng A, B, C đều là các
cổng ra (chế độ 0) là 80H (đã trình bày ở ví dụ 1).
c) Viết chương trình để gửi 55H và AAH đến cổng ra một cách liên tục.
MOV A, #80H ;tu dieu khien
MOV DPTR, #4003H ;nap d/c cong cua
thanh
;ghi dieu khien
MOVX @DPTR, A ;xuat tu dieu khien
MOV A, #55H ;gan A = 55
AGAIN: MOV DPTR, #4000H ;dia chi cong PA
MOVX @DPTR, A ;dua ra cong PA
INC DPTR ;dia chi cong PB
MOVX @DPTR, A ;dua ra cong PB
INC DPTR ;dia chi cong PC
MOVX @DPTR, A ;dua ra cong PC
CPL A ;dao gtri cua A
(A=AAH)
ACALL DELAY ;tao tre
SJMP AGAIN ;tiep tuc
12
Hình 5.4.2d: Nối ghép 8051 với 8255A cho ví dụ 2
Ví dụ 3: Cho sơ đồ ghép nối 8051 với 8255A như hình vẽ (hình 5.4.2e), hãy:
a) Tìm địa chỉ cổng vào/ra được gán cho các cổng A, B, C và thanh ghi điều
khiển.
b) Tìm từ điều khiển cho trường hợp PA là đầu ra, PB là đầu vào, PC0 – PC3 là
đầu vào, PC4 – PC7 là đầu ra.

RD
P2.7
PA
PB
PC
A1
D7
D0A0
D7
D0
A14
13
Hình 5.4.2e: Nối ghép 8051 với 8255A cho ví dụ 3
b) Từ điều khiển cho trường hợp PA là đầu ra, PB là đầu vào, PC0 – PC3 là đầu
vào, PC4 – PC7 là đầu ra là: 1000 0011B = 83H.
c) Viết chương trình để nhận dữ liệu từ PB gửi ra PA. nhận dữ liệu từ PCL gửi ra
PCH.
CR EQU 83H ;thanh ghi tu dieu
khien
APORT EQU 20H ;dia chi cong A
BPORT EQU 21H ;dia chi cong B
CPORT EQU 22H ;dia chi cong C
CRPORT EQU 23H ;dia chi t.ghi d.khien

MOV A, #CR ;PA, PCH la cong vao, PB,
;PCL la cong ra
MOV R0, #CRPORT ;nap dia chi cong
thanh
;ghi dieu khien
MOVX @R0, A ;xuat tu dieu khien

8255
A
WR
CS
WR
D7
RD
PA
PB
PC
L
RES
A2
A7
PCU
14
MOVX @R0, A ;gui den PCH
Đối với hệ thống cần nhiều 8255A ta sử dụng mạch giải mã 74LS138 để giải
mã như sơ đồ dưới đây:
Hình 5.4.2f. Sử dụng 74LS138 để ghép nối nhiều vi mạch 8255A
Ví dụ 4: Cho sơ đồ hình 5.4.2g, hãy lập trình cho 8255A để:
a) Đặt PC1 lên cao.
b) Sử dụng PC2 để tạo xung vuông liên tục với độ dày xung là 50%
Hình 5.4.2f. Hình vẽ mô tả cho ví dụ 4
Giải:
a) Đặt PC1 lên cao: Từ hình vẽ 5.4.2c ta tìm ra được từ điểu khiển ở chế độ lập
bit PC1 như sau: 0000 0011B
MOV R0, #CRPORT ;nap dia chi thanh ghi dieu
khien
MOV A, #00000011 ;chon PC1 = 1

S
1
3
8
Mạch
giảI mã
A2
A7
D0
D7
CS
WR
RD
RD
WR
A0
A1
A7
A0
PCi
8255
15
Ví dụ 5: Hãy sử dụng mạch giải mã 74LS138 để giải mã chọn chip 8255A với
địa chỉ cơ sở của cổng là 20h. Viết chương trình để điều khiển các 7 LED nối trên
cổng PB (từ PB0 – PB6) sáng theo quy luật từ trái qua phải.
Giải:
ORG 0000H
CR EQU 80H ;PA, PB, PC LA CONG RA
APORT EQU 20H ;DIA CHI CONG A
BPORT EQU 21H ;DIA CHI CONG B

D4
D5
D6P3.0
D7P3.1
ALEP3.4
A0 A2
A1 A3
A2 A4
A3
A4
A5 A5
A6 A6
A7 A7
Y0
Y0 D0
Y1 D1
Y2 D2
Y3 D3
Y4 D4
Y5 D5
Y6 D6
Y7 D7
RD
WR
A0
A1
D0
D1
D2
D3

PA0
PA7
PA6
PA5
PA4
PA3
PA2
PA1
XTAL2
18
XTAL1
19
RST
9
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15

33pF
C3
100uF
R1
0.5k
VCC
D0
3
Q0
2
D1
4
Q1
5
D2
7
Q2
6
D3
8
Q3
9
D4
13
Q4
12
D5
14
Q5
15

Y2
13
Y3
12
Y4
11
Y5
10
Y6
9
Y7
7
U3
74LS138
D0
34
D1
33
D2
32
D3
31
D4
30
D5
29
D6
28
D7
27

PB1
19
PB2
20
PB3
21
PB4
22
PB5
23
PB6
24
PB7
25
PC0
14
PC1
15
PC2
16
PC3
17
PC4
13
PC5
12
PC6
11
PC7
10

4.3.1. PHỐI GHÉP VI XỬ LÝ VỚI MÀN HÌNH TINH THỂ LỎNG
LCD
Ngày nay trong lĩnh vực thông tin và giải trí, việc dùng màn hình ống tia ca tốt
truyền thống (CRT) đang dần được thay thế bằng việc sử dụng màn hình tinh thể lỏng
(LCD - Liquid Crystal Display). Vì LCD có nhiều ưu điểm vượt trội như: Độ dày màn
hình nhỏ hơn rất nhiều , Kích thước đa dạng từ loại màn hình nhỏ tới màn hình cực lớn,
Tiêu thụ ít năng lượng và không nguy hiểm bằng CRT.
LCD dùng trong lĩnh vực điều khiển
LCD dùng trong thông tin giải trí
(Màn hình Tivi, máy vi tính)
LCD dùng trong truyền thông
(Màn hình điện thoại, hiển thị của hệ
thống chuyên dụng)
Ở phần này chúng ta chỉ xét tới LCD loại nhỏ và việc dùng LCD để hiển thị của hệ
thống chuyên dụng và đi nghiên cứu cách ghép nối LCD với 8051 và lập trình.
4.3.1.1. Mô tả chân của LCD
LCD có tổng số 14 chân chia làm 3 nhóm (hình 4.3.1a):
Nhóm1: (3chân) Cấp nguồn VDD, VSS: cấp 5V, 0V
VEE: thay đổi điện áp để thay đổi độ tương phản.
Nhóm 2: (8 chân) Vào ra thông tin với VĐK: Từ chân D0-D7
Nhóm 3: (3 chân) Điều khiển việc vào ra thông tin: E, RS, R/W
E:(bật /tắt) (cho phép/ không cho phép trao đổi thông tin với VĐK)
17
RS:(loại thông tin trao đổi)Thông tin trao đổi là lệnh điều khiển hay
là dữ liệu để hiển thị
- Vcc, Vss, VEE: Vcc và Vss là chân nguồn +5V và chân đất. Còn VEE được
dùng để điều khiển độ tương phản của LCD.
- RS (Register Select) – Chọn thanh ghi: Có hai thanh ghi rất quan trọng bên
trong CPU. Chân RS được dùng để chọn các thanh ghi này. Nếu RS = 0 thì
thanh ghi mã lệnh được chọn, cho phép người dùng gửi một lệnh chẳng hạn

F Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
1C Dịch toàn bộ hiển thị sang phải
80 Đưacon trỏ về đầu dòng thứ nhất
C0 Đưa con trỏ về đầu dòng thứ hai
38 Hai dòng ma trận 5x7
Bảng 4.3.1b. Mã lệnh LCD
Bảng 5.6.1b được trích từ bảng 4.3.1c là bảng liệt kê lệnh chi tiết của LCD
Lệnh
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Mô tả
Thời
gian thực
hiện
19
Xoá
màn
hình
0 0 0 0 0 0 0 0 0 1

Điều
khiển
Bật/tắt
hiển thị
0 0 0 0 0 0 1 D C B
Đặt Bật/ tắt màn hình
(D) Bật/ tắt con trỏ (C)
và nhấp nháy ký tự ở
vị trí con trỏ (B)
40 µs
Dịch
hiển thị
và con
trỏ
0 0 0 0 0 1
S
/
C
R
/
L
- -
Dịch con trỏ và dịch
hiển thị mà không thay
đổi DD RAM
40 µs
Đặt
chức
năng
0 0 0 0 1

địa chỉ
0 1
B
F
ADD
Cờ bận đọc (BF) báo
hoạt động bên trong
đang được thực hiện
và đọc nội dung bộ
đếm địa chỉ
40 µs
Ghi dữ
liệu
CG
hoặc
DD
RAM
1 0 Ghi dữ liệu
Ghi dữ liệu vào DD
RAM hoặc CG RAM
40 µs
Đọc dữ
liệu
CG
hoặc
DD
RAM
1 1 Đọc dữ liệu
Đọc dữ liệu vào DD
RAM hoặc CG RAM

- Ghi lệnh chọn LCD 2 dòng, ma trận 5x7.
- Hiển thị màn hình và con trỏ.
- Xoá LCD.
- Dịch con trỏ sang phải.
- Hiển thị liên tục dòng chữ “BM KY THUAT VDK !”
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6

17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
D7
14
D6
13
D5
12
D4

R2
0.5k
C3
10uF
RV1
10k
Giải:
; gọi độ thời gian trễ trước khi gửi dữ liệu/ lệnh kế tiếp.
; chân P1.0-P1.7 được nối tới chân dữ dữ liệu D0-D7 của LCD.
; Chân P2.0 được nối tới chân RS của LCD.
22
; Chân P2.1 được nối tới chân R/W của LCD.
; Chân P2.2 được nối đến chân E của LCD.
ORG 0000H
STRING: DB 'BM KY THUAT VDK !'
ORG 1000H
LAP: MOV A, #38H ;LCD 2 dong, ma tran 5x7
ACALL COMMAND ;truyen lenh den LCD
ACALL DELAY ;tao tre cho LCD
MOV A, #0EH ;hien thi man hinh, con tro
ACALL COMMAND ;truyen lenh den LCD
ACALL DELAY ;tao tre cho LCD
MOV A, #01H ;xoa LCD
ACALL COMMAND ;truyen lenh den LCD
ACALL DELAY ;tao tre cho LCD
MOV A, #06H ;dich con tro sang phai
ACALL COMMAND ;truyen lenh den LCD
MOV DPTR, #0000H
HIEN: CLR A
MOVC A, @A+DPTR

Ví dụ 1: Làm lại ví dụ trên nhưng trong chương trình chúng ta không dùng
phương pháp tạo trễ mà liên tục kiểm tra cờ bận trước khi gửi lệnh/dữ liệu tới LCD.
Chương trình được viết như sau:
; Kiểm tra cờ bận trước khi gửi dữ liệu, lệnh ra LCD
; Đặt P1 là cổng dữ liệu
; Đặt P2.0 nối tới cổng RS
; Đặt P2.1 nối tới chân R/W
; Đặt P2.2 nối tới chân E
ORG 0000H
STRING: DB 'BM KY THUAT VDK !'
ORG 1000H
LAP: MOV A, #38H ;LCD 2 dong, ma tran 5x7
ACALL COMMAND ;truyen lenh den LCD
MOV A, #0EH ;hien thi man hinh, con tro
ACALL COMMAND ;truyen lenh den LCD
MOV A, #01H ;xoa LCD
ACALL COMMAND ;truyen lenh den LCD
MOV A, #06H ;dich con tro sang phai
ACALL COMMAND ;truyen lenh den LCD
MOV DPTR, #0000H
HIEN: CLR A
MOVC A, @A+DPTR
24
ACALL DISPLAY
INC DPTR
CJNE A, #'!', HIEN ;kiem tra xem da het chuoi ky
tu?
SJMP LAP
COMMAND: ;ctc truyen lenh den LCD
ACALL READY ;LCD da san sang chua?


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status