Vi xử lý - Chương 5: Giao tiếp

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...

pdf39 trang | Chia sẻ: tranhong10 | Lượt xem: 4711 | Lượt tải: 3download
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:

  • pdfCh5.pdf
Tài liệu liên quan