Giáo tiếp_chương 5 - Pdf 72

Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

1
CHƯƠNG 5: GIAO TIẾP

I. GIAO TIẾP BỘ NHỚ NGOÀI
Họ VĐK 8051 có một lượng ROM nội on-chip. Đối với những thiết kế hệ thống tương đối
nhỏ, lượng ROM on-chip của nó là đủ để chứa chương trình thực thi. Tuy nhiên, đối với những
thiết kế hệ thống lớn, mã chương trình thực thi có thể vượt quá dung lượng ROM on-chip hoặc
dữ liệu cần lưu trữ tương đối nhiều, do đó cần phải mở rộng bộ nhớ cho hệ thống bằng cách sử
dụng thêm ROM ngoài hoặc RAM ngoài.
Như đã biết ở chương 2, khi giao tiếp bộ nhớ ngoài, port 0 là dồn kênh của bus dữ liệu và
byte thấp của bus đòa chỉ, còn port 2 là byte cao của bus đòa chỉ. Như vậy, cần có một IC chốt
bên ngoài được nối với port 0 để giữ byte đòa chỉ thấp khi giao tiếp với bộ nhớ ngoài. Byte đòa
chỉ thấp được chốt vào IC ngoài bằng xung ALE từ vi điều khiển 8051. Sau đó, port 0 trở thành
bus dữ liệu hai chiều trong suốt giai đoạn đọc hay ghi của chu kì máy.
* Quy tắc chung về thiết kế mạch giao tiếp bộ nhớ với MCS-51
1. Lập bảng bộ nhớ
- Lập bảng bộ nhớ cho hệ thống và các ứng dụng phụ thuộc.
- Đối với MCS-51, nên tách riêng 64K bộ nhớ chương trình và 64K bộ nhớ dữ liệu.
- Để sử dụng những đòa chỉ trên 64K thì sử dụng thêm các bit từ những cổng I/O
không sử dụng để làm các đường đòa chỉ cao.
2. Chọn linh kiện bộ nhớ thích hợp.
3. Sử dụng mạch giải mã đòa chỉ (nếu cần) để tạo các tín hiệu chọn chip cho bộ nhớ.
4. Sử dụng đường /PSEN cho bộ nhớ chương trình hoặc các đường /RD, /WR cho bộ nhớ
dữ liệu để truy xuất đến các chân đọc/ghi bộ nhớ.
5. Chân /EA = VCC nếu sử dụng ROM nội hoặc /EA = 1 nếu sử dụng ROM ngoài.
A11
A9
D3
A8

4
7
8
13
14
17
18
1
11
2
5
6
9
12
15
16
19
D0
D1
D2
D3
D4
D5
D6
D7
OC
G
Q0
Q1
Q2

8
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27
28
17
16
29
30
11
10
EA/VP
X1
X2
RESET
INT0
INT1
T0

RXD
+
C3
10u
R1
8.2K
Addr bus[A0..A15]
A0
D0
D1
D6
A10
A4
A5
A12
D5
D4
A4
VCC
A12
D7
D6
A3
C1 30p
A5
D0
2764
10
9
8

A8
A9
A10
A11
A12
CE
OE
PGM
VPP
O0
O1
O2
O3
O4
O5
O6
O7
D5
A1
D7
/RD
/RD
Data bus[D0..D7]
A10
Vcc
/WR
A14
A5
D2
A3

2
11
12
13
15
16
17
18
19
22
27
20
26
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3

A9
8K
D5
RAM
/RD
D5
62256 (32K)
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
20
22
27
11
12
13
15
16

D1
A4
D4
A6
A9
A8
A15
/RD
D3
A2
D2
A9
Data bus[D0..D7]
6264 (8K)
A2
A1
JP1
JP5
J1 J2
Vcc
A8
A15
VCC
A7
R2
100
D5
D0
A12
A0

D3
D4
D5
D6
D7
OC
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
PSEN
A8
NA
R3
10K
D1
Vcc
D2
PSEN
27128 (16K)
C1 30p
A10
A3
D4
None

27512 (64K)
10
9
8
7
6
5
4
3
25
24
21
23
2
26
20
22
27
1
11
12
13
15
16
17
18
19
A0
A1
A2

19
18
9
12
13
14
15
1
2
3
4
5
6
7
8
39
38
37
36
35
34
33
32
21
22
23
24
25
26
27

P0.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/P
TXD
RXD
32K
A6
D3
J4 J5
JP4
/WR
D1
J1 J2 J3
D2
A1
A14
A5
JP2
A10
D5Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

