I. Hướng Dẫn Tổng Quan Thiết Kế Kit Vi Xử Lý 8086 Căn Bản
Việc thiết kế và thi công kit vi xử lý 8086 là một đề tài nền tảng trong lĩnh vực kỹ thuật máy tính và điện tử. Nó không chỉ giúp củng cố kiến thức về kiến trúc máy tính mà còn rèn luyện kỹ năng thực hành từ khâu lên ý tưởng, thiết kế mạch đến lập trình hệ thống. Vi xử lý 8086 của Intel, dù đã ra đời từ lâu, vẫn là một công cụ học tập vô giá do cấu trúc rõ ràng, dễ tiếp cận. Một hệ thống kit 8086 hoàn chỉnh bao gồm các khối chức năng cơ bản như CPU, bộ nhớ (RAM, ROM), mạch giải mã địa chỉ, các khối giao tiếp vào/ra (I/O), và mạch tạo xung nhịp. Mục tiêu chính là xây dựng một hệ thống tối thiểu có khả năng thực thi các chương trình viết bằng hợp ngữ 8086 và tương tác với người dùng qua các thiết bị ngoại vi đơn giản như LED 7 đoạn và bàn phím ma trận. Quá trình này đòi hỏi sự hiểu biết sâu sắc về hoạt động của bus hệ thống 8086, cách phân chia và quản lý không gian bộ nhớ 1MB, cũng như chức năng của các vi mạch hỗ trợ. Theo luận văn của Ngô Văn Bình (2000), “Hệ thống vi xử lý là một cấu trúc phần cứng được xử lý bằng phần mềm”, điều này nhấn mạnh sự tương quan chặt chẽ giữa việc thiết kế phần cứng và xây dựng phần mềm điều khiển. Một đồ án vi xử lý 8086 thành công phải cân bằng giữa hai yếu tố này, đảm bảo phần cứng được thiết kế tối ưu để phần mềm có thể khai thác hết tiềm năng. Bài viết này sẽ cung cấp một lộ trình chi tiết, từ cơ sở lý luận, lựa chọn linh kiện làm kit 8086, đến các bước thi công và lập trình thực tế, giúp người học và nghiên cứu có thể tự mình xây dựng một sản phẩm hoàn chỉnh.
1.1. Tầm quan trọng của vi xử lý 8086 trong đào tạo
Mặc dù các bộ vi xử lý hiện đại đã đạt đến tốc độ và độ phức tạp vượt trội, vi xử lý 8086 vẫn giữ một vị trí không thể thay thế trong giáo dục và đào tạo kỹ thuật. Lý do chính là kiến trúc 16-bit của nó đủ đơn giản để sinh viên có thể nắm bắt các khái niệm cốt lõi như phân đoạn bộ nhớ, cơ chế hoạt động của các thanh ghi (AX, BX, CS, DS), và quy trình thực thi lệnh. Việc tự tay thiết kế một hệ thống dựa trên 8086 giúp người học hiểu rõ cách CPU tương tác với bộ nhớ và thiết bị ngoại vi thông qua bus hệ thống 8086, một kiến thức nền tảng cho mọi hệ thống máy tính. Hơn nữa, lập trình bằng hợp ngữ 8086 buộc người học phải tư duy ở mức độ gần với phần cứng, hiểu rõ từng chỉ thị máy và cách chúng tác động đến trạng thái của hệ thống.
1.2. Các khối chức năng chính trong một kit vi xử lý 8086
Một kit 8086 cơ bản được cấu thành từ nhiều khối chức năng liên kết chặt chẽ. Khối trung tâm là CPU vi xử lý 8086. Khối tạo xung nhịp và tín hiệu điều khiển thường sử dụng mạch tạo xung clock 8284 để cung cấp tín hiệu CLK, READY và RESET ổn định cho toàn hệ thống. Khối bộ nhớ bao gồm EPROM 2764 để lưu trữ chương trình hệ thống (monitor) và RAM tĩnh (SRAM), ví dụ 62256, để lưu trữ dữ liệu và ngăn xếp. Khối giải mã địa chỉ, thường dùng IC 74LS138, có nhiệm vụ chọn chip (Chip Select) cho từng vùng nhớ hoặc thiết bị ngoại vi. Cuối cùng, khối giao tiếp vào/ra sử dụng các IC chuyên dụng như chip 8255 PPI cho các cổng song song đa năng hoặc chip 8279 để điều khiển bàn phím và màn hình hiển thị, giúp hệ thống tương tác với thế giới bên ngoài.
II. Phân Tích Thách Thức Khi Thi Công Kit Vi Xử Lý 8086
Quá trình thiết kế và thi công kit vi xử lý 8086 luôn tiềm ẩn nhiều thách thức, đặc biệt với những người mới bắt đầu. Thách thức lớn nhất nằm ở việc giải mã địa chỉ 8086 một cách chính xác. Với không gian địa chỉ 20-bit (1MB), việc phân chia bộ nhớ cho ROM, RAM và các cổng I/O đòi hỏi tính toán cẩn thận để tránh xung đột địa chỉ. Bất kỳ sai sót nào trong mạch giải mã đều có thể khiến hệ thống không khởi động được hoặc hoạt động sai. Một vấn đề khác là quản lý bus hệ thống 8086 đa hợp (multiplexed). Các chân AD0-AD15 vừa truyền địa chỉ vừa truyền dữ liệu, đòi hỏi phải sử dụng IC chốt (latch) như 74LS373 để tách và giữ lại địa chỉ trong mỗi chu kỳ bus. Việc đồng bộ hóa tín hiệu ALE (Address Latch Enable) với các IC chốt này là cực kỳ quan trọng. Hơn nữa, việc lựa chọn linh kiện làm kit 8086 cũng là một bài toán. Nhiều linh kiện như 8086, 8255, 8279 không còn được sản xuất phổ biến, việc tìm kiếm linh kiện chất lượng tốt có thể gặp khó khăn. Thiết kế mạch in PCB 8086 cũng đòi hỏi kỹ năng, cần phải đảm bảo đường đi của các tín hiệu tốc độ cao (như xung clock) ngắn và ít nhiễu nhất có thể. Cuối cùng, giai đoạn gỡ lỗi phần cứng thường tốn nhiều thời gian nhất, đòi hỏi người thực hiện phải có kiến thức vững chắc và các công cụ đo kiểm phù hợp như oscilloscope hoặc logic analyzer để xác định nguyên nhân lỗi.
2.1. Kỹ thuật tách bus địa chỉ và dữ liệu đa hợp
Một trong những đặc điểm của vi xử lý 8086 là việc sử dụng bus địa chỉ/dữ liệu đa hợp để tiết kiệm số chân cắm. Cụ thể, 16 đường tín hiệu AD0-AD15 và các đường A16/S3-A19/S6 đảm nhiệm hai chức năng. Trong chu kỳ T1 của một bus cycle, chúng mang thông tin địa chỉ. Trong các chu kỳ sau (T2, T3, T4), chúng lại mang dữ liệu. Để hệ thống hoạt động, cần phải tách riêng hai luồng thông tin này. Giải pháp phổ biến là sử dụng các IC chốt địa chỉ (Address Latch) như 74LS373. Tín hiệu ALE (Address Latch Enable) do 8086 phát ra sẽ được dùng làm tín hiệu điều khiển cho các IC chốt này. Khi ALE ở mức cao, các IC chốt sẽ "trong suốt", cho phép địa chỉ đi qua. Khi ALE xuống mức thấp, địa chỉ hiện tại sẽ được "chốt" lại ở đầu ra của IC, tạo thành một bus địa chỉ ổn định trong suốt chu kỳ bus, giải phóng các đường ADx để chúng thực hiện vai trò bus dữ liệu.
2.2. Phương pháp thiết kế mạch giải mã địa chỉ hiệu quả
Thiết kế mạch giải mã địa chỉ 8086 là quá trình tạo ra các tín hiệu chọn chip (CS - Chip Select) duy nhất cho mỗi thiết bị nhớ (ROM, RAM) hoặc ngoại vi (I/O) trong hệ thống. Mục đích là đảm bảo tại một thời điểm, chỉ có một thiết bị được phép giao tiếp với CPU trên bus. Một phương pháp phổ biến là sử dụng các IC giải mã như 74LS138 (3 to 8 decoder). Các đường địa chỉ cao (ví dụ A15-A19) sẽ được kết nối vào các ngõ vào của IC giải mã. Dựa trên tổ hợp của các bit địa chỉ này, IC 74LS138 sẽ kích hoạt một trong các ngõ ra của nó (Y0-Y7) ở mức thấp. Mỗi ngõ ra này sẽ được nối đến chân CS của một thiết bị. Bằng cách này, toàn bộ không gian nhớ 1MB được phân chia thành các khối nhỏ, mỗi khối được gán cho một thiết bị cụ thể, loại bỏ hoàn toàn nguy cơ xung đột bus.
III. Quy Trình Thiết Kế Phần Cứng Cho Kit Vi Xử Lý 8086 Chi Tiết
Quy trình thiết kế và thi công kit vi xử lý 8086 phần cứng bắt đầu từ việc vẽ sơ đồ nguyên lý kit 8086. Sơ đồ này phải thể hiện rõ sự kết nối giữa các thành phần chính. Khối CPU với vi xử lý 8086 là trung tâm. Nó được hỗ trợ bởi mạch tạo xung clock 8284 để đảm bảo hoạt động đồng bộ và ổn định. Tín hiệu từ 8284 cũng điều khiển mạch reset hệ thống. Bộ nhớ hệ thống được thiết kế với EPROM 2764 (8KB) để chứa mã chương trình Monitor và RAM tĩnh (SRAM) 62256 (32KB) cho dữ liệu người dùng và ngăn xếp. Việc kết nối chúng với bus đòi hỏi mạch giải mã địa chỉ, thường được thực hiện bằng IC 74LS138, để tạo ra các tín hiệu chọn chip riêng biệt. Giao tiếp với người dùng là một phần không thể thiếu. Luận văn của Ngô Văn Bình đã lựa chọn chip 8279 để đảm nhiệm đồng thời hai nhiệm vụ: quét một bàn phím ma trận và điều khiển hiển thị 8 LED 7 đoạn. Giải pháp này giúp tiết kiệm tài nguyên hệ thống và đơn giản hóa thiết kế. Ngoài ra, chip 8255 PPI cũng được tích hợp để cung cấp các cổng vào/ra song song, tạo khả năng mở rộng để giao tiếp LCD 16x2 hoặc các thiết bị khác trong tương lai. Sau khi hoàn thiện sơ đồ nguyên lý, bước tiếp theo là thiết kế mạch in PCB 8086. Trong giai đoạn này, việc sắp xếp linh kiện và đi dây cần được tối ưu hóa để giảm nhiễu và đảm bảo tính toàn vẹn tín hiệu, đặc biệt là các đường bus và xung clock. Cuối cùng là công đoạn lắp ráp kit 8086, hàn các linh kiện lên bo mạch một cách cẩn thận.
3.1. Sơ đồ nguyên lý khối CPU bộ nhớ và các IC phụ trợ
Sơ đồ nguyên lý là bản thiết kế chi tiết nhất của hệ thống. Khối CPU cần được kết nối với mạch tạo xung clock 8284 tại chân CLK và RESET. Bus địa chỉ/dữ liệu đa hợp (AD0-AD15) của 8086 được nối song song đến các IC chốt 74LS373, bộ đệm bus 74LS245, EPROM 2764, và SRAM 62256. Tín hiệu ALE của 8086 điều khiển các IC chốt 74LS373. Tín hiệu DT/R và DEN điều khiển hướng và kích hoạt bộ đệm 74LS245. Các đường địa chỉ cao hơn (A16-A19) cùng với tín hiệu M/IO được đưa vào mạch giải mã 74LS138 để tạo ra các tín hiệu /CS (Chip Select) cho ROM, RAM và các IC ngoại vi. Tín hiệu /RD và /WR từ CPU sẽ điều khiển trực tiếp các chân /OE (Output Enable) và /WE (Write Enable) của chip nhớ.
3.2. Thiết kế khối giao tiếp bàn phím và LED với chip 8279
Vi mạch 8279 là một giải pháp tích hợp hiệu quả cho giao tiếp người dùng. Nó có khả năng tự động quét ma trận phím và làm tươi màn hình LED. Các đường SL0-SL3 của 8279 được dùng làm đường quét. Chúng được nối với các hàng của bàn phím ma trận và đồng thời là đầu vào của một IC giải mã (ví dụ 74LS138) để chọn Anode chung của các LED 7 đoạn. Các đường RL0-RL7 của 8279 được nối với các cột của ma trận phím. Khi một phím được nhấn, 8279 sẽ xác định tọa độ và lưu mã phím vào bộ đệm FIFO của nó. Dữ liệu hiển thị được CPU ghi vào RAM 16 byte bên trong 8279, và vi mạch này sẽ tự động xuất dữ liệu ra các chân OUT A0-A3, B0-B3 để điều khiển các đoạn của LED, đồng bộ với tín hiệu quét trên các đường SLx.
IV. Phương Pháp Xây Dựng Phần Mềm Hệ Thống Kit Vi Xử Lý 8086
Phần cứng của kit vi xử lý 8086 chỉ là một cơ thể vô hồn nếu thiếu phần mềm điều khiển. Phần mềm cốt lõi của kit là chương trình Monitor, một hệ điều hành tối giản được nạp vào EPROM 2764. Chương trình này được viết bằng hợp ngữ 8086 và được biên dịch bằng các công cụ như trình biên dịch MASM/TASM. Nhiệm vụ chính của Monitor là khởi tạo hệ thống khi bật nguồn, cung cấp các chức năng cơ bản cho người dùng, và tạo môi trường để nạp và thực thi các chương trình khác. Quá trình khởi tạo bao gồm việc thiết lập con trỏ ngăn xếp (Stack Pointer), cấu hình các vi mạch ngoại vi như chip 8255 PPI và 8279 bằng cách gửi các từ điều khiển (control word) đến các cổng tương ứng. Sau khi khởi tạo, chương trình sẽ vào một vòng lặp chính. Trong vòng lặp này, nó liên tục quét bàn phím (bằng cách đọc trạng thái từ 8279) để nhận lệnh từ người dùng và cập nhật dữ liệu hiển thị lên LED 7 đoạn. Các chức năng mà chương trình Monitor thường cung cấp bao gồm: xem nội dung ô nhớ, sửa nội dung ô nhớ, di chuyển một khối dữ liệu, và thực thi một chương trình từ một địa chỉ cho trước. Việc phát triển phần mềm này có thể được hỗ trợ bởi các công cụ mô phỏng Proteus 8086, cho phép kiểm tra và gỡ lỗi chương trình trước khi sử dụng mạch nạp EPROM để nạp vào chip vật lý. Đây là một bước quan trọng giúp tiết kiệm thời gian và tránh các lỗi phần cứng tiềm tàng.
4.1. Lập trình hợp ngữ 8086 và cấu trúc chương trình Monitor
Lập trình bằng hợp ngữ 8086 đòi hỏi sự hiểu biết về tập lệnh và các chế độ địa chỉ của CPU. Một chương trình Monitor điển hình có cấu trúc rõ ràng. Phần đầu tiên là mã khởi tạo (Initialization). Tại đây, các thanh ghi đoạn (DS, SS, ES) được thiết lập, con trỏ ngăn xếp (SP) được chỉ đến một vùng an toàn trong RAM tĩnh (SRAM), và các vi mạch ngoại vi được cấu hình. Phần thứ hai là vòng lặp chính (Main Loop), có nhiệm vụ đọc phím, giải mã lệnh và gọi đến các chương trình con tương ứng. Phần thứ ba bao gồm các chương trình con chức năng (Subroutines) như DisplayData
, ReadKey
, ExamineMemory
, Go
, v.v. Việc tổ chức mã nguồn thành các module và sử dụng các nhãn (label) và thủ tục (procedure) một cách hợp lý sẽ giúp chương trình dễ đọc, dễ bảo trì và gỡ lỗi phần cứng cũng như phần mềm.
4.2. Giải thuật quét phím và hiển thị dữ liệu lên LED
Nhờ sử dụng chip 8279, giải thuật quét phím và hiển thị trở nên đơn giản hơn rất nhiều cho CPU. Đối với việc đọc phím, CPU chỉ cần kiểm tra thanh ghi trạng thái của 8279 để xem bộ đệm FIFO có dữ liệu hay không. Nếu có, nó sẽ đọc mã phím từ cổng dữ liệu của 8279 và xử lý. Điều này giải phóng CPU khỏi công việc quét và chống dội (debouncing) phím. Đối với việc hiển thị, CPU chỉ cần ghi 16 byte dữ liệu cần hiển thị vào RAM nội của 8279. Ví dụ, để hiển thị chuỗi '1234' trên 4 LED đầu tiên, CPU sẽ ghi mã 7 đoạn của các số này vào 4 ô nhớ đầu tiên trong RAM hiển thị của 8279. Sau đó, 8279 sẽ tự động мультиплексирование (multiplexing) các tín hiệu để làm sáng các LED 7 đoạn một cách tuần tự với tần số đủ cao để mắt người cảm nhận như chúng đang sáng liên tục.
V. Các Bước Thi Công Và Kiểm Tra Kit Vi Xử Lý 8086 Thực Tế
Sau khi hoàn tất thiết kế, giai đoạn thiết kế và thi công kit vi xử lý 8086 bước vào phần thực hành. Bước đầu tiên là chuẩn bị mạch in PCB 8086. Mạch có thể được đặt gia công chuyên nghiệp hoặc tự làm thủ công bằng các phương pháp như ủi nhiệt. Chất lượng của PCB ảnh hưởng trực tiếp đến độ ổn định của hệ thống. Tiếp theo là công đoạn lắp ráp kit 8086. Các linh kiện nên được hàn theo thứ tự từ thấp đến cao: điện trở, tụ điện, đế cắm IC, và cuối cùng là các linh kiện lớn như cổng kết nối. Việc sử dụng đế cắm cho các IC quan trọng như vi xử lý 8086, EPROM, SRAM là rất cần thiết, giúp dễ dàng thay thế và gỡ lỗi phần cứng. Sau khi hàn xong, cần kiểm tra kỹ lưỡng các mối hàn, đảm bảo không có hiện tượng chập mạch hay hở mạch. Bước kiểm tra nguội này cực kỳ quan trọng trước khi cấp nguồn lần đầu. Khi cấp nguồn, cần đo điện áp tại các điểm chính để đảm bảo nguồn 5V được phân phối đúng cách. Giai đoạn tiếp theo là kiểm tra "nóng". Nạp một chương trình kiểm tra đơn giản vào EPROM 2764 bằng mạch nạp EPROM. Chương trình này có thể chỉ đơn giản là tạo một xung vuông tại một chân của chip 8255 PPI. Sử dụng oscilloscope để kiểm tra tín hiệu này, cũng như tín hiệu xung clock từ mạch tạo xung clock 8284 và các tín hiệu trên bus. Nếu các tín hiệu cơ bản đã hoạt động, có thể nạp chương trình Monitor đầy đủ và tiến hành kiểm tra toàn bộ chức năng của kit.
5.1. Kỹ thuật gỡ lỗi phần cứng và các lỗi thường gặp
Giai đoạn gỡ lỗi phần cứng là không thể tránh khỏi. Một số lỗi phổ biến bao gồm: hệ thống không khởi động, màn hình không hiển thị, hoặc bàn phím không phản hồi. Nguyên nhân có thể do hàn sai, chập mạch, linh kiện hỏng, hoặc thiết kế sai. Kỹ thuật gỡ lỗi cơ bản là kiểm tra theo từng khối. Bắt đầu bằng việc kiểm tra nguồn và tín hiệu reset. Sau đó, dùng oscilloscope kiểm tra tín hiệu xung clock tại chân CLK của CPU. Tiếp theo, kiểm tra hoạt động trên bus địa chỉ và dữ liệu. Nếu CPU đang cố gắng đọc từ ROM tại địa chỉ khởi động (FFFF0H), đó là một dấu hiệu tốt. Nếu màn hình LED 7 đoạn không sáng, cần kiểm tra các tín hiệu điều khiển đến chip 8279 và các transistor điều khiển LED.
5.2. Hướng dẫn nạp chương trình đầu tiên bằng mạch nạp EPROM
Để kit có thể hoạt động, chương trình Monitor phải được ghi vào EPROM 2764. Quá trình này được thực hiện bởi một mạch nạp EPROM. Đầu tiên, file mã máy (thường có định dạng .hex hoặc .bin) sau khi biên dịch từ mã hợp ngữ 8086 sẽ được tải vào phần mềm của mạch nạp. Sau đó, chip EPROM trắng (đã được xóa bằng tia cực tím) được đặt vào đế cắm trên mạch nạp. Phần mềm sẽ điều khiển mạch nạp để ghi từng byte dữ liệu vào các địa chỉ tương ứng trong EPROM. Quá trình này có thể mất vài phút. Sau khi nạp xong, một số mạch nạp có chức năng kiểm tra (verify) để so sánh lại nội dung của chip với file gốc, đảm bảo dữ liệu được ghi chính xác. Chip EPROM sau khi nạp thành công sẽ được cắm vào đế trên kit 8086, sẵn sàng cho việc khởi động hệ thống.