Tài liệu Vi xử lý - Chương 5: Giao tiếp: 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...
39 trang |
Chia sẻ: tranhong10 | Lượt xem: 4711 | Lượt tải: 3
Bạn đang xem trước 20 trang mẫu tài liệu Vi xử lý - Chương 5: Giao tiếp, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
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
A6
A9
A12
A2
A10
D2
A7
D4
A1
D0
A1
A3
D6
A7
A7
VCC
A0
D0
D3
PSEN
D6
D1
A11
XTAL
12MHz
D2
R2
100
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
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A2
A15
D3
D1
A8
A6
C2 30p
A9
A8
8031
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
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
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
+C3
10u
R1
8.2K
Addr bus[A0..A15]
A0
D0
D1
D6
A10
A4
A5
A12
D5
D4
A4
A12
D7
D6
A3
C1 30p
A5
D0
2764
10
9
8
7
6
5
4
3
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
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
SW1
D5
A6
A2
/WR
D1
A13
A0
D4
A4D4
A11
D7
D5
Vcc
D2
PSEN
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
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3
D4
D5
D6
D7
OE
WE
CS1
CS2
D7
Hình 5.1
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
2
Ví dụ 5.1: Thiết kế kit 8031 với 1 ROM 2764 (chứa chương trình), 1 RAM 6264 (chứa dữ
liệu).
Giải:
ROM 2764 và RAM 6264 đều có dung lượng 8KB.
Ta có: 8KB = 213 byte → mỗi chip có 13 đường địa chỉ vào A0 ÷ A12.
Sơ đồ mạch kết nối hình 5.1
Có thể thiết kế mạch giao tiếp với 1 EPROM và 1 RAM tổng quát bằng cách dùng các cầu
nối (jumper) và điện trở kéo lên phù hợp như trên hình 5.2. Trong sơ đồ này, người sử dụng có
thể chọn dung lượng bộ nhớ cần thiết bằng cách thiết lập các jumper để nối các chân địa chỉ
thích hợp từ bus địa chỉù vào chip nhớ. Bảng thiết lập jumper tương ứng cho các dung lượng
EPROM và RAM khác nhau cũng được cho trên hình.
D3
A2
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
17
18
19
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13 (CS2)
A14 (NC)
CS
OE
WE
D0
D1
D2
D3
D4
D5
D6
D7
A5
D1
A4
D4
A6
A9
A8
A15
/RD
D3
A2
D2
A9
Data bus[D0..D7]
6264 (8K)
A2
A1
JP1
JP5J1 J2
Vcc
A8
A15
VCC
A7
R2
100
D5
D0
A12
A0
A11
R4
10K
R5
10K
Jumper Table
J1
D6
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
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
A10
/WR
D6
D7
JP3
A0
SW1
A3
R1
8.2K
A5
D4
D6
D3
None
A12
D0
D0
A13
A7
D2
A11
EPROM
D1
A7
A11
XTAL
12MHz
D0
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
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13 (NC)
CE
OE/VPP
A14 (PGM)
A15 (Vpp)
O0
O1
O2
O3
O4
O5
O6
O7
+C3
10u
A3
A14
8031
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
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
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
32K
A6
D3
J4 J5
JP4
/WR
D1
J1 J2 J3
D2
A1
A14
A5
JP2
A10
D5
A12
A13
A0
A1316K
27256 (32K)
D4
A1
D7
C2 30p
D7
A14
2764 (8K)
NA64K
D6
A6
A4
D7
Addr bus[A0..A15]
Memory Size
A4
Hình 5.2
* Giải mã địa chỉ
- Trong trường hợp cần phải giao tiếp nhiều ROM và/hoặc nhiều RAM, do các chip cùng
nối vào bus dữ liệu của vi điều khiển nên cần có mạch giải mã để đảm bảo tại mỗi thời
điểm chỉ có một chip được chọn nối với bus dữ liệu, các chip khác xem như hở mạch (trở
kháng cao).
- Một ví dụ về giải mã địa chỉ được cho ở hình 5.3.
Bà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 = 213 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
D1
D4
A6
8031
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
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
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
D6
A15
A5
D1
/CS0
A3D3
A14
74HC138
15
14
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
A7
R2
100
D4
/CS0
Vcc
D2
A6
XTAL
12MHz
A12
2764
10
9
8
7
6
5
4
3
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
CE
OE
PGM
VPP
O0
O1
O2
O3
O4
O5
O6
O7
D5 D5
A9
D7D7
A12
A3
A0
Addr bus[A0..A15]
D2
A6
A8
D7
D6
A0
D0
D0
D2
D7
A10
D6
2764
10
9
8
7
6
5
4
3
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
CE
OE
PGM
VPP
O0
O1
O2
O3
O4
O5
O6
O7
/CS1
R1
8.2K
A4
A1
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
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
A11
D0
Data bus[D0..D7]
A3
A4
D4
D5
A7
A5D5
D1 A1
A9
A7
Vcc
A11
/WR
D2
VCC
A9
SW1
A5
A13
PSEN
A4
A10
A14
/RD
A12
PSEN
A2
A11
PSEN
D3
A15
A1C1 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
C
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
G1
G2A
G2B
CS
A15
VCC
A13
0
A0-A12
CS
CSCS
/WR
/RD/PSEN
Chọn các
EPROM/RAM
khác
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
4
- Giả sử dùng bộ giải mã 3 → 8 là IC 74138. 8 ngõ ra của IC cho phép chọn 8 vùng
nhớ tương ứng, mỗi vùng 8KB. Chọn 2 ngõ ra của 74138 nối đến ngõ vào chọn chip
(CS ) của 2 ROM. Ở đây, có thể chọn 0Y (0000H ÷ 1FFFH) và 1Y (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 ( 1CSROM : 0000H ÷ 7FFFH)
A15 = 1: chọn ROM2 ( 2CSROM : 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:
Chip
Vùng ROM 1 (A15 = 0) ROM 2 (A15 = 1)
1 0000H ÷ 1FFFH 8000H ÷ 9FFFH
2 2000H ÷ 3FFFH A000H ÷ BFFFH
3 4000H ÷ 5FFFH C000H ÷ DFFFH
4 6000H ÷ 7FFFH E000H ÷ FFFFH
Lưu ý: Khi viết chương trình nên chọn sử dụng duy nhất 1 trong 4 vùng địa chỉ trên cho
mỗi ROM để tiện cho việc kiểm soát chương trình.
Ví dụ 5.3: Thiết kế kit 8051 với 2 RAM 6264 (chứa dữ liệu).
Giải:
Cách 1: Giải mã địa chỉ dùng bộ giải mã 3 → 8
- Thực hiện mạch giải mã địa chỉ tương tự ví dụ 5.2.
- Sơ đồ mạch kết nối như hình 5.6.
Cách 2: Nếu kit chỉ có 2 chip nhớ ngoài, có thể thực hiện giải mã đơn giản như sau:
- A0 ÷ A12 đưa đến các chân địa chỉ tương ứng trên 2 RAM.
- A15 nối với 1CSRAM → A15 = 0 thì chọn RAM1, A14 nối với 2CSRAM → A14 = 0 thì
chọn RAM2.
Với cách này ta không cần thêm IC cho mạch giải mã địa chỉ, tuy nhiên khi viết chương
trình, phải đảm bảo chỉ có 1 chip RAM được chọn tại mỗi thời điểm, tức là A15 = 0 thì
A14 = 1 và ngược lại.
- 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 1CSROM
2CSROM
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
A0
A0
A12
D2
D5
A4
A14
A9
D2
Vcc
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
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3
D4
D5
D6
D7
OE
WE
CS1
CS2
D7
+C3
10u
A2
D4
C1 30p A1
A13
D4
/RD
A8
C2 30p
A6
A11
A11
A8
D7
A10
A14
/CS0
D2
VCC
D1
D1
A2
D3
D5
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
Y7
A
B
C
G2B
G2A
G1
D0
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
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3
D4
D5
D6
D7
OE
WE
CS1
CS2
D1
D4A4
D7
A7
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
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
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
A7
D7
XTAL
12MHz
A9
D6
A5
A15
A11
A1
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
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
/WR
A3
A2
A12
R1
8.2K
D6
Vcc
Data bus[D0..D7]
SW1
D6
A5
D3
A10
A8
A13 /CS0
/RD
D3
Vcc
D1
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 = 213 byte → có 13 đường địa chỉ vào từ A0 ÷ A12.
ROM 2732 có dung lượng 4KB = 212 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
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
A13 /CS0
A15
/CS1A14
Chip Vùng địa chỉ Chân chọn chip
ROM 2764 0000H ÷ 1FFFH CS0
ROM 2732 – 1
2000H ÷ 2FFFH
3000H ÷ 3FFFH CS1
ROM 2732 – 2
4000H ÷ 4FFFH
5000H ÷ 5FFFH CS2
Hì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
2
3
4
5
6
7
8
9
10
11
13
14
15
16
17
23
22
21
20
18
19
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Y8
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
ROM 2732 – 2 3000H ÷ 3FFFH CS2
Ví dụ 5.5: Thiết kế kit 8051 với 1 ROM 2764 (dữ liệu), 1 RAM 6264 và một thiết bị xuất (ví
dụ là IC 74373).
D5
A6
/CS0
A0
D3
D0
D5
R2
100
A8
D7
XTAL
12MHz
CON8
1
2
3
4
5
6
7
8
A9
A12
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
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
D0
D1
D2
D3
D4
D5
D6
D7
OE
WE
CS1
CS274HC138
15
14
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
D3
A4
A1
A2
A11
VCC
/CS1
D3
A12
A0
D4
7402
2
3
1
Data bus[D0..D7]
A2
D6
/WR
A15
SW1
+C3
10u
D1
Addr bus[A0..A15]
A1
D0
A13
A7
A3
D1
D7
A15
D0
R1
8.2K
D6
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
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
CE
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
12
15
16
19
D0
D1
D2
D3
D4
D5
D6
D7
OC
G
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
/CS0
A10
A10
VCC
A0
A3
/RD
D2
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
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
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
/CS1
D7
D2
A1
D4
D4
A9
A2
A3
C2 30p
A8
A12
D7
A9
/RD
D5
D1
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
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
7
Giải:
- Do 8031/8051 chỉ cung cấp 2 đường điều khiển đọc và ghi chung cho cả bộ nhớ và I/O
là RD và WR nên ở đây sẽ giải mã địa chỉ cho I/O theo phương pháp ánh xạ bộ nhớ
(xem I/O như là bộ nhớ ngoài).
- Sơ đồ mạch kết nối như hình 5.9.
- Bảng phân vùng địa chỉ:
Chip Vùng địa chỉ
ROM 2764 0000H ÷ 1FFFH
RAM 6264 2000H ÷ 3FFFH
I/O 4000H ÷ 5FFFH
Ví dụ 5.6 :
a/ Hãy vẽ bảng địa chỉ (bảng phân vùng địa chỉ) bộ nhớ cho 4 chip RAM, mỗi chip 1K,
biết địa chỉ bắt đầu là 2000H.
b/ Hãy thiết kế mạch giải mã địa chỉ cho 4 chip RAM trên theo bảng địa chỉ ở câu a (chỉ
dùng 1 IC 74138).
Giải:
a/ Vì địa chỉ bắt đầu theo yêu cầu là 2000H nên bảng phân vùng địa chỉ cho 4 chip RAM
trên là:
Chip RAM Vùng địa chỉ
0 2000H ÷ 23FFH
1 2400H ÷ 27FFH
2 2800H ÷ 2BFFH
3 2C00H ÷ 2FFFH
b/ Các chip nhớ đều là 1KB = 210 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
10
9
7
1
2
3
5
4
6
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
A
B
C
G2B
G2A
G1
/CS0
A14
A15
Hình 5.10
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
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
6
4
5
A
B
C
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
G1
G2A
G2B
Hình 5.11
Giải:
- Để 74138 hoạt động thì các chân cho phép phải ở mức tích cực, tức là:
G1 = 1 → A11 = 1
G2A = G2B = 0 → A12 = A13 = A14 = A15 = 1
- 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 28 = 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
và 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
9
Hình 5.12 trình bày một sơ đồ mạch mở rộng không gian bộ nhớ dữ liệu ngoài cho hệ thống.
Trong sơ đồ này, vùng địa chỉ 8000H – FFFFH được thiết kế dùng cách chọn bank để mở rộng
vùng này từ 32Kbyte thành 160Kbyte với 5 SRAM 32Kbyte. Để thực hiện chọn bank cho 5 thiết
bị này, 5 ngõ ra port (P1.0 – P1.4) được dùng để chọn từng khối 32Kbyte. Đường địa chỉ A15
kết hợp với từng chân chọn khối bằng các cổng NAND riêng biệt. Bằng cách thiết lập một trong
những chân chọn khối này ở mức logic cao và các chân còn lại ở mức logic thấp, một trong các
thiết bị nhớ sẽ được kích hoạt khi 8051/8031 truy xuất bộ nhớ ngoài trong khoảng địa chỉ 8000H
– FFFFH.
II. GIAO TIẾP PHÍM ĐƠN VÀ BÀN PHÍM
Hầu hết các thiết kế với VĐK đều có sử dụng các công tắc hoặc các nút nhấn để cho phép
người sử dụng điều khiển các mạch bên trong. Việc điều khiển có thể là bật công tắc để khởi
động một hoạt động nào đó, hay nhấn một nút nhấn để chọn một tùy chọn, hoặc nhập một số
hay ký tự nào đó cho chương trình sử dụng. Đối với các tác vụ đơn giản ta có thể sử dụng các
công tắc bật, trượt hoặc nút nhấn/nhả. Với các tác vụ yêu cầu dữ liệu phức tạp hơn, ta có thể sử
dụng một dãy các phím nhấn được kết nối theo dạng ma trận, với mỗi phím biểu diễn cho một
số hay một ký tự nào đó.
1. Phím đơn (switch)
- Có thể có nhiều dạng và thường được kết nối với các cổng vào.
1: nhả
0: nhấn
VCC +5V
SW
port
pin
10K
SW
1: mở
0: đóng
VCC +5V
port
pin
10K
1: mở
0: đóngSW
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
74HC14
1 2
470KR2
VCC +5V
4.7K
R1
C1
0.1uF
Hình 5.14
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
10
+ Chống dội phím bằng phần mềm: do kết cấu cơ khí của phím nhấn, nên khi nhấn
phím hay bật công tắc thường xảy ra hiện tượng dội phím hay rung phím với thời gian
ở tầm ms. Để chống dội khi đọc trạng thái của phím nhấn, ta có thể tạo trễ một
khoảng thời gian khoảng 10ms, sau đó ta lại đọc trạng thái của phím.
Ví dụ 5.8: Viết chương trình nhận giá trị từ phím nhấn B1 (được nối với P1.0, mức 0 là phím
nhấn, mức 1 là phím không nhấn). Mỗi lần nhấn phím thì dịch trái LED đơn (dãy 8 LED đơn
được nối với P2, mức 0 thì LED sáng, mức 1 thì LED tắt). Chương trình có chống rung phím
bằng phần mềm.
Lưu đồ:
Chương trình:
ORG 0
MOV A,#0FEH
WAIT: MOV P2,A
JB P1.0,$
ACALL DELAY10MS
JNB P1.0,$
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
phím có một điện trở kéo lên riêng (DIP switch). Loại thứ hai là bàn phím ma trận, với
các phím nhấn được bố trí theo các hàng và cột. Khi một phím được nhấn thì chân hàng
và cột tương ứng tại vị trí của phím được nối với nhau. Khi phím không được nhấn thì
chân hàng và cột tương ứng với phím đó là hở mạch.
Ví dụ 5.9: Kết nối DIP switch với port 1
Hình 5.15
Ví dụ 5.10: Kết nối bàn phím ma trận 4x4 (bàn phím Hex) với port 1:
Hình 5.16
+ Để xác định phím nào được nhấn thì ta phải xác định phím được nhấn thuộc hàng và
cột nào, hay ta xác định mã tương ứng của phím được nhấn. Việc xác định mã phím nhấn
có thể thực hiện bằng phần cứng hoặc phần mềm.
+ Xác định mã phím nhấn bằng phần cứng: ta sử dụng các loại IC mã hóa phím nhấn,
chẳng hạn như 74C922.
+ Xác định mã phím nhấn bằng phần mềm:
C1
C2
C3
C4
H1
H2
H3
H4
4
5
6
7
8
9
A
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
báo hiệu phím được nhấn, mã phím nhấn cất trong thanh ghi A.
Y
Y
N
N
1
SCAN_KEY
Mã quét hàng = 11111110 B
Nạp (đếm hàng) = 4
Xuất (mã quét hàng)
ra port 1
Đọc giá trị hàng và
cột ở port 1 vào A
Xoá các bit hàng [4 bit thấp]
Giữ lại các bit cột [4 bit cao]
Quay trái (mã quét hàng)
[quét hàng kế]
Giảm (đếm hàng)
Xoá (Cờ)
Có phím ấn?
[có bit cột nào = 0]
(đếm hàng) = 0
2
Y
Y
N
N
1
Xác định hàng có phím nhấn
(hàng) = 4 - (đếm hàng)
(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
CLR F0
SJMP EXIT
GET_CODE:
PUSH ACC
MOV A,#4
CLR C
SUBB A,R6
MOV R5,A
POP ACC
SWAP A
MOV R4,#4
LOOP2:
RRC A
JNC SET_FLAG
XCH A,R5
ADD A,#4
XCH A,R5
DJNZ R4,LOOP2
SET_FLAG:
SETB F0
MOV A,R5
EXIT:
RET
III. GIAO TIẾP BỘ HIỂN THỊ
1. Giao tiếp với LED đơn
VCC +5V
port
pin
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
f
b
d
(common anode) ca
a
g
d
c
b
dp
e
dp
e
Hình 5.19 Led 7 đoạn loại anode chung và cathode chung
b. Giao tiếp với một led 7 đoạn
* Dùng IC giải mã
- Phương pháp này sử dụng một IC làm nhiệm vụ giải mã từ BCD sang mã led 7
đoạn. Một số loại IC giải mã thường dùng là: 7447 hay 74247 (đối với loại anode
chung) hay 4511 (đối với loại cathode chung).
- Để hiển thị một số lên led 7 đoạn, vi điều khiển phải cung cấp mã BCD đến ngõ
vào của IC giải mã.
Ví dụ 5.11: Cho giao tiếp giữa 8051 và IC giải mã 27247 như hình 3. 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.
Giải:
Chương trình:
ORG 0
LOOP: MOV A,P2
ANL A,#0FH
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:
Thành lập một bảng giá trị chứa các mã theo thứ tự mong muốn.
Ví dụ: Lập bảng mã 7 đoạn của các số HEX từ 0 đến F (với LED Anode chung, để
một đoạn LED nào sáng phải cung cấp mức logic thấp đến vị trí đoạn tương ứng).
P1.0
P1.3
P1.4
P1.5
P1.6
P1.1
P1.2
P1.7
8051
P2.0
P2.3
P2.4
P2.5
P2.6
P2.1
P2.2
P2.7
D0
D1
D2
D3
74247
7
1
2
6
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
g
+5V
330x7 dp
f
74HC373
1
11
2
5
6
9
12
15
16
19
3
4
7
8
13
14
17
18
OE
LE
Q1
Q2
Q3
Q4
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
P2.3
P2.4
P2.5
P2.6
P2.1
P2.2
P2.7
D0
D1
D2
D3
+5V
dp
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
16
Hình 5.22 Bảng mã led 7 đoạn của các số hex từ 0 đến F.
Dùng dẫn hướng (directive) DB (Define Byte) của trình dịch hợp ngữ để khai
báo bảng. Bảng thường được đặt ở cuối chương trình.
¾ Dạng khai báo: Label: DB Codes
Ví dụ: TABLE: DB 0C0H,0F9H,0A4H,99H,
Chú ý: Khi xuống một dòng mới phải thêm một định nghĩa DB.
Khi muốn lấy một giá trị trong bảng ta đưa con trỏ dữ liệu giữ giá trị đầu
bảng và đưa số thứ tự của phần tử cần truy xuất trong bảng vào thanh ghi
A, sau đó dùng lệnh tra bảng:
MOVC A,@A+DPTR ; lấy mã trong bảng vào thanh ghi A.
Ví dụ 5.13: Để lấy phần tử thứ 2 trong bảng ta thực hiện như sau:
MOV DPTR,#TABLE
MOV A,#2
MOVC A,@A+DPTR
Chương trình:
ORG 0
LOOP:
MOV A,P2
ANL A,#0FH
MOV DPTR,#TABLE_LED7
MOVC A,@A+DPTR
MOV P1,A
SJMP LOOP
TABLE_LED7:
DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END
Số dp g f e d c b a Giá trị HEX
0 1 1 0 0 0 0 0 0 C0H
1 1 1 1 1 1 0 0 1 F9H
2 1 0 1 0 0 1 0 0 A4H
3 1 0 1 1 0 0 0 0 B0H
4 1 0 0 1 1 0 0 1 99H
5 1 0 0 1 0 0 1 0 92H
6 1 0 0 0 0 0 1 0 82H
7 1 1 1 1 1 0 0 0 F8H
8 1 0 0 0 0 0 0 0 80H
9 1 0 0 1 0 0 0 0 90H
A 1 0 0 0 1 0 0 0 88H
B 1 0 0 0 0 0 1 1 83H
C 1 1 0 0 0 1 1 0 C6H
D 1 0 1 0 0 0 0 1 A1H
E 1 0 0 0 0 1 1 0 86H
F 1 0 0 0 1 1 1 0 8EH
dp
b
c
d
e
f
g
a
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
17
c. Giao tiếp với nhiều led 7 đoạn
Có 2 phương pháp được dùng khi giao tiếp vi điều khiển 8051 với nhiều led 7 đoạn:
phương pháp chốt và phương pháp quét.
* Hiển thị led bằng phương pháp chốt
- Dùng các IC chốt để chốt dữ liệu đưa ra led, mỗi led có một IC chốt
riêng.
- Dữ liệu từ 8051 sẽ được đưa đồng thời đến ngõ vào của tất cả các IC chốt.
Muốn dữ liệu đưa qua IC chốt nào ta đưa chân cho phép chốt (LE) của IC tương
ứng lên mức cao, các IC còn lại có ngõ vào LE là mức logic thấp sẽ chốt dữ liệu
(giữ nguyên giá trị trước đó ở ngõ ra).
Ví dụ 5.14: Cho mạch giao tiếp giữa 8051 và 4 led 7 đoạn theo phương pháp chốt như hình
5.23. Viết chương trình con hiển thị 4 số BCD không nén (unpacked BCD) có mã lưu trong 4
ô nhớ 33H, 32H, 31H và 30H lên 4 led tương ứng (led1, led2, led3 và led4).
Hình 5.23 Giao tiếp giữa 8051 và 4 led 7 đoạn theo phương pháp chốt.
Giải:
Chương trình:
OUTLED:
CLR P3.0
CLR P3.1
P1.0 .. P1.7
P3.3 .. P3.0
D
2
D
7
D
5
1 2 3 4
L1
Vcc
D
3
D
2
D
5
D
1
D
0
D
5
D
6
D
7
L4
a b c d f ge dp
ca ca
D
0
LED1
D
3
D
6
D
1
LED2
L2 D
1
D
4
74
H
C
57
3
2 3 4 5 6 7 8 9 11 1
19 18 17 16 15 14 13 12
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
LE O
E
Q
0
Q
1
Q
2
Q
3
Q
4
Q
5
Q
6
Q
7
LED3
D
3
a b c d f ge dp
ca ca
D
0
L1
1 2 3 4 5 6 7 8
LED4
D
4
D
7
D
2
D
2
74
H
C
57
3
2 3 4 5 6 7 8 9 11 1
19 18 17 16 15 14 13 12
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
LE O
E
Q
0
Q
1
Q
2
Q
3
Q
4
Q
5
Q
6
Q
7
L3
D
2
74
H
C
57
3
2 3 4 5 6 7 8 9 11 1
19 18 17 16 15 14 13 12
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
LE O
E
Q
0
Q
1
Q
2
Q
3
Q
4
Q
5
Q
6
Q
7
D
7
D
4
L4
D
5
D
1
L3
a b c d f ge dp
ca ca
D
3
74
H
C
57
3
2 3 4 5 6 7 8 9 11 1
19 18 17 16 15 14 13 12
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
LE O
E
Q
0
Q
1
Q
2
Q
3
Q
4
Q
5
Q
6
Q
7
L2
D
5
D
6
D
0
D
6
D
0
D
3
a b c d f ge dp
ca ca
D
4
D
7
D
1
D
4
D
6
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
18
CLR P3.2
CLR P3.3
MOV A,30H
MOV DPTR,#TABLE_LED7
MOVC A,@A+DPTR
MOV P1,A
SETB P3.0
MOV A,31H
MOV DPTR,#TABLE_LED7
MOVC A,@A+DPTR
CLR P3.0
MOV P1,A
SETB P3.1
MOV A,32H
MOV DPTR,#TABLE_LED7
MOVC A,@A+DPTR
CLR P3.1
MOV P1,A
SETB P3.2
MOV A,33H
MOV DPTR,#TABLE_LED7
MOVC A,@A+DPTR
CLR P3.2
MOV P1,A
SETB P3.3
RET
TABLE_LED7:
DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
* Hiển thị led bằng phương pháp quét
- Mắt người sẽ không phân biệt được sự hiện hữu và mất đi của một ảnh nếu tần
suất xuất hiện của ảnh là 24 lần/s hay thời gian lặp lại của ảnh là 1/24 ≈ 40 ms,
hiển thị led theo phương pháp quét sử dụng nguyên lý này.
- Hiển thị led bằng phương pháp quét là phương pháp hiển thị mà tạo mỗi thời
điểm dữ liệu được truyền đến tất cả các led nhưng chỉ có một led được cho phép
hiển thị dữ liệu đó (đóng chuyển mạch tương ứng với led được chọn, hở chuyển
mạch của các led khác).
- Vì tại mỗi thời điểm chỉ có một led hoạt động nên thời gian lặp lại dữ liệu trên
led đó phải được tính toán cho phù hợp để đảm bảo hình ảnh của led hiển thị là
liên tục đối với mắt người, không quá mờ hay nhấp nháy.
Ví dụ 5.15: Cho mạch giao tiếp giữa 8051 và 4 led 7 đoạn theo phương pháp quét như hình
5.24. Viết chương trình con hiển thị 4 số BCD không nén (unpacked BCD) có mã lưu trong 4
ô nhớ 33H, 32H, 31H và 30H lên 4 led tương ứng (led1, led2, led3 và led4).
Giải:
Hướng dẫn: Để đóng chuyển mạch cho led, cấp mức logic 0 ở phía cực B của
transistor tương ứng (đóng vai trò như một chuyển mạch điện tử). Sau đó phải tạo
trễ một khoảng thời gian để led đáp ứng sáng.
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
19
Hình 5.24 Giao tiếp giữa 8051 và 4 led 7 đoạn theo phương pháp quét.
Chương trình:
OUTLED:
MOV A,30H
SWAP A
ORL A,#0FH
MOV P1,A
CLR P1.0
ACALL DELAY
MOV A,31H
SWAP A
ORL A,#0FH
MOV P1,A
CLR P1.1
ACALL DELAY
MOV A,32H
SWAP A
ORL A,#0FH
MOV P1,A
CLR P1.2
ACALL DELAY
MOV A,33H
SWAP A
b
L4
d
LED1
b
c
fgb
A
f
b
C
a b c d f ge dp
ca ca
a
A1015
ge
L3
g ga
a
74
LS
47
7 1 2 6 453
13 12 11 10 9 15 14
D
0
D
1
D
2
D
3
B
I/R
B
O
R
B
I
LT
A B C D E F G
fd e
a b c d f ge dp
ca ca
LED3
L1
d
g
D
c
Vcc
fc
LED2
4.7K
D0
4.7K
e
a b c d f ge dp
ca ca
b
D7
B
a
4.7K
330 x 7
e d c
a b c d f ge dp
ca ca
d
4.7K
LED4
Vcc
L2
e
f c
1
2
3
4
5
6
7
8
a
P1.0
.
.
.
P1.7
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
20
ORL A,#0FH
MOV P1,A
CLR P1.3
ACALL DELAY
RET
DELAY:
MOV R7,#200
DJNZ R7,$
RET
Lưu ý: Chương trình con OUTLED này phải được gọi liên tục trong chương trình sử
dụng nó để đảm bảo hình ảnh hiển thị trên các led là liên tục đối với mắt người,
không quá mờ hay nhấp nháy (thông thường phải gọi tối thiểu là 30 lần/giây).
3. Giao tiếp với LCD
- Trong những năm gần đây, LCD đã được sử dụng rộng rãi thay thế cho LED 7 đoạn
hay các loại LED nhiều đoạn khác. Đó là do giá thành ngày càng giảm của các loại
LCD; khả năng hiển thị đa dạng bao gồm cả chữ số, chữ cái và cả các ký tự graphic;
việc tích hợp các bộ điều khiển LCD vào cùng một module, giúp cho CPU khỏi phải
điều khiển liên tục việc hiển thị dữ liệu; và sự dễ dàng trong việc lập trình hiển thị trên
LCD. Để chuẩn hóa việc điều khiển các loại LCD khác nhau, các hãng sản xuất LCD
thường sử dụng một loại IC điều khiển là HD44780 của hãng Hitachi. Điều này giúp cho
việc điều khiển LCD được dễ dàng và chuẩn hóa.
- Hình dáng và kích thước LCD: các LCD được chế tạo từ các hãng như Densitron,
Epson, HP, Optrex, Sharp, với cấu hình thông dụng là 16, 20, 24, 32, hay 40 ký tự trên 1
hàng với màn hình hiển thị 1, 2 hay 4 hàng.
Hình 5.25
- Chiếu sáng trong bộ hiển thị LCD: thường sử dụng các kiểu sau:
+ Backlit (back lighting): sử dụng đèn chiếu sáng ở sau bộ hiển thị thay vì dùng ánh
sáng phản xạ.
+ CFL (Cold Cathode Flourescent Lamp : Đèn huỳnh quang cathode lạnh): sử dụng
một loại đèn huỳnh quang đặc biệt để chiếu sáng phía trong các hiển thị LCD hiện
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
21
đại, đặc biệt là trong các mảng đồ họa lớn như dùng trong các laptop. Chúng cho
chiếu sáng rất tốt với dòng điện thấp. Được cấp điện bởi nguồn AC cao áp và cao tần
(200-1000V ở tần số 25-75KHz), các yêu cầu về điện của chúng nghiêm nhặt và
phải chính xác khớp với inverter thích hợp do nhà sản xuất đề nghị.
Mô tả các chân của LCD
Chân số Tên Mức logic Chức năng
1
2
3
4
5
6
7 - 14
VSS
VDD
Vo
RS
R/W
E
DB0 - DB7
GND
+5 V
0 . . . +5 V
H/L
H/L
H/L
H/L
GND
Cực + của nguồn
Điều khiển độ tương phản
Chọn thanh ghi
L: Thanh ghi lệnh; H: Thanh ghi dữ liệu
Đọc/Ghi
L: Đọc; H: Ghi
Cho phép
Các bit dữ liệu
VSS, VDD: các chân nguồn và GND của LCD
Vo: chân điều khiển độ tương phản của màn hình hiển thị.
Hình 5.26
RS (register select): Có 2 thanh ghi rất quan trọng trong LCD là thanh ghi lệnh và
thanh ghi dữ liệu. Nếu RS ở mức thấp, thanh ghi lệnh sẽ được chọn, cho phép người
sử dụng gởi các mệnh lệnh đến LCD chẳng hạn như xóa màn hình hiển thị hoặc
chuyển con trỏ về đầu dòng, Nếu RS ở mức cao, thanh ghi dữ liệu sẽ được chọn,
cho phép người sử dụng gởi các dữ liệu ký tự để hiển thị lên LCD.
R/W (read/write): Cho phép ghi các lệnh hay dữ liệu ký tự lên LCD hoặc đọc các dữ
liệu ký tự hay thông tin trạng thái từ các thanh ghi của nó.
E (enable): Dùng để chốt các lệnh hay dữ liệu giữa module LCD và các đường dữ
liệu của nó. Khi ghi dữ liệu ra màn hình hiển thị LCD, dữ liệu sẽ được chốt khi có
xung cạnh xuống ở chân này. Xung này phải có độ rộng tối thiểu là 450ns. Tuy
nhiên, khi đọc dữ liệu ra từ LCD, sau khi có xung cạnh lên ở chân này thì dữ liệu đọc
được mới là dữ liệu có ý nghĩa.
DB0 – DB7: 8 đường bus dữ liệu (từ D0 đến D7). Dữ liệu có thể được chuyển đến và
lấy ra khỏi bộ hiển thị LCD theo dạng một byte 8 bit hay dạng hai nửa byte 4 bit.
Trong trường hợp sau chỉ có 4 đường dữ liệu cao được sử dụng (từ D4 đến D7). Chế
độ 4 bit này thuận tiện khi sử dụng vi xử lý vì cần có ít đường I/O hơn.
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
22
Tóm tắt tập lệnh điều khiển LCD
Instruction RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Description
Clear Display 0 0 0 0 0 0 0 0 0 1 Clears Display and returns cursor to the Home Position (Address 00)
Return Home 0 0 0 0 0 0 0 0 1 *
Returns cursor to Home Position.
Returns shifted display to original
position. Does not clear display
Entry Mode Set 0 0 0 0 0 0 0 1 I/D S
Sets DD RAM counter to increment or
decrement (I/D) Specifies cursor or
display shift during to Data Read or
Write S)
Display 0 0 0 0 0 0 1 D C B
Sets Display ON/OFF (D), cursor
ON/OFF (C), and blink character at
cursor position
ON/OFF 0 0 0 0 0 1 S/C R/L * * Moves cursor or shifts the display w/o changing DD RAM contents
Function Set 0 0 0 0 1 DL N F * * Sets data bus length (DL), # of display lines (N), and character font (F)
Set CG RAM
Address 0 0 0 1 ACG
Sets CG RAM address. CG RAM
data is sent and received after this
instruction
Set DD RAM
Address 0 0 1 ADD
Sets DD RAM address. DD RAM data
is sent and received after this
nstruction
Read Busy Flag
& Address 0 1 BF AC
Reads Busy Flag (BF) and address
counter contents
SIZE=2>Write
Data from DD
or CG RAM
1 0 Write Data
Writes data to DD or CG RAM and
increments or decrements address
counter (AC)
Read Data from
DD or CG RAM 1 1 Read Data
Reads data from DD or CG RAM and
increments or decrements address
counter (AC)
I/D=1: Increment
S=1: Display Shift on data entry
S/C=1: Display Shift (RAM
unchanged)
R/L=1: Shift to the Right
DL=1: 8 bits
N=1: 2 Lines
F=1: 5x10 Dot Font
D=1: Display ON
C=1: Cursor ON
B=1: Blink ON
BF=1: Cannot accept instruction
I/D=0: Decrements
S=0: Cursor Shift on data entry
S/C=0: Cursor Shift (RAM
unchanged)
R/L=0: Shift to the Left
DL=0: 4 bits
N=0: 1 Line
F=0: 5x7 Dot Font
D=0: Display OFF
C=0: Cursor OFF
B=0: Blink OFF
BF=0: Can accept instruction
Definitions:
DD RAM: Display data RAM
CG RAM: Character generator RAM
ACG: CG RAM Address
ADD: DD RAM Address(Cursor
Address)
AC: Address Counter used for both
DD and CG RAM Address
* don’t care
Giao tiếp 8051 với LCD
- LCD cần 8 hay 11 đường I/O để giao tiếp. Nếu sử dụng bus dữ liệu 8 bit thì sẽ cần
dùng 11 đường I/O của 8051 để giao tiếp với LCD, với kết nối mạch như sau:
P1.0 – P1.7 (của 8051) nối với DB0 – DB7 (của LCD)
P3.7 (của 8051) nối với E (của LCD)
P3.6 (của 8051) nối với RS
P3.5 (của 8051) nối với RW
- Thông thường, khi lập trình, để tiện lợi ta thường định nghĩa lại các chân của 8051
giao tiếp với LCD ở đầu chương trình như sau:
DB0 EQU P1.0
DB1 EQU P1.1
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
23
DB2 EQU P1.2
DB3 EQU P1.3
DB4 EQU P1.4
DB5 EQU P1.5
DB6 EQU P1.6
DB7 EQU P1.7
E EQU P3.7
RS EQU P3.6
RW EQU P3.5
DATA EQU P1
Bảng ký tự chuẩn của LCD (ROM CODE A00)
Hình 5.27
Bảng ký tự chuẩn của LCD (ROM CODE A02)
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
24
Hình 5.28
Xử lý đường điều khiển E
- Để thiết lập các lệnh hay gởi dữ liệu ký tự cho LCD, ta phải tạo ra một xung cạnh
xuống trên chân E, do đó ta phải đưa đường E lên mức cao, tạo trễ 1 khoảng thời gian
để tạo độ rộng xung và sau đó ta đưa đường E xuống mức thấp.
SETB E ; E = 1 để tạo cạnh xuống, bắt đầu lệnh LCD
ACALL DELAY
CLR E
- Để đọc dữ liệu hay trạng thái từ LCD, ta phải tạo ra một xung cạnh lên trên chân E,
do đó ta phải đưa đường E xuống mức thấp, tạo trễ 1 khoảng thời gian để tạo độ rộng
xung và sau đó ta đưa đường E lên mức cao.
CLR E ; E = 0 để tạo cạnh lên, bắt đầu đọc từ LCD
ACALL DELAY
SETB E
Kiểm tra trạng thái bận của LCD
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
25
- Mỗi khi LCD thực thi một lệnh thì cần phải mất một khoảng thời gian. Thời gian trì
hoãn đó tùy thuộc vào thạch anh gắn ở ngõ vào của 44780 cũng như lệnh nào được
thực thi. Trong khi viết chương trình ta phải kiểm tra xem LCD có còn bận thực hiện
lệnh đã nhận trước đó hay không bằng cách viết chương trình đợi một khoảng thời
gian để LCD thực thi xong hoặc sử dụng lệnh “Get LCD status” để kiểm tra LCD có
còn bận hay không.
- Chương trình con kiểm tra trạng thái bận của LCD:
WAIT_LCD:
CLR E ; E = 0 để tạo cạnh lên, bắt đầu lệnh LCD
CLR RS ; chọn chế độ gởi lệnh
SETB RW ; chọn chế độ đọc dữ liệu
MOV DATA,#0FFH ; chọn DATA là input
SETB E ; tạo cạnh lên
MOV A,DATA ; đọc giá trị trả về
JB ACC.7,WAIT_LCD ; nếu DB7 = 1, LCD vẫn bận
CLR RW ; tắt RW cho các lệnh LCD kế
RET
Khởi động LCD
- Trước khi có thể sử dụng LCD thì ta phải khởi động và đặt cấu hình cho nó.
- Toàn bộ mã khởi động như sau:
INIT_LCD:
SETB E ; E = 1 để tạo cạnh xuống, bắt đầu lệnh LCD
CLR RS ; chọn chế độ gởi lệnh
MOV DATA,#38H ; chọn bus 8 bit, font ký tự 5x8, 2 hàng
CLR E ; tạo cạnh xuống trên E
LCALL WAIT_LCD ; chờ đến khi LCD hết bận
SETB E ; E = 1 để tạo cạnh xuống, bắt đầu lệnh LCD
CLR RS ; chọn chế độ gởi lệnh
MOV DATA,#0EH ; LCD on, cursor off
CLR E ; tạo cạnh xuống trên E
LCALL WAIT_LCD ; chờ đến khi LCD hết bận
SETB E ; E = 1 để tạo cạnh xuống, bắt đầu lệnh LCD
CLR RS ; chọn chế độ gởi lệnh
MOV DATA,#06H ; vị trí cursor tự động dịch sang phải khi có
; ký tự được gởi
CLR E ; tạo cạnh xuống trên E
LCALL WAIT_LCD ; chờ đến khi LCD hết bận
RET
Xóa màn hình hiển thị LCD
CLR_LCD:
SETB E
CLR RS
MOV DATA,#01H
CLR E
LCALL WAIT_LCD
RET
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
26
Ghi ra màn hình
WRITE_TEXT:
SETB E
SETB RS
MOV DATA,A
CLR E
LCALL WAIT_LCD
RET
Đặt cursor đúng vị trí
- Tổ chức vùng nhớ hiển thị của LCD:
Hình 5.29
- Trong bảng bộ nhớ trên, số được ghi trong mỗi ô là địa chỉ của bộ nhớ tương ứng
với vị trí trên màn hình LCD. Muốn hiển thị một ký tự ở một vị trí bất kỳ (chứ không
theo thứ tự từ kí tự thứ nhất ở góc trái phía trên) thì ta phải gởi lệnh “Set Cursor
Position” (đặt vị trí cursor), giá trị của lệnh này là 80H.
- Ví dụ, muốn đặt vị trí cursor ở hàng thứ 2, ký tự đầu tiên thì ta phải gởi lệnh “Set
Cursor Position”, giá trị của lệnh này là 80H cộng với địa chỉ 40H, kết quả là C0H.
SETB E
CLR RS
MOV DATA,#0C0H
CLR E
LCALL WAIT_LCD
4. Giao tiếp với ma trận LED 8x8 (8x8 DOT MATRIX)
Hình 5.30
- Ma trận LED gồm 64 LED có thể sáng 2 màu xanh và đỏ, được bố trí theo ma trận 8x8.
- Mỗi LED hai màu được tổ hợp từ hai LED đơn xanh và đỏ có chân Anode chung
(DOTC), hai chân Cathode tương ứng với hai màu xanh (GREEN) và đỏ (RED).
- Muốn LED tại tọa độ nào sáng, ta cung cấp mức logic 0 cho DOTCn và mức logic 1 cho
GREENn hoặc REDn tương ứng.
- Muốn hiển thị một kí tự lên ma trận LED ta lần lượt quét từng cột LED (bằng cách cho
một cột tích cực, các cột còn lại không tích cực). Trong khi quét một cột, ta xuất mã quét
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
27
hàng tương ứng và tạo trễ một khoảng thời gian để LED ở toạ độ có hàng và cột tích cực
sáng, sau đó tiếp tục quét sang cột kế cho đến khi quét hết tất cả các cột rồi lặp lại. Việc
hiển thị toàn bộ kí tự trên ma trận LED là nhờ hiện tượng lưu ảnh.
Ví dụ: Bảng mã chữ A khi quét từng cột:
Hình 5.31
IV. MỞ RỘNG PORT I/O
Do 8051 chỉ có 4 port I/O và các port này cũng đồng thời có các chức năng đặc biệt khác
như là đường địa chỉ, đường dữ liệu, ngõ vào/ra của các mạch chức năng đặc biệt, nên đối với
những thiết kế lớn cần giao tiếp với nhiều I/O khác nhau thì việc mở rộng port I/O là rất cần
thiết.
1. Sử dụng các IC giao tiếp nhập/xuất cơ bản
Giao tiếp nhập cơ bản
- Thường sử dụng các bộ đệm 3 trạng thái như hình vẽ sau:
D0
D1
ĐẾN BUS DỮ
LIỆU 8051
D2
0
74LS244
2
4
6
8
1
18
16
14
12
11
13
15
17
9
7
5
3
19
A1
A2
A3
A4
1OE
Y1
Y2
Y3
Y4
A5
A6
A7
A8
Y5
Y6
Y7
Y8
2OE
D3
SW DIP-8
/RD
D4
VCC
D5
CON8
1
2
3
4
5
6
7
8
/CS
D6
10k x 8
1
23456789
D7
Hình 5.32
- Kết nối như trên cho phép vi xử lý đọc nội dung của 8 SW được nối vào bus dữ liệu
khi tín hiệu chọn /CS ở mức logic 0 (tín hiệu này có thể là từ vi xử lý hoặc mạch giải
mã địa chỉ) khi có lệnh truy xuất cổng nhập này. Bằng cách này ta có thể sử dụng
nhiều bộ đệm để kết nối với nhiều thiết bị nhập khác nhau, mỗi thiết bị nhập có một
địa chỉ nhất định, và việc chọn thiết bị truy xuất sẽ được thực hiện thông địa chỉ của
thiết bị và mạch giải mã địa chỉ, hoặc có thể điều khiển trực tiếp từ các chân tín hiệu
của vi xử lý.
Hàng 8→1 (tích cực mức 1) Cột (tích
cực mức 0) BIN HEX
1 1 1 1 1 1 1 0 0 FCH
2 0 0 0 1 0 0 1 0 12H
3 0 0 0 1 0 0 0 1 11H
4 0 0 0 1 0 0 1 0 12H
5 1 1 1 1 1 1 0 0 FCH
6 0 0 0 0 0 0 0 0 00H
7 0 0 0 0 0 0 0 0 00H
8 0 0 0 0 0 0 0 0 00H
C2
H7
C6C4
H8
H5
H3
H1
C7
H6
C1
H4
H2
C8C5C3
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
28
Giao tiếp xuất cơ bản
- Thường sử dụng các mạch chốt như hình vẽ (dùng IC chốt là 74374)
/WR
TỪ BUS DỮ
LIỆU 8051
D6
/CS
74LS374
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
OE
CLK
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
D1
0
D0
D2
D3
D4
D5
D7
CON8
1
2
3
4
5
6
7
8
VCC
Hình 5.33
- Các ngõ vào mạch chốt được lấy từ bus dữ liệu (từ vi xử lý). Khi có lệnh xuất ra cổng
này thì tín hiệu chọn /CS sẽ xuống mức thấp để cho phép dữ liệu được chuyển qua mạch
chốt và khi tín hiệu chọn /CS lên mức cao thì mạch chốt sẽ chốt lại, không cho dữ liệu đi
qua. Tín hiệu chọn /CS có thể là từ mạch giải mã địa chỉ hoặc trực tiếp từ vi xử lý.
- Một số IC chốt thông dụng khác: 74373, 74573, 4050
2. PPI 8255
PPI (Programmable Parallel Interface) 8255A là IC giao tiếp song song lập trình được.
D0 ÷ D7: port dữ liệu (2 chiều)
PA0 ÷ PA7: port A
PB0 ÷ PB7: port B
PC0 ÷ PB7: port C
RD : ngõ nhận tín hiệu điều khiển đọc (read)
WR : ngõ nhận tín hiệu điều khiển ghi (write)
A1, A0: 2 bit địa chỉ chọn port làm việc
A1 A0 Chọn
0 0 Port A
0 1 Port B
1 0 Port C
1 1 Thanh ghi điều khiển
RESET: ngõ nhận tín hiệu reset (tích cực mức cao)
CS : ngõ nhận tín hiệu chọn chip (tích cực mức thấp)
Sơ đồ chân vi mạch:
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
29
8255
34
33
32
31
30
29
28
27
4
3
2
1
40
39
38
37
18
19
20
21
22
23
24
25
14
15
16
17
13
12
11
10
5
36
9
8
35
6
D0
D1
D2
D3
D4
D5
D6
D7
PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7
PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
RD
WR
A0
A1
RESET
CS
Hình 5.34
Sơ đồ khối chức năng của 8255A:
Hình 5.35
Điều khiển hoạt động của PPI 8255A:
- Để xác lập chế độ hoạt động của PPI 8255A, phải ghi giá trị từ điều khiển (control
word) vào thanh ghi điều khiển (control register).
Logic
điều
khiển
đọc/ghi
/RD
/WR
A0
A1
RST
/CS
Nhóm B
port C
(thấp)
Nhóm B
port B
Nhóm A
port C
(cao)
Nhóm A
port A
Đệm bus
D
Điều
khiển
nhóm A
Điều
khiển
nhóm B
PA0 ÷ PA7
PC4 ÷ PC7
PB0 ÷ PB7
PC0 ÷ PC3
D0 ÷D7
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
30
- Có 2 loại từ điều khiển cho PPI 8255A:
Từ điều khiển định nghĩa cấu hình cho các port PA, PB, PC.
Cách xác lập:
D7 D6 D5 D4 D3 D2 D1 D0
Chọn Mode nhóm A
00: Mode 0 0: PA out 0: PCH out
Chọn Mode
nhóm B 0: PB out 0: PCL out
01: Mode 1 1: PA in 1: PCH in 0: Mode 0 1: PB in 1: PCL in
1
1x: Mode 2 1: Mode 1
Từ điều khiển lập/xoá bit ở port C (BSR):
Từ điều khiển lập/xoá từng bit ở port C. Mỗi bit của port C có thể được set hay reset
bằng cách ghi vào thanh ghi điều khiển giá trị thích hợp mà không làm ảnh hưởng
đến chế độ làm việc của PPI 8255A đã xác lập trước đó.
D7 D6 D5 D4 D3 D2 D1 D0
000: chọn PC0
001: chọn PC1 0: Reset
1: set
0 x x x
111: chọn PC7
Ghi chú: Nhóm A: gồm PA và PCH (PC4 ÷PC7)
Nhóm B: gồm PB và PCL(PC0 ÷PC3)
Các chế độ làm việc (Mode) của PPI 8255A:
Mode 0 (D7D6D5 = 100): Nhập/xuất cơ bản
Trong chế độ này, các port PA, PB, PCH, PCL là các cổng nhập hoặc xuất.
PA, PB, PC được sử dụng độc lập với nhau.
PA, PB, PCH, PCL có thể là cổng nhập hay xuất tuỳ thuộc từ điều khiển ghi
vào thanh ghi điều khiển.
Dữ liệu ra được chốt.
Dữ liệu vào không được chốt.
Mode 1 (D7D6D5 = 101): Nhập/xuất có xung cho phép
Trong chế độ này, mỗi port PA, PB có thể được định nghĩa thành các cổng xuất
hoặc nhập với các tín hiệu bắt tay (handshaking) do các bit tương ứng của port C
trong cùng nhóm đảm nhận.
Mode 2 (D7D6D5 = 11x): Nhập/xuất 2 chiều
Trong chế độ này, chỉ riêng port A có thể được định nghĩa thành các cổng
nhập/xuất 2 chiều với các tín hiệu bắt tay do các bit của port C đảm nhận. Port B
có thể làm việc trong chế độ 0 hoặc 1.
Mode BSR: Lập/xoá từng bit cho port C bằng cách ghi từ điều khiển (của chế độ
này) vào thanh ghi điều khiển.
Ví dụ 5.16: Cho mạch như hình 5.36
a. Tìm địa chỉ được gán cho các port A, B, C, và thanh ghi điều khiển.
b. Xác định giá trị của thanh ghi điều khiển để PA = out, PB = in, PC0-PC3 = in và PC4-
PC7 = out.
c. Viết chương trình nhận dữ liệu từ PB và gởi dữ liệu đó cho PA. Ngoài ra, dữ liệu từ
PCL cũng được chuyển đến PCH.
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
31
Hình 5.36
Giải
a. Đây là I/O ánh xạ bộ nhớ, khi đường địa chỉ A14 ở mức cao (logic 1) thì chân /CS được
tích cực. Giả sử tất cả các đường không quan tâm (A15 và A13÷A2) đều bằng 0 thì ta có
địa chỉ các cổng và thanh ghi điều khiển như sau:
/CS (/A14) A1 A0 Địa chỉ Port
0 0 0 4000 Port A
0 0 1 4001 Port B
0 1 0 4002 Port C
0 1 1 4003 Thanh ghi điều khiển
b. Vì chỉ là nhập xuất cơ bản nên ta cho các cổng hoạt động ở Mode 0.
D7 D6 D5 D4 D3 D2 D1 D0
Chế độ
I/O
nhóm A
00: Mode 0
0: PA out 0: PCH out nhóm B
0: Mode 0
1: PB in 1: PCL in
1 0 0 0 0 0 1 1
Giá trị của từ điều khiển: 10000011B hay 83H
c. Chương trình:
PORTA EQU 4000H
PORTB EQU 4001H
PORTC EQU 4002H
CTRLPORT EQU 4003H
CTRLBYTE EQU 83H
MOV A,#CTRLBYTE ;PA = out, PB = in, PCH = out, PCL = in
MOV DPTR,#CTRLPORT ;trỏ đến thanh ghi điều khiển
MOVX @DPTR,A ;ghi dữ liệu vào thanh ghi điều khiển
MOV DPTR,#PORTB ;đọc port B
MOVX A,@DPTR
MOV DPTR,#PORTA ;ghi ra port A
MOVX @,DPTR
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
32
MOV DPTR,#PORTC ;đọc port C
MOVX A,@DPTR
ANL A,#0FH ;xóa 4 bit cao, chỉ giữ 4 bit thấp
MOVX @DPTR,A ;ghi ra port C
END
V. GIAO TIẾP A/D – D/A
1. Giao tiếp với ADC
a. ADC0804
- ADC0804 là thiết bị chuyển đổi tín hiệu tương tự (analog) thành tín hiệu số (digital)
mã hoá 8 bit song song.
- Thời gian chuyển đổi dữ liệu từ tương tự sang số phụ thuộc vào nguồn clock cấp cho
chân CLK IN và thường trong khoảng thời gian 100μs.
- Mô tả các chân của ADC0804:
+ CS : chân chọn chip
+ RD : ngõ vào đọc dữ liệu từ ADC.
+ WR : cho phép ADC0804 bắt đầu quá trình chuyển đổi. Khi việc biến đổi hoàn
tất, ADC0804 xác lập chân INTR xuống mức thấp.
+ CLK IN và CLK R: CLK IN là chân ngõ vào được kết nối với nguồn clock
ngoài khi định thì dùng clock ngoài. Để sử dụng bộ tạo clock nội bên trong có sẵn
của ADC0804, các chân CLK IN và CLK R phải kết nối với một tụ điện và điện
trở như hình 5.37õ. Trong trường hợp này, tần số của clock được xác định theo f =
1/(1.1RC).
+ INTR : là chân ngõ ra báo hiệu kết thúc việc chuyển đổi dữ liệu. Khi chân này
xuống mức thấp, ta cho CS = 0 và gởi một xung cạnh xuống trên chân RD để
đọc dữ liệu từ ADC.
+ VIN(+) và VIN(-): là các ngõ vào tương tự. Điện áp ngõ vào tương tự chính là
điện áp sai biệt đặt trên hai chân này. Thông thường, VIN(-) được nối đất và tín
hiệu điện áp tương tự cần chuyển đổi được đưa vào chân VIN(+).
+ VCC: chân nguồn +5V. Chân này cũng được sử dụng như là một điện áp tham
chiếu khi chân Vref/2 hở (không kết nối).
+ Vref/2: ngõ vào điện áp chuẩn cho phép chỉnh thang đo.
Vref/2 (V) Vin (V) Độ phân giải (mV)
Không kết nối 0 đến 5 5/256 = 19.53
2.0 0 đến 4 4/256 = 15.62
1.5 0 đến 3 3/256 = 11.71
1.28 0 đến 2.56 2.56/256 = 10
+ D0 – D7: 8 bit dữ liệu số ngõ ra. Đây là các bộ đệm 3 trạng thái và dữ liệu
được chuyển đổi chỉ được truy xuất khi CS = 0 và RD xuống mức thấp. Để tính
điện áp ngõ ra, ta sử dụng công thức:
Dout = Vin / Độ phân giải
với Dout là ngõ ra dữ liệu số (thập phân), Vin là điện áp tương tự ngõ vào.
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
33
Hình 5.37
Ví dụ 5.17: Cho ADC0804 kết nối với 8051 như hình 5.37. Trong đó RD nối với P2.5,
WR nối với P2.6, INTR nối với P2.7, CS nối mass, D0-D7 nối với P1.0-P1.7, Vref/2 =
1.28V. Chương trình sau sẽ kiểm tra chân INTR và đọc dữ liệu tương tự vào thanh ghi A.
Sau đó nó gọi các chương trình con chuyển đổi từ mã HEX sang mã ASCII và hiển thị dữ
liệu.
RD BIT P2.5 ;/RD
WR BIT P2.6 ;/WR (bắt đầu chuyển đổi)
INTR BIT P2.7 ;kết thúc chuyển đổi
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
34
MYDATA EQU P1 ;D0-D7
MOV P1,#0FFH
SETB INTR
BACK: CLR WR ;tạo cạnh lên
SETB WR
JB INTR,$ ;chờ cho đến khi kết thúc chuyển đổi
CLR RD ;kết thúc chuyển đổi, cho phép RD
MOV A, MYDATA ;đọc dữ liệu
ACALL CONVERSION
ACALL DATA_DISPLAY
SETB RD ;chuẩn bị cho lần đọc kế tiếp
SJMP BACK
b. ADC0809
- ADC0809 là thiết bị chuyển đổi tín hiệu tương tự (analog) thành tín hiệu số (digital)
mã hoá 8 bit, multiplex 8 kênh và tương thích với bộ vi xử lý. ADC0809 dùng kỹ
thuật chuyển đổi A/D xấp xỉ liên tiếp.
- Sơ đồ chân và sơ đồ khối:
ADC0809
10
9
7
17
14
15
8
18
19
20
21
6
22
11
12
16
26
27
28
1
2
3
4
5
25
24
23
CLK
OE
EOC
D0
D1
D2
D3
D4
D5
D6
D7
START
ALE
VCC
REF+
REF-
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
A0
A1
A2
Hình 5.38
Hình 5.39
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
35
- Khả năng:
+ Giao tiếp dễ dàng với tất cả các bộ vi xử lý.
+ Hoạt động với thang đo tỷ lệ với 5VDC hoặc điện áp chuẩn có thể điều chỉnh
được.
+ Không cần chỉnh không hay toàn thang (full-scale).
+ Multiplex 8 kênh với địa chỉ logic.
+ Tầm điện áp vào 0-5V với nguồn cung cấp đơn 5V.
+ Ngõ ra phù hợp với mức điện áp TTL.
+ Độ phân giải: 8 bit
+ Sai số không điều chỉnh được tổng cộng: ±1 LSB.
+ Nguồn cung cấp đơn: 5VDC.
+ Công suất thấp: 15mW.
+ Thời gian chuyển đổi: khoảng 100μs.
- Đặc tính kỹ thuật:
Ký hiệu Thông số Điều kiện Tối thiểu Điển hình Tối đa Đơn vị
VREF+ Điện áp cao nhất
của thang đo
VCC VCC +0.1 V
VREF- Điện áp thấp nhất
của thang đo
-0.1 0 V
IIN Dòng vào fCLK = 640Khz -2 ±0.5 2 μA
VIN(1) Điện áp vào logic 1 VCC –1.5 V
VIN(0) Điện áp vào logic 0 1.5 V
VOUT(1) Điện áp ra logic 1 IOUT = -360μA VCC –0.4 V
VOUT(0) Điện áp ra logic 0 IOUT = 1.6mA 0.45 V
fCLK Tần số xung clock 10 640 1280 Khz
tEOC Thời gian delay
EOC
(Xem giản đồ
xung)
0 8 + 2μs Chu kỳ
clock
tC Thời gian biến đổi fCLK = 640Khz 90 100 116 μs
tWS Độ rộng xung Start
tối thiểu
(Xem giản đồ
thời gian)
100 200 ns
tALE Độ rộng xung ALE
tối thiểu
(Xem giản đồ
thời gian)
100 200 ns
- Mô tả chức năng:
+ Mạch chọn kênh (multiplexer)
+ Mỗi kênh ngõ vào riêng biệt được chọn bằng cách giải mã địa chỉ theo bảng
sau:
Địa chỉ Kênh analog
được chọn A2 A1 A0
IN0 0 0 0
IN1 0 0 1
IN7 1 1 1
+ Địa chỉ được chốt vào bộ giải mã bên trong tại cạnh lên của xung chốt địa chỉ
(ALE).
- Đặc tính chuyển đổi:
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
36
Thanh ghi xấp xỉ liên tiếp (SAR – Successive Approximation Register) của bộ
biến đổi A/D được reset tại cạnh lên của xung Start. Việc chuyển đổi được bắt
đầu tại cạnh xuống của xung Start. Quá trình chuyển đổi sẽ bị ngắt nếu nhận một
xung Start mới. Sự chuyển đổi liên tiếp có thể được thực hiện bằng cách nối ngõ
ra của EOC (End Of Convert – Kết thúc chuyển đổi) vào ngõ Start. Nếu sử dụng
ở chế độ này, một xung Start bên ngoài phải được cung cấp sau khi bật nguồn.
Xung EOC sẽ xuống mức thấp sau cạnh lên của xung Start từ 0 đến 8 xung clock
và lên mức cao khi việc chuyển đổi đã xong.
- Giản đồ thời gian:
Hình 5.40
- Biểu thức chuyển đổi:
Dữ liệu ngõ ra ADC là một số nguyên N nằm trong tầm:
đốituyệt xác chính Độ±×+
−=
−+
− 256
REFREF
REFIN
VV
VV
N
Ví dụ 5.18: (kết nối như hình vẽ 5.41) Xác định địa chỉ của các kênh analog.
Giải
Một tập địa chỉ có thể của các kênh:
IN0 8000H
IN1 8001H
IN2 8002H
IN3 8003H
IN4 8004H
IN5 8005H
IN6 8006H
IN7 8007H
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
37
P1.0
ADC0809
10
9
7
17
14
15
8
18
19
20
21
6
22
11
12
16
26
27
28
1
2
3
4
5
25
24
23
CLK
OE
EOC
D0
D1
D2
D3
D4
D5
D6
D7
START
ALE
VCC
REF+
REF-
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
A0
A1
A2
A1/CS: 8000H-9FFFH
/RD
A0
/CS
A2
Hình 5.41
Giải thuật điều khiển đọc ADC
2. Giao tiếp với DAC0808
- Biến đổi giá trị số thành giá trị tương tự (áp hoặc dòng).
Hình 5.42
EXIT
Chọn kênh Analog ngõ vào
Tạo xung ALE cho phép
chốt địa chỉ
Tạo xung START cho phép
bắt đầu biến đổi
Chờ biến đổi xong
Đọc dữ liệu ở ngõ ra
BEGIN
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
38
- Trong DAC0808 (hay MC1408) các ngõ vào số được chuyển đổi thành dòng (Iout) và
bằng cách nối một điện trở đến chân Iout, ta đổi thành điện áp ra. Dòng tổng cung cấp
cho chân Iout là một hàm của các số nhị phân tại các ngõ vào A0 đến A7 và dòng tham
chiếu (Iref) như sau:
⎟⎠
⎞⎜⎝
⎛ +++++++=
256
0
128
1
64
2
32
3
16
4
8
5
4
6
2
7 AAAAAAAAII refout
với Iref là dòng vào chân 14. Iref thường được cài đặt ở 2mA.
- Chuyển đổi Iout thành điện áp: trong trường hợp lý tưởng ta có thể kết nối ngõ ra chân
Iout với một điện trở để chuyển đổi thành điện áp. Tuy nhiên, trong thực tế do điện trở
ngõ vào của tải có thể ảnh hưởng đến điện áp ngõ ra khiến điện áp ngõ ra trở nên không
chính xác. Vì vậy, dòng ngõ ra được cách ly bằng cách kết nối chân dòng ngõ ra với một
OP-AMP với điện trở hồi tiếp Rf = 5KΩ (hình 5.43), tạo thành mạch chuyển đổi từ dòng
sang áp.
Hình 5.43
Ví dụ 5.19: Viết đoạn chương trình gởi dữ liệu đến DAC (được kết nối với P1) để tạo điện
áp ngõ ra dạng hình bậc thang.
CLR A
AGAIN: MOV P1,A ;gởi dữ liệu đến DAC
INC A ;đếm từ 0 đến FFH
ACALL DELAY ;chờ DAC chuyển đổi
SJMP AGAIN
Ví dụ 5.20: Viết chương trình tạo sóng sine thông qua DAC (được kết nối với P1).
Để tạo một sóng sine, ta lập bảng biểu diễn giá trị của sóng sine theo góc quay θ trong
khoảng từ 0 đến 360 độ. Giá của hàm sine thay đổi từ –1.0 đến 1.0 khi góc θ thay đổi từ
0 đến 360 độ. Giả sử điện áp toàn thang cho ngõ ra của DAC là 10V, ta có ngõ ra Vout
được tính theo công thức:
)sinV(VVout θ×+= 55
Và giá trị nhị phân tương ứng cần đưa đến DAC là :
625256
10
256 .V
V
V
V
N out
out
thang toàn
out ×=×=×=
Bảng sau cho giá trị của Vout và N theo góc θ, với góc θ thay đổi mỗi lần là 30 độ.
Bài giảng VI XỬ LÝ Chương 5: Giao tiếp
39
Góc θ (độ) Sinθ Vout N
0 0 5 128
30 0.5 7.5 192
60 0.866 9.33 238
90 1.0 10 255
120 0.866 9.33 238
150 0.5 7.5 192
180 0 5 128
210 -0.5 2.5 64
240 -0.866 0.669 17
270 -1.0 0 0
300 -0.866 0.669 17
330 -0.5 2.5 64
360 0 0 128
COUNT EQU 12
AGAIN: MOV DPTR,#TABLE
MOV R2,#COUNT
BACK: CLR A
MOVC A,@A+DPTR
MOV P1,A
INC DPTR
DJNZ R2,BACK
SJMP AGAIN
ORG 300
TABLE:
DB: 128,192,238,255,238,192,128,64,17,0,17,64,128
Muốn tạo được sóng sine nhuyễn hơn ta giảm bước nhảy của góc θ, từ đó ta có một bảng
chuyển đổi mới. Thông thường, ở ngõ ra của OP-AMP ta gắn thêm một mạch lọc thông
thấp để lọc phẳng.
Các file đính kèm theo tài liệu này:
- Ch5.pdf