3
Hình 5.3
Ví dụ 5.2: Thiết kế kit 8031 với 2 ROM 2764.
Giải:
Cách 1: dùng bộ giải mã 3 → 8
- ROM 2764 có dung lượng 8KB, tương ứng với 13 đường đòa chỉ.
- Chọn phân vùng 8KB = 2
13
byte → đưa 13 đường đòa chỉ thấp A0 ÷ A12 đến các
đường đòa chỉ tương ứng của 2 ROM 2764. 3 đường đòa chỉ còn lại là A13, A14, A15
được đưa đến bộ giải mã 3 → 8.
VCC
D3
+
C3
10u
A8
A13
A10
A2
C2 30p
D0
/CS1
A2

23
24
25
26
27
28
17
16
29
30
11
10
EA/VP
X1
X2
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P0.0
P0.1

13
12
11
10
9
7
1
2
3
5
4
6
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
A
B
C
G2B
G2A
G1
D4
D6
D1
D3

12
13
15
16
17
18
19
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
CE
OE
PGM
VPP
O0
O1
O2
O3
O4
O5

25
24
21
23
2
20
22
27
1
11
12
13
15
16
17
18
19
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12

2
5
6
9
12
15
16
19
D0
D1
D2
D3
D4
D5
D6
D7
OC
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A11
D0
Data bus[D0..D7]
A3

A15
A1
C1 30p
A8

Hình 5.4

Mạch giải mã đòa chỉ
Bus dữ liệu
Bus đòa chỉ
A0-A12
D0-D7
A0-A12
2764
EPROM
(8KB)
CS
OE
D0-D7
A0-A12
6264
RAM
(8KB)
WR
CS
OE
A14
74LS138
A
B

(
CS
) của 2 ROM. Ở đây, có thể chọn
0
Y
(0000H ÷ 1FFFH) và
1
Y
(2000H ÷
3FFFH).
Lưu ý: Nếu là ROM chứa chương trình thì đòa chỉ bắt đầu phải là 0000H vì trong
8031/8051, thanh ghi PC sẽ chứa giá trò 0000H ngay sau khi khởi động.
- Sơ đồ mạch kết nối (giả sử các ROM dùng chứa chương trình) như ở hình 5.4.
- Nếu dùng ROM chứa dữ liệu thì chân /OE của ROM được nối với tín hiệu /RD.
Cách 2: Nếu dùng ROM chứa dữ liệu thì có thể thiết kế như sau:
Do chỉ có 2 chip nhớ ngoài nên có thể chỉ thực hiện mạch giải mã 1 → 2. Mạch này
có thể đơn giản như sau:
Hình 5.5
A15 = 0: chọn ROM1 (
1
CS
ROM
: 0000H ÷ 7FFFH)
A15 = 1: chọn ROM2 (
2
CS
ROM
: 8000H ÷ FFFFH)
Vùng đòa chỉ ứng với mỗi chân chọn chip sẽ là 32KB → mỗi ROM sẽ có 4 vùng đòa
chỉ 8KB:

- Bảng đòa chỉ bộ nhớ:
Chip A15 A14 A13 A12 …… A0 Đòa chỉ (HEX)
RAM 1 0 1 0 x …… x 4000H ÷ 5FFFH
RAM 1 0 1 1 x …… x 6000H ÷ 7FFFH
RAM 2 1 0 0 x …… x 8000H ÷ 9FFFH
RAM 2 1 0 1 x …… x A000H ÷ BFFFH
7404
A15
1
CS
ROM
2
CS
ROM
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

5
Nhận xét: Do đường đòa chỉ A13 không được kết nối nên có thể chọn giá trò là 0 hay 1.
Vì thế mỗi chip RAM sẽ có 2 vùng đòa chỉ 8KB tương ứng với giá trò 0 và 1 của A13.
A4
A9
A1
Vcc
A5
A6
/WR
/RD
A15
A12
/CS1

17
18
19
22
27
20
26
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3
D4
D5
D6
D7
OE
WE

A10
/CS1
D6
D0D0
D5
A7
A3
D4
74HC138
15
14
13
12
11
10
9
7
1
2
3
5
4
6
Y0
Y1
Y2
Y3
Y4
Y5
Y6

22
27
20
26
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3
D4
D5
D6
D7
OE
WE
CS1
CS2
D1

23
24
25
26
27
28
17
16
29
30
11
10
EA/VP
X1
X2
RESET
INT0
INT1
T0
T1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
P0.0
P0.1

A3
A0
74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9
12
15
16
19
D0
D1
D2
D3
D4
D5
D6
D7
OC

D2
R2
100
Addr bus[A0..A15]
D5
A6
/WR
D0

