PHỐI GHÉP VI XỬ LÍ VỚI THIẾT BỊ VÀO RA

Một phần của tài liệu Bài giảng kỹ thuật vi xử lý (Trang 94 - 98)

3.1 Giới thiệu về thiết bị vào/ra

Đối với 8086 (hay họ 80x86 nói chung) có 2 cách phối ghép CPU với các thiết bị ngoại vi (các cổng vào/ra, I/O):

a) Thiết bị vào/ra có không gian địa chỉ tách biệt

Trong cách phối ghép này, bộ nhớ được dùng toàn bộ không gian 1MB mà CPU dành cho nó. Các thiết bị ngoại vi (các cổng) sẽ được dành riêng một không gian 64KB cho mỗi loại cổng vào hoặc ra. Để phân biệt các thao tác truy nhập, ta phải dùng tín hiệu IO/M=1, và các lệnh trao đổi dữ liệu một cách thích hợp cho mỗi không gian đó. Với các thiết bị này cần sử dụng các câu lệnh IN, OUT để trao đổi dữ liệu.

CHƯƠNG 4. PHỐI GHÉP VI XỬ LÍ VỚI BỘ NHỚ VÀ CÁC THIẾT BỊ VÀO/RA

b) Thiết bị vào/ra và bộ nhớ có chung không gian địa chỉ

Trong cách phối ghép này, bộ nhớ và thiết bị ngoại vi cùng chia nhau không gian địa chỉ 1MB mà CPU 8086 có khả năng địa chỉ hóa. Các thiết bị ngoại vi sẽ chiếm một vùng nào đó trong không gian 1MB, phần còn lại là của bộ nhớ. Tất nhiên trong trường hợp này ta dùng chung tín hiệu IO/M=0 và lệnh trao đổi dữ liệu kiểu lệnh MOV cho cả bộ nhớ và thiết bị ngoại vi

3.2 Giải mã địa chỉ thiết bị vào ra

3.2.1 Giới thiệu

Việc giải mã địa chỉ cho thiết bị vào/ra cũng gần giống như giải mã địa chỉ cho mạch nhớ. Thông thường các cổng có địa chỉ 8 bít tại A0-A7, trong một số hệ vi xử lý khác các cổng có 16 bít tại A0 - A15. Tuỳ theo độ dài của toán hạng trong lệnh là 8 hay 16 bít ta có 1 cổng 8 bít có địa chỉ liên nhau để tạo nên từ với độ dài tương ứng.

Các mạch giải mã đơn giản có thể tạo được từ mạch lô-gíc đơn giản như sau:

Trong trường hợp cần nhiều xung chọn ở đầu ra cho các cổng vào/ra có địa chỉ liên tiếp, ta có thể dùng các mạch giải mã có sẵn kiểu 74LS138. Như trên hình dưới đây trình bày 2 mạch tương tự nhau dùng 74LS138 để giải mã địa chỉ cho 8 cổng vào và 8 cổng ra.

Hình 4-15. Giải mã thiết bị dùng cổng lô-gíc Hình 4-14. Không gian nhớ của thiết bị vào/ra và bộ nhớ chính

Trên cơ sở mạch này ta cũng có thể phối hợp với cả hai tín hiệu đọc và ghi để tạo ra tín hiệu chọn cho việc đọc/ghi từng cổng vào/ra ra cụ thể.

3.2.2 Các mạch cổng đơn giản

Trong thực tế có rất nhiều vi mạch tổ hợp cỡ vừa có thể được dùng làm cổng phối ghép với bộ vi xử lý để vào/ra dữ liệu. Các mạch này thường được cấu tạo từ các mạch chốt 8 bít có đầu ra 3 trạng thái (74LS373: kích theo mức; 74LS374: kích theo sườn), các mạch khuếch đại đệm 2 chiều 8 bít đầu ra 3 trạng thái (74LS245). Chúng được dùng trong các phối ghép đơn giản để làm cho CPU và thiết bị ngoại vi hoạt động tương thích với nhau, ví dụ như để đệm buýt hoặc các mạch cổng để tạo ra các tín hiệu móc nối. . . Dưới đây là một số ví dụ

Hình 4-17. Ghép nối với bàn phím

CHƯƠNG 4. PHỐI GHÉP VI XỬ LÍ VỚI BỘ NHỚ VÀ CÁC THIẾT BỊ VÀO/RA

Hình 4-17 biểu diễn ghép nối giữa 8086 với bàn phím 16 số dạng tiếp điểm. Vi mạch 74LS374 được dùng để điều khiển các tín hiệu hàng và 74LS244 dùng để điều khiển các tín hiệu cột của bàn phím. Nguyên tắc hoạt động của một phím như sau. Nếu tín hiệu X ở mức cao (lô-gíc 1) thì đi-ốt sẽ khóa lại, vậy nên tiếp điểm Y có đóng xuống hay không thì tại đầu O ta luôn thu được điện áp 5V (không có dòng điện). Nếu tín hiệu X ở mức thấp (lô-gíc 0), thì đi-ốt mở và khi tiếp điểm Y đóng xuống tại đầu O ta thu được điện áp 0V. Bằng cách quét tuần tự các hàng và đọc trên các cột ta sẽ xác định được phím bấm. Giả sử tín hiệu địa chỉ giải mã vi mạch đệm cổng 374 là 0AH còn 244 là 0BH, đoạn mã sau đây cho phép xác định phím C có được bấm hay không:

Hang EQU 0AH

Cot EQU 0BH

MOV AL,11111110b ; Chỉ có D0=0 OUT Hang, AL

Ktra: IN AL, Cot ; Đọc tín hiệu cột

AND AL,00001000b ; Giữ lại bít D3 ứng với phím C

JNZ Ktra ; Không bấm

... ; Phím C được bấm

Hình 4-18 biểu diễn một mạch hiển thị số sử dụng vi mạch 7447 và. LED bảy đoạn. 7447 cho phép điều khiển các LED bảy đoạn bằng cách giải mã số BCD tại đầu vào (A-D) và sinh ra các tín hiệu kích hoạt các thanh led của LED bảy đoạn (a-g). Để tiết kiệm chi phí, 7447 được dùng chung cho cả 7 LED bảy đoạn. Việc kích hoạt LED bảy đoạn được điều khiển thông qua cổng A và các transitor Q1-Q7, dữ liệu số cần hiển thị được gửi qua cổng B. Đoạn mã sau đây dùng để kiểm tra hệ thống LED bằng cách hiển thị trên cả 7 LED số 8. Chú ý rằng để bật 1 LEDi ta cần đưa tín hiệu dữ liệu Di=0 trên cổng 0AH tới transitor Qi tương ứng.

DK_LED EQU 0AH ; Cổng điều khiển LED DL_LED EQU 0BH ; Cổng dữ liệu hiển thị

MOV AL,FFH ; Tắt tất cả các LED OUT DK_LED, AL

MOV CX,64 ; Trễ bằng 64 lệnh NOP

Tre: NOP (adsbygoogle = window.adsbygoogle || []).push({});

MOV AL,8 ; Đưa số 8 ra 7447 OUT DL_LED,AL

XOR AL,AL ; Đặt AL=0

OUT DK_LED,AL ; Bật tất cả các LED

Một phần của tài liệu Bài giảng kỹ thuật vi xử lý (Trang 94 - 98)