Bài giảng Kỹ thuật vi xử lý

Giá trị số cần hiện thị của mỗi con số được gửi đến cổng PB của 8255A từ CPU dưới dạng mã BCD. Từ đây số BCD được mạch SN7447 giải mã và tạo ra các tín hiệu điều khiển thích hợp đưa đến các chân catốt a, b,., g của LED. Mỗi giá trị cần hiện thị được đưa đến cổng PB cứ mỗi 2 ms một lần cho một đèn. Giá trị số nói trên được hiện ra trên chữ số thập phân nào lại là do các bit của byte dữ liệu từ CPU đưa đến cổng PA của mạch 8255A quyết định.

pdf85 trang | Chia sẻ: phanlang | Lượt xem: 3111 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
bộ nhớ với thời gian thâm nhập cà 420ns làm việc. Trong biểu đồ thời gian ghi ta thấy phải có một thời gian giữ dữ liệu tối thiểu để ghi tgiữW = 88ns sau khi WR đột biến từ 0 lên 1. trong thực tế thời gian này gần như bằng 0 đối với bộ nhớ thông dụng. Độ dài của xung ghi đối với CPU 8088 - 5MHz là TWR = 340ns cũng là phù hợp với các bộ nhớ với thời gian thâm nhập cà 420ns. Tín hiệu vào READY tạo ra các chu kỳ đợi cho các bộ nhớ hoặc thiết bị ngoại vi chậm. Một chu kỳ đợi Tw bao gồm một hoặc nhiều chu kỳ đồng hồ T được chèn vào giữa T2 và T3 nhằm kéo dài chu kỳ bus. Nếu một chu kỳ đợi Tw = T được chèn vào thì thời gian thâm nhập bộ nhớ, thường cỡ 420 ns, sẽ được kéo dài một chu kỳ đồng hồ T (200 ns) thành 640 ns. Tín hiệu READY được lấy mẫu ở cuối chu kỳ T2 (hoặc ở giữa các chu kỳ T của Tw). Nếu READY = 0 ở cuối T2 thì T3 được trễ và Tw được chèn vào giữa T2 và T3. Tín hiệu READY được kiểm tra bằng 0 khi xung đồng hồ tại cuối chu kỳ T2 chuyển từ 1 sang 0 và được kiểm tra bằng 1 khi xung đồng hồ ở giữa các chu kỳ T của Tw chuyển từ 0 sang 1. Tín hiệu READY yêu cầu rất chặt chẽ về thời gian, yêu cầu này được đảm bảo bằng mạch tạo xung nhịp 8284A. Trên hình dưới đây là một mạch dùng để xem thêm chu kỳ đợi với thời gian đợi tuỳ chọn nT (n=0-7). Bằng cách thay đổi đầu nối đến các đầu ra của mạch vào song song ra nối tiếp 74LS164 cho đến khi có sườn dương của T2. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 53 5.2. Phối ghép 8088 với bộ nhớ 5.2.1. Bộ nhớ bán dẫn Trước khi nói về phối ghép 8088 với bộ nhớ ta nói qua một chút về các bộ nhớ bán dẫn thường dùng với bộ vi xử lý. Các bộ nhớ bán dẫn thường dùng với bộ vi xử lý bao gồm : + Bộ nhớ cố định ROM (read only memory, bộ nhớ có nội dung ghi sẵn chỉ để đọc ra). Thông tin ghi trong mạch không bị mất khi mất nguồn điện nuôi cho mạch. + Bộ nhớ bán cố định EPROM (aerraseble programmable ROM là bộ nhớ ROM có thể lập trình được bằng xung điện và xoá được bằng tia cực tím). + Bộ nhớ không cố định RAM ( random access memory, bộ nhớ ghi/đọc) thông tin ghi trong mạch bị mất khi mất nguồn điện nuôi cho mạch. Trong các bộ nhớ RAM ta còn phân biệt ra loại RAM tĩnh (stiatic RAM hay SRAM, trogn đó mỗi phần tử nhỏ là một mạch lật hay trạng thái ổn định) và loại RAM động (dyamic RAM hay DRAM, trong đó mỗi phần tử nhớ là một tụ điện rất nhỏ được chế tạo bằng công nghệ MOS). Một bộ nhớ thường được chế tạo nên từ nhiều vi mạch nhớ. Một vi mạch nhớ thường có dạng cấu trúc tiêu biểu như sau: Sơ đồ khối 1 vi mạch nhớ. Theo sơ đồ khối này ta thấy một l vi mạnh nhớ có các nhóm tín hiệu sau :  Nhóm tín hiệu địa chỉ : Các tín hiệu địa chỉ có tác dụng chọn ra một ô nhớ (từ nhớ cụ thể để ghi/đọc). Các ô nhớ có độ dài khác nhau tuỳ theo nhà sản xuất : 1, 4, 8, bit. Số đường tín hiệu địa chỉ có liên quan đến dung lượng của mạch nhớ. Với một mạch nhớ có m bit địa chỉ thì dung lượng của mạnh nhớ đó là 2m từ nhớ. Ví dụ, với m = 10(có 10 chân địa chỉ A0 – A10) ta có dung lượng mạch nhớ là 1K ô nhớ (1 kilô = 210 = 1024) và với m=20 ta có dung lượng mạch nhớ là 1M ô nhớ (1 Mêga = 2 20 = 1048576). Nếu vi mạch nhớ có dung lượng 1 K (210 = 1024 = 400H) ô nhớ với địa chỉ ô nhớ đầu tiên là 10000H thì địa chỉ của ô nhớ cuối cùng sẽ là 10400H - 1H = 103FFH. Nếu vi mạch nhớ có dung lượng 4 K (212 = 1000H) ô nhớ với địa chỉ ô nhớ đầu tiên là 14000H thì địa chỉ của ô nhớ cuối cùng sẽ là 15000H - 1H = 14FFFH.  Nhóm tín hiệu dữ liệu : Tất cả các vi mạch nhớ đều có các chân dữ liệu ra (đối với vi mạch nhớ ROM) hoặc chân dữ liệu vào/ra (đối với vi mạch nhớ RAM). Các chân dữ liệu thường có tên từ D0 đến Dn (thường là từ D0 đến D7). Số chân dữ liệu quyết định độ dài ô nhớ của vi mạch. Ví dụ vi mạch Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 54 nhớ có 8 chân dữ liệu thì các ô nhớ trong vi mạch nhớ có độ dài 8 bit. Thông thường người ta hay nói dung lượng kèm theo độ dài ô nhớ, ví dụ nói vi mạch nhớ có dung lượng 1 KB, nghĩa là vi mạch nhớ có số ô nhớ 1 K, mỗi ô nhớ có độ dài 1 byte (8 bit). Trong các catalog của vi mạch nhớ thường ghi số ô nhớ nhân với số bit trên một ô nhớ, ví dụ: một vi mạch nhớ có dung lượng 1K, mỗi ô nhớ có độ dài 8 bit thường được ghi là 1K×8.  Nhóm tín hiệu chọn vi mạch (chọn vỏ) : Các tín hiệu chọn võ là CS (chip select) hoặc CE (Chip enable) thường được dùng để tạo ra vi mạch nhớ cụ thể để ghi/đọc. Tín hiệu chọn võ ở các mạch RAM thường la CS , còn ở mạch ROM thường là CE . Các tín hiệu chọn võ thường được nối với đầu ra của bộ giải mã địa chỉ. Khi một mạnh nhớ không được chọn thì bus dữ liệu của nó bị treo (ở trạng thái trở kháng cao)  Nhóm tín hiệu điều khiển : Tín hiệu điều khiển cần có trong tất cả các mạch nhớ. Các mạch nhớ ROM thường có một đầu vào điều khiển OE (output enable) để cho phép dữ liệu được đưa ra bus. Một mặt nhớ không được mở bởi OE thì bus dữ liệu của nó bị treo. Một mạch nhớ Ram nếu chỉ có một tín hiệu điều khiển thì thường đó là R /W để điều khiển quá trình ghi/đọc. Nếu mạch nhớ RAM có hai tín hiệu điều khiển đó thường là WE (write enable) để điều khiển ghi và OE để điều khiển đọc. Hai tín hiệu này phải ngược pha nhau để điều khiển việc ghi/đọc mạch nhớ. Một thông số đặc trưng khác của bộ nhớ là thời gian thâm nhậm tac. Nói chung nó được định nghĩa như là thưòi gian kể từ khi có xung địa chỉ trên bus địa chỉ cho đến khi có dữ liệu ra ổn định trên bus dữ liệu. Thời gian thâm nhậm bộ nhớ phụ thuộc rất nhiều vào công nghệ chế tạo nên nó. Các bộ nhớ làm bằng công nghệ lưàng cực có thời gian thâm nhập nhỏ (10 - 30ns) còn các bộ nhớ làm bằng công nghệ MOS có thời gian thâm nhập lớn hơn nhiều (cà 150ms hoặc hơn nữa). Sau đây là ví dụ một số loại bộ nhớ thường dùng : o Bộ nhớ EPROM : Các bộ nhớ EPROM thông dụng tồn tại dưới nhiều kiểu mạch khác nhau. Họ 27xxx có các loại makchj sau : 2708 (1Kx8), 2716 (2Kx8), 2732 (4Kx8), 2764 (8Kx8), 27128 (16Kx8), 27256 (32Kx8), 27512 (64Kx8) với tac = 250-450ns tuỳ theo loại cụ thể. Trên hình dưới là sơ đồ các tín hiệu và bảng chức năng của 2716. Mạch nhớ 2716 có thời gian thâm nhập tac = 450ns, như vậy để ghép và làm việc được với CPU 8088 5MHz nó cần phải thêm chu kỳ đợi. Ngược lại mạch nhớ 2716 - 1 lại có tac = 250ns nên không cần thêm chu kỳ đợi. Cần lưu ý là trong chế độ duy trì công suất tiêu thụ của mạch giảm được 75% so với công suất khi nó ở chế độ tích cực Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 55 Bộ nhớ EPROM 2716 (2Kx8) Là bộ nhớ ROM có thể lập trình được bằng xung điện hoặc xóa bằng tia cực tím. Họ EPROM 27xxx có các loại sau: 2704 (512x8), 2708 (1Kx8), 2716 (2Kx8), 2732 (4Kx8), 2764 (8Kx8), 27128 (16Kx8), 27256 (32Kx8), 27512 (64Kx8) và 271024 (128Kx8). Vi mạch nhớ EPROM 2716 có thời gian truy nhập tacc = 450 ns nên để ghép nối với 8088- 5MHz nó cần thêm chu kỳ đợi. Trong chế độ duy trì,công suất tiêu thụ của EPROM 2716 giảm được 75% so với công suất tiêu thụ khi nó ở chế độ tích cực. Ở trên là sơ đồ chân và các chế độ hoạt động của 2716. o Bộ nhớ RAM tĩnh (SRAM) : Bộ nhớ SRAM có khả năng lưu giữ thông tin trong nó chừng nào nó còn được cấp điện. Các bộ nhớ SRAM và EPROM cùng dung lượng thường có cách bố trí chân giống nhau để dể bề dày thay thế lẫn trong qua trình phát triển hệ thống. Dưới đây là sơ đồ chân tin hiếu của SRAM 4016 2K8 với thời gian thâm nhập tac = 250ns. Đã tồn tại trong thực tế mạch nhớ SRAM dung lượng 32Kx8 (62256LP-10) với thời gian thâm nhập cà 100ns chế tạo theo công nghệ CMOS và một loại SRAM khác chês tạo theo công nghệ lưỡng cực 8KB - 120KB có thời gian thâm nhập 15ns. Bộ nhớ RAM tĩnh TMS 4016 (2Kx8). o Bộ nhớ RAM động (DRAM) : Bộ nhớ DRAM lưu giữ thông tin bằng cách nạp hay không nạp điện tích lên các tụ điện công nghệ MOS. Mỗi phần từ nhớ của bộ nhớ DRAM vì vậy cần được làm tươi lại (bằng cách ghi hay đọc phần tử đó) sau một khoảng thời gian cà 15,6 s , nếu không điện tích trên các tụ điện sẽ bị tiêu tán và dẫn đến mất thông tin. Các mạch DRAM cần có các mạch logic phụ để đảm bảo việc làm tươi và vì thế việc phối ghép đó với bộ vi xử lý là rất phức tạp. Bù lại nhược điểm này các mạch nhớ DRAM lại có ưu điểm là có thể chế tạo được một số lượng rất lớn các phần tử nhớ trên 1 đơn vị điện tích, các vi mạch này do vậy cũng cần rất nhiều chân cho các tín hiệu địa chỉ. Để làm giảm bớt số lượng chân địa chỉ trên một vi mạch nhớ, người ta thường chia địa chỉ ra làm hai nhóm : địa chỉ hàng và địa chỉ cột dồn kênh chúng trên các chân địa chỉ, đồng thời cung cấp thêm các tín hiệu cho phép chốt giữ riêng lẽ địa chỉ hàng ( RAS ) và cột (CAS ) ở bên trong vi mạch nhớ Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 56 Bộ nhớ RAM động TMS 4464 (64Kx4). Các mạch nhớ DRAM thường được chế tạo với độ dài 1 hoặc 4 bit. Đã tồn tại trong thực tế mạch nhớ DRAM dung lượng 1 Mx1, 4 Mx1, và 16 Mx1 và chúng thường được tổ hợp thành bộ nhớ kiểu SIMM (single in-line memory module) hay SIP (single in-line package) dùng trong các máy tính thế hệ mới. Trên hình 5.15 là ví dụ của vi mạch nhớ TMX4C1024 dung lượng 1 Mx1 với thời gian thâm nhập 60ns. 5.2.2. Giải mã địa chỉ cho bộ nhớ Mỗi mạch nhớ nối ghép với CPU cần phải được CPU qui chiếu tới một cách chính xác khi thực hiện các thao tác ghi/đọc. Điều đó có nghĩa là mỗi mạch nhớ phải được gán cho một vùng riêng biệt có địa chỉ xác định nằm trong không gian địa chỉ tổng thể của bộ nhớ. Việc gán địa chỉ cụ thể cho mạch nhớ được thực hiện nhờ một xung chọn vỏ lấy từ mạch giải mã địa chỉ. Việc phân định không gian địa chỉ tổng thể thành các cùng nhớ khác nhau để thực hiện những chức năng nhất định gọi là phân vùng bộ nhớ. Ví dụ, đối với CPU 8088 thì không gian địa chỉ tổng thể dành cho bộ nhớ là 1MB, trong đó vùng nhớ dung lượng 1 KB kể từ địa chỉ thấp nhất 00000H nhất thiết phải được dành cho RAM (vì tại đây ta phải có chỗ để cho một bảng gồm 256 vectơ ngắt của 8088), tại còn vùng nhớ có chứa địa chỉ FFFF0H thì lại nhất thiết phải dành cho ROM hay EPROM ( vì FFFF0H là địa chỉ khởi động của CPU). Về nguyên tắc một bộ giải mã địa chỉ thường có cấu tạo như trên hình dưới đây : Đầu vào của bộ giải mã là các tín hiệu địa chỉ và tín hiệu điều khiển. Các tín hiệu địa chỉ gồm các bit địa chỉ có quan hệ nhất định vơi các tín hiệu chọn vỏ ở đầu ra. Tín hiệu điều khiển thường là tín hiệu IO/ M dùng để phân biệt đối tượng mà CPU chọn làm việc là bộ nhớ hay thiết bị vào/ra. Mạch giải mã là một trong những khâu gây ra việc trễ thời gian của tín hiệu từ CPU tới bộ nhớ hoặc thiết bị ngoại vi mà trong khi chọn mạch nhớ/ngoại vi ta phải tính đến. Tuỳ theo quy mô của mạch giải mã mà ta có thể có ở đầu ra một hay nhiều tín hiệu chọn vỏ. Giải mã đầy đủ cho một mạch nhớ đòi hỏi ta phải đưa đến đầu vào của mạch giải mã các tín hiệu địa chỉ sao cho tín hiệu ở đầu ra của nó chỉ chọn riêng mạch nhớ đã định. Trong trường hợp này ta phải dùng tổ hợp đầu đủ của các đầu vào địa chỉ tương ứng để chọn được mạch nhớ, vì xung nhận được từ mạch giải mã ngoài việc chọn mạch nhớ ở vùng đã định sẽ có thể chon ra các mạch nhớ ở các vùng nhớ khác nữa. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 57 Như vậy, giải mã thiếu thì tiết kiệm được linh kiện khi thực hiện bộ giải mã nhưng lại làm mất tính đơn trị của xung chọn thu được ở đầu ra. Thông thường khi thiết kế mạch giải mã người ta hay tính dôi ra một chút để dự phòng, sao cho sau này nếu có sự thay đổi do phải tăng thêm dung lượng củabộ nhớ thì vẫn có thể sử dụng được mạch giải mã đã được thiết kế .  Thực hiện mạch giải mã bàng các mạch NAND Bằng các mạch kiểu mạch cửa NAND ta có thể xây dựng được mạch giải mã địa chỉ đơn giản với số đầu ra hạn chế, ta phải đưa đến đầu vào của mạch cửa nhiều lối và một tổ hợp thích hợp của các bit địa chỉ để nhận được ở đầu ra của nó tín hiệu chọn vỏ cho mạch nhớ. Ví dụ ta sử dụng vi mạch mhớ EPROM 2716 2K8 làm bộ nhớ. Khi nối ghép với bộ vi xử lý 8088, các chân từ A10 - A0 của 8088 được nối tới các đầu vào địa chỉ từ A10 - A0 của EPROM, các chân còn lại của 8088 (A19 - A11) được nối tới đầu vào của bộ giải mã cổng NAND. Bộ giải mã có nhiệm vụ chọn một phần 2 KB (vi mạch EPROM) trong 1 MB bộ nhớ mà 8088 có thể quản lý được. Trong mạch giải mã đơn giản cho EPROM này, xung chọn vỏ sẽ có tác động khi ta đọc bộ nhớ tại địa chỉ nằm trong khoảng EF800H - FFFFFH, tức là vùng địa chỉ có chứa địa chỉ khởi động của CPU 8088. 9 bit địa chỉphần cao của bus địa chỉ (A11-A19) ở mức 1 sẽ phối hợp cùng xung IO/ M (đã được đảo) để tạo ra xung chọn vùng nhớ 2 KB đặt tại địa chỉ cao nhất trong không gian địa chỉ của 8088. mỗi ô nhớ cụ thể trong 2 KB của mạch nhớ EPROM 2716-1 sẽ do các bit thấp còn lại của bus địa chỉ (A0 - A10) chọn ra. Để kiểm chứng nhanh điều này ta cần nhớ rằng với các bit địa chỉ A10 ta chọn ra được các mạch nhớ 1KB và với bit A11 ta chọn ra được các mạch nhớ 2 KB các mãng nhớ này nằm rãi rác trong không gian của bộ nhớ. Đầu ra của cổng NAND có logic 0 khi các chân địa chỉ A19 - A11 nối tới đầu vào của nó đều có logic 1 và tín hiệu điều khiển IO/ M = 0. Đầu ra logic 0 của bộ giải mã cổng NAND được đưa tới đầu vào CE của vi mạch nhớ EPROM và sẽ chọn vi mạch này. Nếu đầu vào Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 58 OE cũng có logic 0 thì dữ liệu sẽ được đọc từ EPROM. OE được kích hoạt bằng tín hiệu RD của 8088. Vì chỉ khi các bit A19 - A11 bằng 1 thì EPROM mới được chọn, do đó địa chỉ 20 bit của các ô nhớ trong EPROM có dạng: 9 bit bên trái bằng 1 còn 11 bit bên phải tùy ý. 1111 1111 1XXX XXXX XXXX Từ đây ta suy ra khoảng địa chỉ dành cho EPROM là từ 1111 1111 1000 0000 0000 = FF800H đến 1111 1111 1111 1111 1111 = FFFFFH Trong thực tế bộ giải mã cổng NAND hiếm khi được dùng vì mỗi vi mạch nhớ cần một bộ giải mã.  Thực hiện bộ giải mã dùng mạch giải mã kiểu 74LS138 : Khi ta muốn có nhiều đầu ra chọn vỏ từ bộ giải mã mà vẫn dùng các mạch logic đơn giản thì thiết kế sẽ trở nên rất cồng kềnh do số lượng các mạch cửa tăng lên. Trong trường hợp như vậy ta thường sử dụng các mạch giải mã có sẵn. 74LS138 là bộ giải mã ở dạng vi mạch (IC), được sử dụng khá phổ biến. Từ bảng chân lý ta thấy tại bất kỳ thời điểm nào cũng chỉ có một đầu ra bằng 0. Để có đầu ra bằng 0 thì 3 đầu vào cho phép bộ giải mã hoạt động đều phải ở mức tác động, tức là G2A=0, G2B=0 và G1=1. Khi bộ giải mã được phép hoạt động thì các đầu vào C, B và A sẽ chọn đầu ra nào bằng 0. Các đầu ra của bộ giải mã sẽ được nối tới các đầu vào CE hay CS của vi mạch nhớ. Ví dụ Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 59 Giả thiết ta cần dùng riêng vùng nhớ 64 KB có địa chỉ F0000H-FFFFFH. Cho các mạch nhớ EPROM 8 KB (dùng 8x2764-15, tac = 150ns). Hãy dùng mạch giải mã kiểu 74LS138 để thực hiện. Giải Ta có thể dùng mạch 74LS138 và bố trí các đường địa chỉ như trên hình bên dưới Ở thí dụ này ta cần lưu ý rằng bit địa chỉ A13 có khả năng chọn ra các mãng nhớ 8 KB nằm rãi rác trong không gian nhớ của 8088. chính vì vậy ta dùng nó như đầu vào A của 74LS138, cùng với các địa chỉ bit A14 và A15 tại các chân B và C ta sẽ chọn ra được 8 vùng nhớ liền nhau, mỗi vùng có dung lượng là 8 KB hay toàn vùng là 64 KB này ở phần cao nhất trong không kgian nhớ. Điều này có thể đạt được một cách dể dàng bằng việc dùng tổ hợp 4 bit địa chỉ cao nhất A16 - A19 ở trạng thái 1 (A19 thông qua đầu vào G1 và A16 -A18 qua 1 mạch NAND 3 đầu vào để đưa đến G2A của mạch 74LS138). Trong mạch trên các đầu ra của bộ giải mã 74LS138 được nối tới đầu vào CE , còn tín hiệuRD từ 8088 được nối tới đầu vào OE của 8 vi mạch nhớ EPROM 2764. Tại bất kỳ thời điểm nào cũng chỉ có một đầu ra bằng 0 và do đó chỉ có một vi mạch nhớ được chọn và gửi dữ liệu của nó trên bus dữ liệu khi tín hiệu RD = 0. Nhìn vào mạch điện ta thấy, khi tất cả các bit địa chỉ từ A19 - A16 đều bằng 1 và có tín hiệu chọn bộ nhớ từ 8088 (IO/ M = 0) sẽ làm cho G2A = 0, G2B = 0, G1 = 1, và do đó kích hoạt bộ giải mã. Khi bộ giải mã đã hoạt động thì các bit địa chỉ từ A15 - A13 sẽ xác định đầu ra nào bằng 0 và tương ứng vi mạch nhớ nào sẽ được chọn. Như vậy, dạng địa chỉ của một ô nhớ được giải mã là 1111 XXXX XXXX XXXX XXXX Từ đây suy ra khoảng địa chỉ của cả bộ nhớ là từ 1111 0000 0000 0000 0000 = F0000H đến 1111 1111 1111 1111 1111 = FFFFFH Ta cũng có thể xác định được khoảng địa chỉ của từng vi mạch nhớ nối tới đầu ra của bộ giải mã. Ví dụ xác định khoảng địa chỉ của vi mạch nhớ nối tới đầu ra 0: vì vi mạch này được chọn khi CBA = 000 nên địa chỉ của ô nhớ trong vi mạch này có dạng CBA 1111 000X XXXX XXXX XXXX Từ đây suy ra khoảng địa chỉ của vi mạch nhớ là từ Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 60 1111 0000 0000 0000 0000 = F0000H đến 1111 0001 1111 1111 1111 = F1FFFH CBA 1111 001X XXXX XXXX XXXX Từ đây suy ra khoảng địa chỉ của vi mạch nhớ là từ 1111 0010 0000 0000 0000 = F2000H đến 1111 0011 1111 1111 1111 = F3FFFH Tại thí dụ này ta thấy mạch giải mã có sẵn 74LS138 có số lượng đầu vào địa chỉ và đầu vào cho phép hạn chế. Nếu ta có số lượng đầu vào cho địa chỉ lớn mà ta lại phải giải mã đầy đủ để thực hiện bộ giải mã đã hoàn chỉnh ta vẫn phải dùng thêm các mạch logic phụ. Đây cũng là lý do để người ta thay thế các bộ giải mã kiểu này bằng các bộ giải mã dùng PROM hoặc PLA (programable logic array) với ưu điểm chính là chúng có rất nhiều đầu vào cho các bit địa chỉ và vì thế rất thích hợp trong các hệ vi xử lý sau này với không gian địa chỉ lớn. 5.2.3. Phối ghép CPU 8088 - 5MHz với bộ nhớ Sau khi đã giới thiệu các phương pháp giải mã cho mạch nhớ trong phần này ta sẽ giới thiệu cách phối ghép 8088 với bộ nhớ. Có thể nói tổng quát rằng nếu -không có xung đột giữa tốc độ thâm nhập mạch nhớ và tốc độ CPU thì việc phối ghép CPU với bộ nhớ đơn giản chỉ là việc giải mã địa chỉ trong mạch nhớ. Trong phần lớn các trường hợp điều này có thể đúng cho các mạch nhớ RAM và các mạch nhớ EPRAM có thời gian thâm nhập nhỏ hoen hoặc bằng 250 ms, cách phối ghép CPU với cac mạch này về cơ bản là giống nhau. Đối với các mạch nhớ EPROM như 2716, 2732 ... loại tốc độ 450 ms khi thực hiện phối ghép với 8088 - 5MHz thì cần phải tính toán thận trọng hơn. Trong phần đầu của chương này ta đã tính được rằng muốn phối ghép được với CPU 8088 - 5MHz thì các mạch nhớ phải có thời gian thâm nhập dài nhất là cà 450 ms, vì vậy nếu ta muốn ghép EPROM 2732 tốc độ 450ms vào bộ nhớ thì chắc chắn phải có cách để báo cho CPU xen thêm chu kỳ đợi trên hình 5.21 là sơ đồ mạch phối ghép EPROM 2732 có thêm mạch NAND để tạo tín hiệu cho phép mạch giải mã và tín hiệu yêu cầu đợi để đưa đến chân RDI1 của 8284 (đã được trình bày ở phần trước). Bằng cách này mỗi khi CPU đợi EPROM 2732 tốc độ chậm thì 1 chu kỳ đợi sẽ được tự động xen thêm. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 61 Phối ghép EPROM 2732 - 450 ns với CPU 8088 - 5MHz. Việc phối ghép SRAM với 8088 thường đơn giản hơn so với EPROM vì SROM có tốc độ nhanh nên không cần mạch xen thêm chu kỳ đợi. 5.3. Phối ghép 8088 với thiết bị ngoại vi 5.3.1. Các kiểu phối ghép vào/ra Đối với 8088 (hay họ 80x86 nói chung) có 3 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ị ngoại vi có không gian địa chỉ tách biệt với bộ nhớ và b) thiết bị ngoại có không gian địa chỉ chung với bộ nhớ.  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 độc quyền dùng 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. Tất nhiên ta phải dùng tín hiệu IO/M, và các lệnh trao đổi dữ liệu một cách thích hợp cho mỗi không gian đó Đây là cách phối ghép thường được trong các hệ vi xử lý Intel. Trong cách phối ghép này không gian địa chỉ của I/O tách biệt với không gian địa chỉ bộ nhớ. Bởi vậy người sử dụng có thể mở rộng bộ nhớ tới kích thước cực đại (1 MB). Địa chỉ của thiết bị vào/ra trong cách phối ghép này được gọi là cổng. Bất lợi của cách phối ghép này là phải sử dụng cách lệnh IN, INS, OUT và OUTS để truyền dữ liệu giữa bộ vi xử lý và I/O. Các tín hiệu điều khiển như IO/ M ,RD và WR cần cho phối ghép này. Trong máy tính cá nhân, các cổng I/O được dùng để nối ghép với các thiết bị ngoại vi. Các cổng 8 bit dùng để truy nhập các thiết bị đặt trên mainboard như đồng hồ và bàn phím, còn các địa chỉ cổng 16 bit dùng để truy nhập các cổng nối tiếp và song song cũng như các thiết bị video và các ổ đĩa. Ví dụ về phân vùng địa chỉ I/O cho máy tính cá nhân Các cổng từ 0000H đến 03FFH thường dành cho máy tính. Còn các cổng từ 0400H đến FFFFH dành cho người sử dụng. Bộ đồng xử lý toán học 80287 sử dụng địa chỉ I/O 00F8H - 00FFH để trao đổi thông tin. Vì lý do này mà Intel để dành các cổng từ 00F0H đến 00FFH. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 62  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ỉ 1M mà CPU 8088 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 địa chỉ 1M, phần còn lại là của bộ nhớ. Các thiết bị ngoại vi được đối xử như một ô nhớ trong bộ nhớ. Bởi vậy, các lệnh IN, INS, OUT và OUTS không được sử dụng nữa, thay vào đó là các lệnh chuyển dữ liệu giữa bộ vi xử lý và bộ nhớ (chẳng hạn lệnh MOV). Bất lợi chính của cách phối ghép này là một phần bộ nhớ phải dành cho thiết bị ngoại vi. 5.3.2. Giải mã địa chỉ cho thiết bị vào/ra Việc giải mã địa chỉ cho thiết bị vào/ra gần giống như giải mã địa chỉ cho bộ nhớ. Việc giải mã địa chỉ cho thiết bị vào/ra có không gian địa chỉ chung với bộ nhớ giống hệt như giải mã địa chỉ cho bộ nhớ nên ta không trình bày ở đây. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 63 Sự khác nhau chính giữa giải mã địa chỉ cho bộ nhớ và giải mã địa chỉ cho thiết bị ngoại vi có không gian địa chỉ tách biệt với bộ nhớ là số chân địa chỉ nối tới bộ giải mã: với bộ nhớ là A19 - A0, còn với thiết bị vào/ra là A15 - A0. Địa chỉ của các cổng 8 bit xuất hiện trên bus địa chỉ A15 - A0 trong khoảng từ 0000H đến 00FFH. Nếu một hệ thống định thiết kế mà tương lai không bao giờ có hơn 256 thiết bị ngoại vi thì chúng ta chỉ cần giải mã cho các bit địa chỉ từ A7 - A0, bỏ các bit địa chỉ từ A15 - A8. (Lưu ý là với máy tính cá nhân phải giải mã cả 16 bit). Dưới đây là ví dụ sử dụng bộ giải mã 74LS138 để giải mã địa chỉ cho các cổng vào/ra có địa chỉ F0H - F7H. Mạch giải mã này giống như mạch giải mã địa chỉ bộ nhớ, ngoại trừ các bit địa chỉ nối tới đầu vào bộ giải mã chỉ từ A7 - A0. 5.3.3. Các lệnh vào/ra dữ liệu Các lệnh thực hiện việc trao đổi dữ liệu giữa bộ vi xử lý với các thiết bị ngoại vi gồm có lệnh OUT để đưa dữ liệu từ bộ vi xử lý tới một thiết bị ngoại vi và lệnh IN để đọc dữ liệu một thiết bị ngoại vi vào bộ vi xử lý. Các bộ vi xử lý sau 8086/8088 có thêm lệnh OUTS và INS để di chuyển chuỗi dữ liệu giữa bộ nhớ và một thiết bị ngoại vi. Cả lệnh IN và OUT đều di chuyển dữ liệu giữa thanh ghi chứa của bộ vi xử lý (AL, AX) với một thiết bị ngoại vi. Địa chỉ của cổng vào/ra có thể là địa chỉ cổng 8 bit đặt ngay sau mã lệnh hoặc địa chỉ cổng 16 bit đặt trong thanh ghi DX. Intel gọi địa chỉ cổng 8 bit (ký hiệu là p8) là địa chỉ cố định vì nó được lưu trong bộ nhớ cùng với lệnh, còn địa chỉ cổng 16 bit để trong DX gọi là địa chỉ biến đổi. Các lệnh INS và OUTS chỉ sử dụng địa chỉ 16 bit để trong DX. Khi dữ liệu được di chuyển bằng các lệnh IN và OUT, địa chỉ của cổng vào ra (thường gọi là số cổng) xuất hiện trên bus địa chỉ. Cổng 8 bit xuất hiện trên các chân địa chỉ A7 - A0 với các chân địa chỉ A15 - A8 bằng 0000 00002, các chân còn lại A19 - A16 không dùng cho các lệnh vào/ra. Cổng 16 bit để trong DX xuất hiện trên các chân địa chỉ A15 - A0. Mạch phối ghép vào/ra sẽ giải mã địa chỉ cổng này giống như cách giải mã địa chỉ bộ nhớ. Các lệnh INS và OUTS sử dụng địa chỉ cổng để trong DX nhưng không truyền dữ liệu giữa thanh ghi chứa của bộ vi xử lý và thiết bị vào ra mà truyền dữ liệu giữa bộ nhớ và thiết bị vào/ra. Địa chỉ bộ nhớ được chỉ ra bởi ES:DI (cho lệnh INS) và DS:SI (cho lệnh OUTS). Cũng giống như các lệnh di chuyển chuỗi khác, nội dung của các thanh ghi con trỏ tăng hay giảm phụ thuộc vào bit cờ DF. Cả hai lệnh INS và OUTS đều có thể sử dụng tiếp đầu ngữ REP để cho phép di chuyển nhiều hơn một byte giữa bộ nhớ và thiết bị vào ra. Dưới đây là một vài ví dụ về lệnh vào/ra dữ liệu: Lệnh Độ rộng dữ liệu Chức năng IN AL,p8 8 Đọc 1 byte từ cổng p8 vào AL IN AX,p8 16 Đọc 1 từ từ cổng p8 vào AX IN AL,DX 8 Đọc 1 byte từ địa chỉ cổng trong DX vào AL Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 64 IN AX,DX 16 Đọc 1 từ từ địa chỉ cổng trong DX vào AX INSB 8 Đọc 1 byte từ địa chỉ cổng trong DX vào ô nhớ ES:DI, sau đó DI = DI 1 INW 16 Đọc 1 từ từ địa chỉ cổng trong DX vào ô nhớ ES:DI, sau đó DI = DI 2 OUT p8,AL 8 Đưa 1 byte từ AL ra cổng p8 OUT p8,AX 16 Đưa 1 từ từ AX ra cổng p8 OUT DX,AL 8 Đưa 1 byte từ AL ra địa chỉ cổng trong DX OUT DX,AX 16 Đưa 1 từ từ AX ra địa chỉ cổng trong DX OUTSB 8 Đưa 1 byte từ ô nhớ DS:SI ra địa chỉ cổng trong DX, sau đó SI = SI 1 OUTSW 16 Đưa 1 từ từ ô nhớ DS:SI ra địa chỉ cổng trong DX, sau đó SI = SI 2 5.3.4. Mạch phối ghép vào/ra song song lập trình đƣợc 8255A Mạch 8255A thường được gọi là mạch phối ghép vào/ra lập trình được (program mable peripheral interface, PPI). Do khả năng mềm dẻo trong các ứng dụng thực tế nó là mạch phối ghép được dùng rất phổ biến cho các hệ vi xử lý 8-16 bit. Các chân tín hiệu của 8255A có ý nghĩa khá rõ ràng. Chân Reset phải được nối với tín hiệu reset chung của toàn hệ (khi reset thì các cổng được định nghĩa là cổng vào để không gây ra sự cố cho các mạch điều khiển). Vi mạch 8255 có 3 cổng A, B và C được lập trình theo hai nhóm 12 chân. Nhóm A gồm cổng A và phần cao của cổng C (PC7 - PC4), nhóm B gồm cổng B và phần thấp của cổng C(PC3 - PC0). CS được nối với mạch tạo xung chọn thiết bị để đặt mạch 8255A vào một địa chỉ cơ sở nào đó. các tín hiệu địa chỉ A0, A1 sẽ chọn ra 4 thanh ghi bên trong 8255A 1 thanh ghi để ghi từ điều khiển cho hoạt động của 8255A (viết tắt là CWR, control word register) và 3 thanh ghi khác ứng với các cổng (port) là PA, PB, PC để ghi/đọc dữ liệu . Theo bảng dưới ta nhận thấy địa chỉ cho PA cũng chính là địa chỉ cơ sở của 8255A. A1 A0 Cổng 0 0 Cổng A 0 1 Cổng B 1 0 Cổng C 1 1 Thanh ghi điều khiển Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 65 Có 2 loại từ điều khiển cho 8255A: + Từ điều khiển định nghĩa cấu hình cho các cổng PA, PB, PC + Từ điều khiển lập/xóa từng bit ở đầu ra của PC Sơ đồ khối cấu trúc bên trong của 8255A CS A1 A0 Chọn ra 1 x x không chọn 0 0 0 PA 0 0 1 PB 0 1 0 PC 0 1 1 CWR  Từ điều khiển định nghĩa cấu hình NHOÙM A COÅNG A COÅNG C NHOÙM A COÅNG C NHOÙM B COÅNG B NHOÙM B (CAO) (THAÁP) NHOÙM A NHOÙM B Ñieàu khieån Ñieàu khieån BusD Ñeäm Logic Ñieàu khieån ghi / ñoïc Bus noäi boä DO-D7 RD WR AO A1 RESET CS PAO-PA7 PCO-PC3 PBO-PB7 PC4-PC7 Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 66  Từ điều khiển lập/xoá bit ra PCi: Dạng thức của từ điều khiển để lập/xoá PCi được thể hiện trên hình dưới Như ta thấy ở trên, các chế độ (mode) làm việc của mạch cổng 8255A có thể được định nghĩa bằng từ điều khiển CWR. Cụ thể 8255A có 4 chế độ làm việc: + Chế độ 0: "Vào/ra cơ sở" (còn gọi là "vào ra đơn giản"). Trong chế độ này mỗi cổng PA. PB. PCH và PCL đều có thể được định nghĩa là các cổng vào hoặc ra. Ở chế độ 0, 8255 có chức năng như một thiết bị vào được đệm hoặc thiết bị ra được chốt. Các định nghĩa chức năng cho chế độ 0: • Hai cổng 8 bit (cổng A và B) và hai cổng 4 bit (phần cao và phần thấp cổng C) • Bất kỳ cổng nào cũng có thể là cổng vào hoặc ra • Các cổng ra được chốt, các cổng vào không được chốt Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 67 • Với 4 cổng, có thể xây dựng 16 cấu hình vào/ra khác nhau + Chế độ 1: "Vào/ra có xung cho phép". Trong chế độ này mỗi cổng PA. PB có thể được định nghĩa thành cổng vào hoặc ra với tín hiệu móc nối (handshaking) do các bit tương ứng của cổng PC trong cùng nhóm đảm nhiệm. + Chế độ 2: "Vào ra 2 chiều".Trong chế độ này chỉ riêng cổng PA có thể được định nghĩa thành cổng vào/ra 2 chiều với các tín hiệu móc nối do các bit của cổng PC đảm nhiệm. Cổng PB có thể làm việc trong chế độ 0 hoặc 1. Sau đây là một vài ví dụ về cách lập trình cho 8255A.  Ví dụ 1: Giả thiết mạch 8255A có các địa chỉ sau: Địa chỉ Thanh ghi (cổng) 7Ch PA 7Dh PB 7Eh PC 7Fh CWR Lập trình để định nghĩa chế độ 0 cho 8255A với cấu hình các cổng như sau: PA: Ra PB: Vào PCH: Ra PCL: Vào Sau đó đọc các giá trị dữ liệu có tại PB rồi đưa ra PA và PCL rồi đưa ra PCH. Giải: Có thể định nghĩa các hằng cho cổng, thanh ghi từ điều khiển và cho từ điều khiển nhờ lệnh giả EQU: PA EQU 7CH PB EQU 7DH Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 68 PC EQU 7EH CWR EQU 7FH CW EQU 83H ; từ điều khiển cho yêu ; cầu trên 83H=10000011 và sau đó dùng hằng đó vào việc định nghĩa cấu hình cho 8255A: MOV AL, CW ; từ điều khiển trong AL OUT CWR, AL ; đưa CW vào CWR IN AL, PB ; đọc cổng PB OUT PA, AL ; đưa dữ liệu đọc được ra cổng PA IN AL, PC ; đọc cổng PCL MOV CL, 4 ; số lần quay AL ROL AL, CL ; chuyển 4 bit thấp thành 4 bit cao OUT PC, AL ; đưa dữ liệu đọc được ra cổng PCH  Ví dụ 2: Lập trình để bit PC4 của 8255A ở ví dụ trên tạo ra 256 xung với T=50ms, độ rộng 50%. Giả thiết đã có sẵn chương trình con trễ 25ms là TRE25MS. Giải: Sử dụng các ký hiệu ở ví dụ trên và các định nghĩa mới PC4ON EQU 09H ; từ điều khiển để PC4=1 (On): 00001001B PC4OF EQU 08H ; từ điều khiển để PC4=0 (Off): 00001000B ta có mẫu chương trình sau: MOV CX, 100H ; số xung phải tạo ra CLI ; cấm ngắt để yên tâm mà ; tạo xung Lap: MOV AL, PC4ON ; từ điều khiển cho PC4=1. OUT PC, AL ; PC4=1 CALL TRE25MS ; kéo dài 25ms. MOV AL,PC4OFF ; PC4=0 CALL TRE25MS ; Lặp cho đủ số xung STI ; cho phép ngắt trở lại ... Trong ví dụ trên ta chú ý lệnh CLI (để cấm ngắt) và lệnh STI (để cho phép ngắt) ở đầu và cuối đoạn chương trình tính thời gian tạo ra dãy xung. Điều này là cần thiết vì ta dùng chương trình để tạo ra các khoảng thời gian và vì thế ta muốn các yêu cầu ngắt (nếu có) không ảnh hưởng tới việc tạo ra các khoảng thời gian đó.  Ví dụ 3: có mạch 8255A với địa chỉ cơ sở là 30H nối với các phần tử ngoại vi đơn giản (hình 5.42). Lập trình để có U1>U2 thì đọc trạng thái công tắc K, nếu K đóng thì cho đèn LED tắt, K mở thì cho đèn LED sáng. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 69 Giải: Ta phải định nghĩa các hằng và từ điều khiển để định nghĩa cấu hình: PA là vào, PB là vào và PCH là ra. Khi U1>U2 thì ta đọc được PB7=1 (còn khi 21 UU  thì PB7=0). Lúc này ta phải đọc trạng thái công tắc K để điều khiển đèn LED, nếu K đóng thì ta đọc được PB7=0 và ta phải đưa ra PC4=) để tắt đèn. Định nghĩa các hằng PA EQU 30H PB EQU 31H PC EQU 32H CWR EQU 33H CW EQU 92H ; từ điều khiển cho yêu ; cầu trên 92H=10010010 đoạn chương trình còn lại là: MOV AL, CW ; từ điều khiển trong AL OUT CWR, AL ; đưa CW vào CWR DocPB: IN AL, PB ; đọc cổng PB AND AL, 80H ; PB7=1? JZ DocPB ; đọc lại IN AL, PA ; đọc cổng PA And AL, 01H ; khoá K đóng (PA1=0)? JZ Tat ; đúng, tắt đèn MOV CL, 4 ROL AL, CL ; đổi bit0 lên bit4 OUT PC, AL ; đưa tín hiệu thắp đèn Tat: OUT PC, AL ; đưa tín hiệu tắt đèn Ra:... 5.4. Một số phối ghép cơ bản Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 70 5.4.1. Phối ghép với bàn phím Bàn phím là một thiết bị vào rất thông dụng trong các hệ vi xử lý. Trong trường hợp đơn giản nhất đó có thể chỉ là 1 công tắc có gắn phím nối với 1 chân nào đó của bộ vi xử lý; ở mức phức tạp hơn đó có thể là hàng chục công tắc có gắn phím được tổ chức theo một ma trận; phức tạp hơn nữa, đó là một hệ vi xử lý chuyên dụng quản lý cả trăm công tắc có gắn phím với nhiệm vụ nhận ra phím được gõ và tạo mã đưa đến cho hệ vi xử lý. Dù là đơn lẻ hay là tập hợp các phím, khi phối ghép chúng với bộ vi xử lý ta cũng phải thoả mãn một số yêu cầu đặc biệt để đảm bảo cả hệ thống hoạt động đúng. Có rất nhiều loại công tắc được dùng trong phối ghép với bộ vi xử lý nhưng có thể xếp chúng vào 2 nhóm: + Công tắc có tiếp xúc cơ khí (kiểu điện trở: điện trở thay đổi khi ấn và khi nhả phím), + Công tắc không có tiếp xúc cơ khí (kiểu điện dung: điện dung thay đổi khi ấn và khi nhả phím hoặc kiểu hiệu ứng Hall: điện áp thay đổi khi ấn và khi nhả phím). Trong các loại công tắc đó, loại công tắc kiểu điện trở dựa trên tiếp xúc cơ khí là rất thông dụng trong thực tế. Hình dưới là cách nối công tắc vào mạch điện và đáp ứng của nó khi có lực tác động vào phím (ấn phím). Nhìn vào đáp ứng về mặt cơ-điện của công tắc trên hình trên, ta nhận thấy: vì công tắc là một hệ thống có quán tính, do đó khi ta ấn phím rồi nhả phím, xung điện thu được ở đầu ra của nó không phải là liên tục mà bị ngắt quãng tại các giai đoạn quá độ (lúc bắt đầu nhấn phím và lúc bắt đầu nhả phím). Điều này xảy ra là do trong kết cấu của công tắc có các bộ phận đàn hồi, khi bị tác động của lực bên ngoài các kết cấu động của công tắc bị giao động làm cho bề mặt tiếp xúc của công tắc bị biến đổi. Trong thực tế thì mỗi quá trình quá độ trên kéo dài khoảng 10-20 ms. Nếu trong thời kỳ quá độ ta đọc thông tin từ công tắc thì rất dễ nhận được thông tin sai lệch về trạng thái của công tắc, vì vậy người ta thường phải chờ cà 10-20 ms sau khi công tắc bị ấn hoặc nhả để đọc được trạng thái của công tắc trong giai đoạn xác lập. Khi một công tắc được nối thẳng vào một chân nào đó của bộ vi xử lý hoặc các mạch phụ trợ, có một cách khác để tránh các hiệu ứng phụ không mong muốn có thể tác động lên hoạt động của bộ vi xử lý do việc công tắc bị rung gây ra là dùng các mạch tích phân nối bên cạnh công tắc như trong trường hợp tạo tín hiệu cho đầu vào RESET của hệ vi xử lý. Tiếp theo ta xét trường hợp một số công tắc nhất định được tổ chức theo ma trận gồm các hàng và các cột để tạo thành bàn phím cho một hệ vi xử lý. Với tổng số phím khoảng 20- 30 (bàn phím HEXA) thì đó là trường hợp thường thấy trong các hệ thống nhỏ: các máy vi tính trên một bảng mạch in hoặc các bảng mạch điều khiển nhỏ (hay được gọi là "kit"). Trong Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 71 các máy tính cá nhân như IBM PC chẳng hạn thì tổng số phím có thể là từ 80-101 hoặc 104 phím tuỳ theo thế hệ máy. Để nhận được thông tin chính xác về trạng thái của một phím trong các hệ thống như vậy ta thường phải làm 3 khối công việc chính như sau: + Phát hiện có ấn phím, + Chờ công tắc ở trạng thái ổn định (chống rung), + Tìm phím được ấn và tạo mã cho phím đó. Và để có được một phối ghép bàn phím với bộ vi xử lý thực hiện các chức năng đã nêu ở trên trong thực tế người ta có thể làm theo 2 cách: + dùng bộ vi xử lý để quản lý trực tiếp bàn phím được ghép qua một số mạch cổng. Có thể thấy rằng ở đây CPU làm việc trong chế độ thăm dò. Bằng cách này CPU phải để một phần thời gian để quản lý bàn phím nhưng ta lại đạt được sự đơn giản về phần cứng. + dùng một mạch quản lý bàn phím chuyên dụng để phối ghép với bàn phím. ở đây CPU làm việc với bộ quản lý bàn phím qua yêu cầu ngắt. Bằng cách này ta giải phóng được CPU để nó có thể dành thời gian cho các việc khác quan trọng hơn.  CPU trực tiếp quản lý bàn phím Trong cách làm này, để đơn giản trong tình bày, ta giả thiết trường hợp bàn phím hệ 16 gồm 16 công tắc - phím đánh dấu từ 0 - FH ghép với bộ vi xử lý thông qua các mạch cổng như trên hình trên. Các mạch cổng có thể là các mạch IC như 74LS373 hoặc một phần của PPI 8255A được lập trình thích hợp. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 72 Lưu đồ thuật toán chương trình phối ghép bàn phím. Thuật toán của chương trình điều khiển việc phối ghép CPU - bàn phím theo sơ đồ phần cứng nói trên được trình bày bằng lưu đồ trên hình trên. Đầu tiên ta phải kiểm tra tình trạng (tốt, xấu) của bàn phím khi nó chưa được ấn (đúng ra là khi ta chưa kịp ấn phím nào hoặc chưa kịp ấn phím tiếp theo) xem liệu có phím nào bị kẹt (dính) không bằng cách đưa 0 ra các hàng và đọc các cột để quét toàn bộ các phím. Nếu có một công tắc nào đó nối hàng và cột, mức điện áp 0 ở hàng sẽ truyền sang cột và ta sẽ đọc được ở cột tương ứng mức điện áp 0. Một bàn phím tốt sẽ không có các tiếp điểm của một công tắc nào được nối trong lúc này và ta sẽ đọc được mức 1 ở tất cả các cột. Chương trình theo lưu đồ trên sẽ bị quẩn nếu bàn phím của ta bị dính. Một cải tiến có thể được thêm vào chương trình trên để thoát ra khỏi vòng quẩn đó và đưa ra thông báo bàn phím bị hỏng. Nếu bàn phím không bị kẹt thì ta mới đi vào phần phát hiện xem liệu có một phím nào đó được ấn không. Nếu phát hiện ra có một phím được ấn ta sẽ phải chờ cà 20 ms để cho công tắc có thời gian ổn định trạng thái. Tiếp theo ta phải xác định lại xem có đúng là có một phím được ấn không, nếu có thì ta mới tiến hành xác định cụ thể xem đó là phím nào trong số các phím. Ta làm việc này bằng cách đưa 0 ra lần lượt từng hàng và đọc các cột. Khi đã biết được toạ độ hàng và cột của một phím bị ấn thì công việc tiếp theo là tạo mã cho phím đó. Trong sơ đồ đơn giản như sơ đồ trên hình 9.3 thì việc tạo mã cho phím vừa tìm thấy được thực hiện bằng cách đọc 8 bit từ cổng vào (4 bit cao chứa thông tin về toạ độ hàng còn 4 bit thấp chứa thông tin về tọa độ cột) rồi chuyển thành mã hệ 16 tương ứng với phím bằng cách tra một bảng thích hợp. Chương trình 8.1. CPU-HexKeyboard cpu_kbd.asm Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 73 .Model Small .Stack 100 .Data ;0 1 2 3 4 5 6 7 Key DB 77H 7BH 7DH 7EH 0B7H 0BBH 0BDH 0BEH ;8 9 A B C D E F DB 0D7H 0DBH ODOH ODEH 0E7H 0EBH 0EDH 0EEH PA EQU 60H PB EQU 61H CWR EQU 63H CW EQU 88H ;chế độ 0,PA:ra;PB&PC:vào .Code Main Proc MOV AX,@Data ;khởi đầu DS MOV DS,AX MOV AL,CW ;khởi đầu 8255A OUT CWR,AL CALL RD_KBD ;gọi chương trình đọc phím Xuly:... ;các xử lý tiếp theo Main Endp RD_KBD Proc ; thủ tục đọc và tạo mã cho phím bị ấn ; Ra: AL: mã phím, ; AH=00H khi không có lỗi, ; AH=01 khi có lỗi PUSHF ;cất các thanh ghi PUSH BX PUSH CX PUSH DX MOV AL,00 ;đưa 0 ra mọi hàng OUT PA,AL MOV CX,3 ;số lần kiểm tra dính Wait_Open: IN AL,PB ;đọc cột để kiểm tra dính AND AL,0FH ;che các bit cao CMP AL,0FH ;có phím dính? LOOPNE Wait_Open ;đúng, chờ khỏi dính JCXZ Sai ;"quá tam ba bận": phím bị kẹt Wait_Pres: IN AL,PB ;đọc cột để kiểm tra ấn phím AND AL,0FH ;che các bit cao CMP AL,0FH ;có phím ấn? JE Wait_Pres ;không,chờ ấn phím MOV CX,5880 ;có,trễ 20ms để chống rung Tre: LOOP Tre ;đọc để kiểm tra lại phím bị ấn IN AL,PB AND AL,0FH ;che các bit cao CMP AL,0FH ;có phím ấn? JE Wait_Pres ;không,chờ ấn phím ;tìm phím bị ấn MOV AL,0FEH ;mẫu bit để đưa 0 ra từng hàng MOV CL,AL ;cất mẫu Hgsau: OUT PA,AL ;đưa 0 ra 1 hàng IN AL,PB ;đọc các cột và kiểm tra AND AL,0FH Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 74 CMP AL,0FH ;đã tìm thấy phím bị ấn? JNE Taoma ;đúng,tạo mã ROL CL,1 ;không thấy,đổi mẫu MOV AL,CL JMP Hgsau ;làm tiếp với hàng sau Taoma: MOV BX,000FH ;BX chỉ vào mã của phím F IN AL,PB ;đọc toạ độ hàng và cột Tiep: CMP AL,Key[BX] ;đúng với mã chuẩn? JE Thoi ;đúng,mã của phím trong BX DEC BX ;sai,chỉ vào mã khác JNS Tiep ;tìm tiếp Sai: MOV AH,01 ;AH để báo có lỗi JMP Ra ;đi ra Thoi: MOV AL,BL ;mã của phím hệ 16 trong AL MOV AH,00 ;AH để báo không có lỗi Ra: POP DX ;lấy lại các thanh ghi POP CX POP BX POPF RET ;trở về chương trình chính RD_KBD Endp END Main  Dùng mạch chuyên dụng để quản lý bàn phím Thí dụ trên cho thấy một cách phối ghép đơn giản giữa CPU và bàn phím. Trong trường hợp CPU còn phải dành thời gian để làm nhiều công việc khác của hệ thống hoặc số lượng phím nhiều, thường người ta sử dụng các mạch quản lý bàn phím có sẵn để làm các công việc đã nêu liên quan đến bàn phím. Như vậy bộ vi xử lý được giải phóng khỏi công việc quét bàn phím và khi cần thiết nó chỉ việc đọc mã của phím bị ấn do mạch quản lý chuyên dụng đưa đến. Mạch AY5-2376 của General Instrument là một vi mạch chuyên dụng như vậy. Nó làm việc đúng theo cách của một chương trình quét bàn phím mà ta đã mô tả ở thí dụ trên và khi đã tạo xong mã cho phím bị ấn, nó đưa ra xung STB (xung cho phép chốt dữ liệu) để báo cho bộ vi xử lý biết. Bộ vi xử lý có thể nhận biết xung STB khi làm việc theo kiểu thăm dò (polling) hoặc có thể đáp ứng với xung STB theo kiểu ngắt nếu xung này được sử dụng như một xung tác động đến đầu vào yêu cầu ngắt che được INTR. Mạch AY5-2376 còn có khả năng quản lý không nhầm lẫn đối với bàn phím ngay cả trong trường hợp có 2 phím được ấn gần như đồng thời. Một trường hợp đặc biệt của việc quản lý bàn phím dùng vi mạch chuyên dụng là bàn phím cho các máy IBM PC và các thiết bị đầu cuối. Tại đây người ta sử dụng một hệ vi xử lý chuyên dụng cho công việc quản lý bàn phím. Hạt nhân của hệ này là vi mạch 8048 - máy vi tính trong 1 vỏ, bao gồm CPU 8bit, ROM, RAM, cổng I/O và một bộ đếm/định thời gian lập trình được. Chương trình trong ROM của 8048 điều khiển việc kiểm tra các mạch điện tử của bàn phím khi nó vừa được nối với nguồn điện và thực hiện việc quyét bàn phím theo 3 công đoạn đã nêu ở trên. Khi có một phím được ấn, mạch 8048 đưa ra tín hiệu yêu cầu ngắt đến CPU và truyền mã của phím bị ấn đến CPU. Mã này được truyền đi dưới dạng dữ liệu nối tiếp để giảm bớt số đường dây cần dùng cho việc truyền tín hiệu. Trong thực tế còn tồn tại những mạch kết hợp các phối ghép bàn phím - đèn LED trong một vi mạch để tạo thuận lợi cho người sử dụng khi xây dựng các kit vi xử lý. Đó là trường hợp mạch 8279 của Intel, một vi mạch tổ hợp cà lớn lập trình được. Sau khi được CPU lập trình (ghi từ điều khiển), mạch 8279 có khả năng quản lý bàn phím theo 3 công đoạn kinh điển đã nêu và đồng thời có khả năng điều khiển bộ phận hiện thị gồm nhiều nhất là 16 đèn LED 7 nét ở chế độ động. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 75  Dùng 8255 để phối ghép 8088 với bàn phím. Bàn phím có nhiều kích thước khác nhau, từ bàn phím chuẩn 101 phím đến các bàn phím nhỏ, chuyên dụng chỉ có 4-16 phím. Chúng ta sẽ tìm hiểu phối ghép với bàn phím 16 phím. Mối phím là một công tắc, các công tắc được tổ chức thành ma trận 44 gồm 4 hàng (ROW0 - ROW3) và 4 cột (COL0 - COL3). Mỗi hàng được nối vào nguồn 5.0 V qua một điện trở 10 K. Bộ giải mã lập trình được PAL 16L6 giải mã địa chỉ cho 8255 tại các cổng 50H-53H. Cổng A được lập trình là cổng vào để đọc các hàng, cổng B được lập trình là cổng ra để chọn các cột. Ví dụ, nếu cổng B đưa ra 1110 tại các chân PB3-PB0 thì cột 0 sẽ có logic 0 và do đó bốn phím trong cột 0 sẽ được chọn, nghĩa là chỉ có các công tắc 0-3 mới có thể đặt logic 0 vào cổng A. Tương tự như vậy, nếu cổng B đưa ra 1101 thì các công tắc 4-7 được chọn… Để cổng A là cổng vào, cổng B là cổng ra ta phải lập trình 8255 bằng đoạn chương trình sau (53H là địa chỉ của thanh ghi điều khiển). MOV AL,10010000B ;Noi dung thanh ghi dieu khien OUT 53H,AL Lưu đồ thuật giải để đọc một phím từ ma trận phím và giữ phím gồm ba phần chính. Phần đầu tiên đợi nhả phím, phần thứ hai đợi nhấn phím và phần thứ ba tính mã của phím được nhấn. Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 76 Chương trình thực hiện thuật giải trên gồm có: thủ tục SCAN quét các phím, thủ tục DELAY tạo ra thời gian trễ 10 ms để giữ phím và thủ tục chính KEY gọi thủ tục SCAN và DELAY. ;Thu tuc quet phim va tra ve ma so cua phim trong AL ; ROWS EQU 4 ;So hang COLS EQU 4 ;So cot PORTA EQU 50H ;Dia chi cong A PORTB EQU 51H ;Dia chi cong B KEY PROC NEAR USES CX CALL SCAN ;Kiem tra tat ca cac phim JNZ KEY ;Neu phim van nhan CALL DELAY ;Doi khoang 10 ms CALL SCAN ;Kiem tra tat ca cac phim JNZ KEY ;Neu phim van nhan KEY1: CALL SCAN ;Kiem tra tat ca cac phim JZ KEY1 ;Neu khong co phim nao duoc nhan CALL DELAY ;Doi khoang 10 ms CALL SCAN ;Kiem tra tat ca cac phim JZ KEY1 ;Neu khong co phim nao duoc nhan PUSH AX ;Cat ma hang vao ngan xep MOV AL,COLS ;Bat dau tinh ma phim SUB AL,CL MOV CH,ROWS MUL CH MOV CL,AL DEC CL POP AX KEY2: ROR AL,1 ;Tim vi tri hang INC CL JC KEY2 MOV AL,CL ;Ma phim de vao AL RET KEY ENDP SCAN PROC NEAR USES BX MOV CL,ROWS ;Tao mat na hang MOV BH,0FFH SHL BH,CL MOV CX,COLS ;Nap so cot MOV BL,0FEH ;Lay ma chon SCAN1: MOV AL,BL ;Chon cot OUT PORTB,AL ROL BL,1 IN AL,PORTA ;Doc hang OR AL,BH CMP AL,0FFH ;Kiem tra phim nhan JNZ SCAN2 LOOP SCAN1 SCAN2: RET SCAN ENDP DELAY PROC NEAR USES CX MOV CX,5000 ;10 ms (clock 8 MHz) DELAY1: LOOP DELAY1 Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 77 RET DELAY ENDP 5.4.2. Phối ghép với đèn Led Điốt phát sáng - LED là một phần tử phối ghép với bộ vi xử lý ở đầu ra rất thông dụng. Trong trường hợp đơn giản, đó có thể là một vài đèn LED đơn lẻ để báo hiệu một vài trạng thái nào đó. Phức tạp hơn, đó là các đèn LED được tổ hợp thành đèn chỉ thị 7 nét hoặc nhiều hơn để hiện thị các thông tin dưới dạng số hoặc chữ. Để điều khiển được các đèn LED này sáng, bộ vi xử lý hoặc các mạch cổng của nó cần được tăng cường khả năng tải bằng các mạch khuếch đại đệm (bằng transistor, bằng mạch SN7400 hay SN7406) hoặc các mạch điều khiển đèn LED 7 nét chuyên dụng (như SN7447) để đảm bảo đưa ra được tín hiệu với công suất nhất định cần thiết cho hoạt động của đèn LED.  CPU - SN7447 - LED 7 nét ở chế độ tĩnh Một trong các phối ghép giữa vi xử lý và đèn LED 7 nét thường thấy là dùng mạch SN7447 để giải mã số BCD ra 7 nét và để điều khiển bộ đèn chỉ thị. Đây là kiểu điều khiển đèn LED ở chế độ hiện thị tĩnh với đặc điểm là khá đơn giản về kết cấu nhưng rất tốn năng lượng: để thắp sáng các nét của đèn LED thì cần có dòng điện liên tục đi qua. Ta có thể tính sơ bộ để thấy sự tiêu tốn năng lượng của việc hiện thị theo cách này. Một đèn LED 7 nét tiêu tốn năng lượng nhiều nhất khi nó phải hiện ra số 8 và lúc này nó tiêu thụ dòng điện cỡ 140 mA (khoảng 20mA/nét tuỳ theo chủng loại). Bản thân một mạch SN7447 khi hoạt động cũng tiêu thụ cỡ 14 mA. Nếu ta dùng 8 đèn LED này để chỉ thị 8 chữ số (địa chỉ và dữ liệu) thì riêng cho mạch hiện thị ta đã phải cung cấp gần 1,5 A !  CPU - 7447 - LED 7 nét ở chế độ động - dồn kênh Để khắc phục nhược điểm của mạch phối ghép hiện thị tĩnh như đã được nêu ở trên, người ta thường sử dụng mạch phối ghép hiện thị động làm việc theo nguyên tắc dồn kênh: toàn bộ các đèn hiện thị dùng chung 1 bộ điều khiển SN7447 và các đèn LED không được được thắp sáng liên tục mà luân phiên nhau sáng theo một chu kỳ nhất định. Công suất tiêu thụ nhờ thế mà giảm đi rất nhiều mà vẫn đạt được hiệu quả hiện thị. Sơ đồ mạch của cách phối ghép này được thể hiện trên hình dưới : Bài giảng Kỹ thuật Vi xử lý – Khoa CNTT – ĐHHH Việt Nam Phạm Trung Minh – Khoa CNTT 78 Nguyên tắc hoạt động Giá trị số cần hiện thị của mỗi con số được gửi đến cổng PB của 8255A từ CPU dưới dạng mã BCD. Từ đây số BCD được mạch SN7447 giải mã và tạo ra các tín hiệu điều khiển thích hợp đưa đến các chân catốt a, b,..., g của LED. Mỗi giá trị cần hiện thị được đưa đến cổng PB cứ mỗi 2 ms một lần cho một đèn. Giá trị số nói trên được hiện ra trên chữ số thập phân nào lại là do các bit của byte dữ liệu từ CPU đưa đến cổng PA của mạch 8255A quyết định. Như vậy cứ mỗi 2 ms thì phải ta đưa dữ liệu ra PB rồi PA và cho hiện ra được một giá trị số trên 1 đèn. Nếu cả thảy có 8 LED 7 nét thì ta mất 16 ms để cho hiện số ra cả dãy đèn. Quá trình trên lặp đi lặp lại (1 lần hết 16 ms hay 60 lần trong 1 s) làm cho ta có cảm giác là các đèn sáng liên tục mặc dù trong thực tế chúng được điều khiển để sáng không liên tục. Một phương pháp phối ghép giống như trên nhưng không dùng đến mạch giải mã SN7447 cũng rất hay được sử dụng. Thay vì mạch SN7447 như ở trên, tại đây ta dùng một bộ khuếch đại đệm chỉ để nâng cao khả năng tải của cổng PB. Vì thế trong trường hợp này CPU phải đưa đến PB không phải là 4 bit mã BCD của giá trị số cần hiện thị mà là các mẫu 7 bit để làm sáng các nét tương ứng với giá trị số đó. Như vậy CPU phải để thì giờ để chuyển đổi từ giá trị số hệ 16 sang mẫu bit dành cho các nét của LED và ta có khả năng hiện được các số từ 0-FH. Để giải phóng hoàn toàn được bộ vi xử lý khỏi công việc điều khiển đèn LED ta có thể dùng mạch điều khiển 8279 đã được nói đến trong mục trước.

Các file đính kèm theo tài liệu này:

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