Hình 5.6
Ví dụ 5.4: Thiết kế mạch giải mã đòa chỉ cho kit 8031 với 1 ROM 2764 và 2 ROM 2732.
Giải:
Vì không yêu cầu đòa chỉ cụ thể nên vùng đòa chỉ của các chip nhớ là tùy người thiết kế.
ROM 2764 có dung lượng 8KB = 2
13
byte → có 13 đường đòa chỉ vào từ A0 ÷ A12.
ROM 2732 có dung lượng 4KB = 2
12
byte → có 12 đường đòa chỉ vào từ A0 ÷ A11.
Cách 1: Chọn phân vùng 8KB
- Đưa các đường đòa chỉ A0 ÷ A12 đến ROM 2764 và các đường đòa chỉ A0 ÷ A11
đến mỗi ROM 2732. 3 đường đòa chỉ cao A13, A14, A15 được đưa đến bộ giải mã 3→
8 (ở đây dùng IC 74138).
- Mạch giải mã đòa chỉ và bảng đòa chỉ tương ứng:
VCC
/CS2
74HC138
15
14
13

ROM 2764 0000H ÷ 1FFFH
CS0

ROM 2732 – 1
2000H ÷ 2FFFH
3000H ÷ 3FFFH
CS1

ROM 2732 – 2
4000H ÷ 4FFFH
5000H ÷ 5FFFH
CS2Hình 5.7
- Như vậy mỗi chip ROM 2732 sẽ có 2 vùng đòa chỉ 4KB tương ứng.
Cách 2: Chọn phân vùng 4KB
- Các đường đòa chỉ A0 ÷ A11 đưa đến các chân đòa chỉ tương ứng trên các chip ROM
2732 và A0 ÷ A12 đưa đến chip ROM 2764. Các đường đòa chỉ A12 ÷ A15 đưa đến
bộ giải mã 4 → 16 (giả sử dùng 74154). Như vậy, sẽ có 16 vùng, mỗi vùng 4KB.
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

6
- Tín hiệu chọn chip ROM 2764 có thể tạo ra bằng cách AND hai ngõ ra của 74154.
- Mạch giải mã đòa chỉ có thể thực hiện như sau:
/CS2
A14 /CS1
A13
74154
1

Y9
Y10
Y11
Y12
Y13
Y14
Y15
A
B
C
D
G1
G2
7408
1
2
3
A12
/CS0
A15

Hình 5.8
- Các chân Y4 ÷ Y15 được dự trữ.
- Bảng phân vùng đòa chỉ:
Chip Vùng đòa chỉ Chân chọn chip
ROM 2764 0000H ÷ 1FFFH
CS0

ROM 2732 – 1 2000H ÷ 2FFFH
CS1

A13
D3
6264
10
9
8
7
6
5
4
3
25
24
21
23
2
11
12
13
15
16
17
18
19
22
27
20
26
A0
A1

9
7
1
2
3
5
4
6
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
A
B
C
G2B
G2A
G1
D3
A4
A1
A2
A11
VCC
/CS1
D3

VCC
D0
8 ngõ ra
Vcc
A6
A5
A7
D4
A14
A11
D2
D7
D1
A4
D3
D2
D6
/WR
A5
Vcc
2764
10
9
8
7
6
5
4
3
25

OE
PGM
VPP
O0
O1
O2
O3
O4
O5
O6
O7
D5
A10
A7
VCC
74LS373
3
4
7
8
13
14
17
18
1
11
2
5
6
9

A6
D2
D5
8051
31
19
18
9
12
13
14
15
1
2
3
4
5
6
7
8
39
38
37
36
35
34
33
32
21
22

P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
RD
WR
PSEN
ALE/P
TXD
RXD
D0
D6
A11
A4
D1
D4
A8
A14
C1 30p
D6

6
9
12
15
16
19
D0
D1
D2
D3
D4
D5
D6
D7
OC
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
/WR
A5

Hình 5.9
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp



b/ Các chip nhớ đều là 1KB = 2
10
byte → chọn phân vùng 1KB.
- Các đường đòa chỉ A0 ÷ A9 nối đến các chân đòa chỉ tương ứng trên mỗi chip nhớ.
Các đường đòa chỉ A10 ÷ A15 đưa đến mạch giải mã đòa chỉ (IC 74138).
- Bảng đòa chỉ:

