7 vi mạch nhớ SRAM 8Kx8 còn lại BE000-BFFFF
TNNV1 sẵn sàng?
bị ngoại vi (polling) tr−ớc khi thực hiện vào/ra dữ liệu.
2. Vào/ra dữ liệu bằng cách thăm dò trạng thái sẵn sàng của thiết bị Ph−ơng pháp vào/ra dữ liệu bằng cách thăm
dò trạng thái sẵn sàng của thiết bị ngoại vi là ph−ơng pháp điều khiển vào/ra dữ liệu bằng ch−ơng trình – có hội thoại. Tín hiệu hội thoại (handshaking signal) ở đây là tín hiệu báo trạng thái sẵn sàng của thiết bị ngoại vi.
Việc điều khiển vào/ra dữ liệu sẽ trở nên rất đơn giản nếu thiết bị ngoại vi lúc nào cũng sẵn sàng chờ làm việc (trao đổi dữ liệu) với CPU – Nh− đã đề cập đến trong phần giới thiệu – đó là ph−ơng pháp vào/ra dữ liệu đồng bộ (trực tiếp – không hội thoại). Tuy nhiên trong thực tế không phải lúc nào CPU cũng làm việc với các thiết bị ngoại vi –liên tục sẵn sàng– nh− trên, vì tốc độ làm việc của thiết bị ngoại vi và CPU là rất chênh lệch. Thông th−ờng khi CPU muốn trao đổi dữ liệu với một thiết bị ngoại vi nào đó, thông qua ch−ơng trình nó liên tục kiểm tra trạng thái sẵn sàng của thiết bị ngoại để xem có yêu cầu trao đổi dữ liệu (yêu cầu phục vụ) hay không? Đến khi có một thiết bị ngoại vi nào đó có yêu cầu trao đổi dữ liệu (tức là có tín hiệu báo trạng thái sẵn sàng – readly) thì ch−ơng trình sẽ chuyển sang thực hiện việc trao đổi dữ liệu (công việc trao đổi này có thể là các lệnh ngay trong ch−ơng trình chính hoặc là một ch−ơng trình con phục vụ – hoặc ISR) rồi lại tiếp tục kiểm tra thiết bị ngoại vi kế tiếp. Quá trình này đ−ợc thực hiện tiếp tục đến thiết bị ngoại vi cuối cùng rồi lại đ−ợc lặp lại từ đầu. Vậy, nếu làm việc theo ph−ơng pháp thăm dò thì thông th−ờng CPU phải đ−ợc dành riêng cho công việc trao đổi dữ liệu vì nó phải liên tục kiểm tra trạng thái sẵn sàng của thiết bị ngoại vi thông qua các tín hiệu móc nối. Các tín hiệu này đ−ợc lấy từ mạch phối ghép, do ng−ời thiết kế mạch tạo ra để cho ch−ơng trình có thể kiểm tra nó. Việc này đ−ợc tính toán đồng bộ khi xây dựng mạch và ch−ơng trình điều khiển.
TNNV1 sẵn sàng? sẵn sàng?
Vào/ra dữ liệu với TBNV1 Ch−ơng trình điều khiển T TNNV1 sẵn sàng?
Vào/ra dữ liệu với TBNV1
F
TNNV1 sẵn sàng? sẵn sàng?
Vào/ra dữ liệu với TBNV1 T F T F ...
Hình vé: L−u đồ điều khiển của Ph−ơng pháp thăm dò trạng thái sẵn sàng
Nói chung, ph−ơng pháp này đơn giản trong tổ chức phần cứng và phần mềm nh−ng gặp phải nh−ợc điểm là khi số l−ợng thiết bị ngoại vi tăng lên thì sẽ làm lãng phí thời gian CPU cho việc kiểm tra trạng thái sẵn sàng và khả năng đáp ứng tức thời với phục vụ của CPU là rất thấp.
Hình vẽ cho thấy l−u đồ của ch−ơng trình điều khiển theo ph−ơng pháp thăm dò khi số l−ợng số thiết bị ngoại vi > 1.
Nếu thông tin đ−ợc phát hoặc nhận từ một thiết bị ngoại vi nào đó sẽ thiết lập một cờ trạng thái thích hợp (thông th−ờng là bằng một mạch lật trạng thái bởi xung STB của thiết bị ngoại vi). Bộ vi xử lý sẽ kiểm tra cờ trạng thái này và sẽ thực hiện modul ch−ơng trình trao đổi dữ liệu khi cờ trạng thái báo rằng thiết bị ngoại vi sẵn sàng cho việc trao đổi dữ liệu. Nó nh− một tín hiệu yêu cầu phục vụ (thụ động) cho việc vào/ra dữ liệu.
Sau đây là một ví dụ về cách tạo tín hiệu móc nối trong tổ chức phần cứng và l−u đồ thuật toán (ch−ơng trình điều khiển) dùng cho việc trao đổi dữ liệu giữa CPU và thiết bị ngoại vi.
Để đơn giản, trong ví dụ này ta giả thiết CPU chỉ làm việc với 1 thiết bị ngoại vi và và 1 thiết bị ngoại vi ra. Việc tổ chức phối ghép phần cứng đ−ợc thực hiện trên các vi mạch (IC) cỡ vừa để dễ theo dõi các tín hiệu.
Một cổng vào có địa chỉ 00 đ−ợc dùng để đọc trạng thái sẵn sàng của thiết bị ngoại vi số 1 và số 2. (TB1: vào; TB2: ra). Tín hiệu báo sẵn sàng của thiết bị ngoại vi số 1 (có địa chỉ 01) đ−ợc đặt vào bit D0 và tín hiệu báo sẵn sàng của thiết bị ngoại vi số 2 (có địa chỉ 02) đ−ợc đặt vào biit D1 của bus dữ liệu. Các bit tín hiệu này sẽ có giá trị bằng 1 khi thiết bị ngoại vi t−ơng ứng ở trạng thái sẵn sàng trao đổi dữ liệu với CPU và chúng sẽ đ−ợc đ−a vào bus dữ liệu khi CPU đọc nó bằng lệnh đọc cổng có địa chỉ 00. Ch−ơng trình điều khiển trao đổi dữ liệu sẽ kiểm tra các bit báo sẵn sàng này và có các đáp ứng thích hợp.
Cụ thể hoạt động của phần mạch vào dữ liệu nh− sau: Khi thiết bị vào (TB1) có (1 byte) dữ liệu cần
(trao đổi) đ−a vào hệ thống, nó đ−a ra xung STB để cho phép mạch chốt 8 bit chốt lấy dữ liệu đó đồng thời kích cho mạch lật D (mạch tạo tín hiệu sẵn sàng) làm việc đầu ra Q = 1. Bộ vi xử lý (CPU) thông qua lệnh đọc cổng 00 để thăm dò trạng thái sẵn sàng của thiết
Mạch 3 trạng thái /OC Mạch chốt 8 bit /G Input Device (1) pr Q D lck clr +5V Mạch Chốt 8 bit /G Mạch 3 trạng thái /OC Output Device (2) pr Q D lck clr +5V Bus dữ liệu D0 D1 ... D7 ISP01 ISP00 ISP01 STB ACK OSP02 OSP00 OSP02
bị ngoại vi số 1 thông qua bit D0. Khi thấy D0 = 1, nó đọc 1 byte dữ liệu vào đồng thời xoá luôn Q (Q = 0, thiết bị ngoại vi không sẵn sàng) để chuẩn bị lần đọc byte dữ liệu khác. T−ơng tự nh− vậy ta có thể thấy đ−ợc sự hoạt động của phần mạch ra dữ liệu – thiết bị ngoại vi số 2. Yêu cầu: Lập trình theo l−u đồ (a) – đ−ờng nét liền để thực hiện việc đọc vào một byte dữ liệu mỗi khi cổng 01 báo sẵn sàng rồi hiển thị byte dữ liệu đó. Giả thiết có 100 byte dữ liệu phải đọc và có sẵn thủ tục thực hiện hiển thị giá trị trong thanh ghi al lên màn hình có tên là hien_thi. –
Mov cx, 100 ;Số byte dữ liệu cân đọc tro