Chip RAM A15 A14 A13 A12 A11 A10 A9 …… A0 Đòa chỉ HEX
0 0 0 1 0 0 0 x …… x 2000H ÷ 23FFH
1 0 0 1 0 0 1 x …… x 2400H ÷ 27FFH
2 0 0 1 0 1 0 x …… x 2800H ÷ 2BFFH
3 0 0 1 0 1 1 x …… x 2C00H ÷ 2FFFH
Nhận xét:
- Các bit A15 A14 A13 A12 luôn bằng 0010 do đòa chỉ các chip đều có số HEX bắt
đầu là 2.
- Mỗi chip được chọn tương ứng với 1 tổ hợp của A11 và A10.
→ mạch giải mã đòa chỉ có thể thực hiện như sau:
A10
/CS3
/CS3
A12
A13
A11 /CS1
74HC138
15
14
13
12
11

8
Ví dụ 5.7: Hãy xác đònh khoảng đòa chỉ của các ngõ ra 74138 cho mạch giải mã đòa chỉ sau.
/CS6
A11
A14
A10
/CS1
A12
/CS7
/CS0
A9
/CS4
/CS3
A15
A8
/CS5
A13
/CS2
74LS138
1
2
3
15
14
13
12
11
10
9
7

- Các đường A8, A9, A10 nối vào các chân điều khiển A, B, C nên các phân vùng bộ
nhớ được quy đònh bởi 8 đường đòa chỉ (A0 ÷ A7) có dung lượng 2
8
= 256 byte (0000H ÷
00FFH). Suy ra bảng đòa chỉ:
A15 A14 A13 A12 A11 A10 A9 A8 A7 …… A0 Đòa chỉ HEX Chip
1 1 1 1 1 0 0 0 x …… x F800H ÷ F8FFH /CS0
1 1 1 1 1 0 0 1 x …… x F900H ÷ F9FFH /CS1
1 1 1 1 1 0 1 0 x …… x FA00H ÷ FAFFH /CS2
1 1 1 1 1 0 1 1 x …… x FB00H ÷ FBFFH /CS3
1 1 1 1 1 1 0 0 x …… x FC00H ÷ FCFFH /CS4
1 1 1 1 1 1 0 1 x …… x FD00H ÷ ĐFFH /CS5
1 1 1 1 1 1 1 0 x …… x FE00H ÷ FEFFH /CS6
1 1 1 1 1 1 1 1 x …… x FF00H ÷ FFFFH /CS7
Vi điều khiển 8031/8051 có khả năng truy xuất trực tiếp 64Kbyte bộ nhớ chương trình
ngoài (0000H – FFFFH với
PSEN
) và 64Kbyte bộ nhớ dữ liệu ngoài (0000H – FFFFH với
RD


WR
). Trong hầu hết các ứng dụng, lượng bộ nhớ này là thích hợp. Tuy nhiên, trong một vài
ứng dụng có thể cần không gian bộ nhớ lớn hơn. Một phương pháp hiệu quả có thể dùng để
tăng thêm không gian bộ nhớ dữ liệu cho hệ thống được gọi là “chọn bank” (bank selection).
Phương pháp này tương tự như cách đònh đòa chỉ không gian 64Kbyte bộ nhớ ngoài nhưng thêm
vào mạch logic bổ sung để mở rộng số thiết bò nhớ có thể được chọn.

Hình 5.12
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

1: mở
0: đóng
VCC +5V
port
pin
10K

1: mở
0: đóng
SW
Có điện trở
kéo lên bên trong
port
pin

port
pin
VCC +5V
1: đóng
0: mở
SW
470

Hình 5.13
- Việc đọc một phím đơn là tương đối đơn giản vì chỉ có một trong hai giá trò là 0 hay 1.
Tuy nhiên, trong quá trình đọc trạng thái của phím cần phải lưu ý đến hiện tượng dội
phím hay nảy phím (do kết cấu cơ khí của phím nhấn) và phải có biện pháp chống dội
bằng phần cứng hoặc phần mềm.
+ Chống dội phím bằng phần cứng:
SW

ACALL DELAY10MS
RL A
SJMP WAIT
DELAY10MS:
MOV R7,#25
AGAIN: MOV R6,#200
DJNZ R6,$
DJNZ R7,AGAIN
RET
END
N
Y
N
Y
BEGIN
Phím nhấn?
Nạp giá trò đầu cho
thanh ghi A
Xuất (A) ra Port 2
Xoay trái (A)
DELAY10 ms
Phím nhả?
DELAY10 ms
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

11
2. Bàn phím (Keypad)
- Có nhiều loại bàn phím, tuy nhiên có thể phân làm hai loại chính. Thứ nhất là loại bàn
phím có các chân nối riêng cho mỗi phím nhấn và một chân chung cho tất cả các phím,
đối với loại bàn phím này ta có thể kết nối như một dãy các phím đơn riêng với mỗi

B
0
1
2
3
C
D
E
F
P1.4
P1.5
P1.6
P1.7
P1.0
P1.1
P1.2
P1.3
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

12
 Các phím nhấn trên ma trận bàn phím được bố trí tại giao điểm giữa hàng và cột,
khi nhấn phím thì hàng và cột tương ứng sẽ được nối với nhau.
 Muốn xác đònh phím nhấn ta tiến hành quét bàn phím. Ở đây ta thực hiện quét
từng hàng. Trước tiên ta cho hàng 1 ở mức logic 0, các hàng và cột khác ở mức
logic 1, sau đó ta đọc giá trò hàng và cột vào thông qua port 1.
 Nếu có 1 cột ở mức logic 0 tức là phím nhấn tương ứng với cột đó và hàng đang
quét đã được nhấn. Từ vò trí của hàng và cột ta sẽ đổi ra mã phím quy ước.
 Nếu không có cột nào ở mức logic 0, ta tiến hành quét hàng kế tiếp và thực hiện
tương tự trên. Việc quét hàng được thực hiện tối đa 4 lần tương ứng với 4 hàng.
 Chương trình con quét phím SCAN_KEY xác đònh phím nào được nhấn, cờ F0 = 1

(Mã phím) = (hàng)
Chuyển mã cột về 4 bit thấp
Giảm (đếm cột)
Đặt (Cờ) = 1
(C) = 0
(đếm cột) = 0
(đếm cột) = 4
Quay phải (A) qua cờ C [để
xác đònh vò trí của cột = 0]
(Mã phím) = (hàng) + số cột
[số cột = 4]
Cất mã phím vào A
RET
2
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

13
Mã 8051: (Chương trình sử dụng cờ đặt trạng thái có phím được nhấn là cờ F0)
SCAN_KEY:
MOV R1,#0FEH
MOV R6,#4
LOOP1:
MOV P1,R1
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,GET_CODE
XCH A,R1
RL A
XCH A,R1
DJNZ R6,LOOP1

470

VCC +5V
port
pin

port
pin

a) Tốt b) Kém c) Kém
Hình 5.17
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

14
- Thông thường người ta lái LED theo kiểu hút dòng, nghóa là dòng LED sáng có chiều đi
từ ngoài vào cổng I/O.
- Có thể tăng dòng bằng cách sử dụng thêm các bộ đệm nối với các chân port.
2. Giao tiếp LED 7 đoạn
a. Giới thiệu về led 7 đoạn
- Led 7 đoạn là một khối hiển thò thường bao gồm 8 led đơn với 7 led tương ứng với 7
đoạn từ a đến g và 1 led tương ứng với dấu chấm dp.
Hình 5.18 Led 7 đoạn
- Các led có một chân được nối chung với nhau, tùy theo chân nối chung là anode hay
cathode mà người ta phân ra làm 2 loại: anod chung (common anode) và cathode chung
(common cathode).
(common cathode) ck
f
g
a
c

MOV P1,A
dp
b
c
d
e
f
g
a
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp

15
SJMP LOOP
END
Hình 5.20 8051 giao tiếp với IC 74247.

* Giải mã bằng phần mềm
- Phương pháp này dùng lập trình bằng phần mềm để giải mã từ BCD sang mã
led 7 đoạn thay thế cho IC giải mã.
Ví dụ 5.12: Cho giao tiếp giữa 8051 với led 7 đoạn như hình 4 (qua IC đệm 74373 để tăng
khả năng cấp dòng cho led). Viết chương trình đọc mã BCD nhập từ dip-switch nối với port
2 và hiển thò số tương ứng lên led 7 đoạn.
Hình 5.21: 8051 giao tiếp với led 7 đoạn qua IC đệm 74373.
Giải:
Hướng dẫn:
Để LED 7 đoạn hiển thò đúng giá trò mong muốn, cần phải đưa dữ liệu đến led
theo mã LED 7 đoạn (tương ứng với các đoạn cần sáng). Do đó, ta phải chuyển
đổi dữ liệu cần xuất (thường là số HEX hay BCD) sang mã LED 7 đoạn, thông
thường dùng phương pháp tra bảng.
 Tóm tắt phương pháp tra bảng:

4
5
3
13
12
11
10
9
15
14
D0
D1
D2
D3
BI/RBO
RBI
LT
A
B
C
D
E
F
G
a
b
e
f
d
c

Q5
Q6
Q7
Q8
D1
D2
D3
D4
D5
D6
D7
D8
b
d
+5V
c
e
a
g
330x7
P1.0
P1.3
P1.4
P1.5
P1.6
P1.1
P1.2
P1.7
8051
P2.0


Nhờ tải bản gốc
Music ♫

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