Bối cảnh và vấn đề nghiên cứu
Sự phát triển mạnh mẽ của công nghệ điện tử và kỹ thuật máy tính đã đưa các bộ vi xử lý và vi điều khiển trở thành thành phần cốt lõi trong các hệ thống tự động hóa công nghiệp cũng như các thiết bị dân dụng (truyền hình, thiết bị nghe nhìn, đồ chơi điện tử). Quá trình tiến hóa kỹ thuật trải dài từ các thế hệ vi xử lý 4-bit (Intel 4040), 8-bit (Intel 8080/8085, Zilog Z80, Motorola 6800/6809), 16-bit (Intel 8086/80186/80286, Motorola 68000/68010) cho đến các dòng vi xử lý 32-bit (80386/80486) và 64-bit (Pentium).
Tại thời điểm năm 2000, tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (Đại học Quốc gia TP.HCM), việc tiếp cận thực hành vi xử lý của sinh viên ngành Điện tử gặp nhiều rào cản do trang thiết bị chuyên dụng phục vụ thực tập và thí nghiệm còn thiếu thốn, chưa đáp ứng đầy đủ nhu cầu nghiên cứu thực tế. Trong chương trình đào tạo đại học, thời lượng giảng dạy chuyên đề vi xử lý chỉ giới hạn trong 15 tiết lý thuyết. Nhằm giải quyết nhu cầu học tập, thực hành của bản thân sinh viên và phục vụ công tác đào tạo tại bộ môn, đề tài "Thiết Kế Thiết Bị Thực Tập Vi Xử Lý 8085" đã được triển khai thực hiện bởi sinh viên Nguyễn Thế Kỳ Sương (Lớp 95KDD, Khóa 1995–2000) dưới sự hướng dẫn của thầy Nguyễn Việt Hùng và thầy Nguyễn Thanh Bình.
Mục tiêu và nhiệm vụ nghiên cứu của đề tài bao gồm:
- Nghiên cứu tập lệnh và cấu trúc phần cứng của bộ vi xử lý 8-bit Intel 8085A.
- Thiết kế và xây dựng chương trình điều khiển hệ thống (chương trình Monitor) quản lý toàn bộ hoạt động của thiết bị thực tập, cho phép người dùng nạp chương trình, kiểm tra, sửa lỗi và thực thi mã lệnh trực tiếp.
- Tổ chức thi công, chạy thử nghiệm trên kit phát triển SDK-85, nạp mã nguồn vào bộ nhớ ROM của hệ thống và lập bảng tra cứu địa chỉ các chương trình con.
- Xây dựng tài liệu hướng dẫn sử dụng và đề xuất các bài thí nghiệm, module mở rộng.
Phạm vi nghiên cứu: Đề tài tổng thể được phân chia thành hai phần độc lập (phần cứng và phần mềm) đóng thành hai cuốn báo cáo riêng biệt; tài liệu này tập trung toàn diện vào phần mềm hệ thống (chương trình Monitor). Nghiên cứu được thực hiện trong thời gian 7 tuần (49 ngày), từ ngày nhận đề tài đến ngày nộp báo cáo (28/02/2000) tại Khoa Điện – Điện tử, Trường Đại học Sư phạm Kỹ thuật TP.HCM.
Cơ sở lý thuyết và phương pháp
Khung lý thuyết và kiến trúc hệ thống
Đề tài dựa trên nền tảng lý thuyết kiến trúc máy tính và kỹ thuật ghép nối vi xử lý 8-bit Intel 8085A với các vi mạch phụ trợ LSI (Large Scale Integration):
- Vi xử lý Intel 8085A: Đóng vỏ DIP 40 chân, bus địa chỉ 16-bit (quản lý 64 Kbyte bộ nhớ), bus dữ liệu 8-bit đa hợp với 8-bit địa chỉ thấp, hoạt động dựa trên xung nhịp thạch anh, hỗ trợ các đường ngắt cứng như TRAP, RST 7.5, RST 6.5, RST 5.5 và INTR.
- Tổ chức bộ nhớ và ngăn xếp: Áp dụng nguyên lý ngăn xếp LIFO (Last In First Out) với con trỏ ngăn xếp phần cứng (
SP) và kỹ thuật phân định không gian nhớ cho chương trình hệ thống, chương trình ứng dụng người dùng, vùng đệm dữ liệu.
- Kỹ thuật ghép nối ngoại vi: Ghép nối giải mã địa chỉ bộ nhớ và giải mã cổng vào/ra (I/O mapped I/O) cho các vi mạch điều khiển chức năng gồm bàn phím/hiển thị LED (8279), cổng song song (8255), bộ định thời/bộ đếm (8253), cổng truyền thông nối tiếp (8251), bộ điều khiển ngắt ưu tiên (8259), và các mạch chuyển đổi ADC 0809, DAC 0808.
Phương pháp nghiên cứu
Tác giả đã kết hợp các phương pháp kỹ thuật thực nghiệm:
- Phương pháp phân tích - tổng hợp tài liệu: Nghiên cứu tài liệu chuyên khảo về kỹ thuật số, kiến trúc vi xử lý 8085A, kỹ thuật truyền dữ liệu và sổ tay kỹ thuật của các dòng vi mạch Intel.
- Phương pháp quan sát và khảo sát thực tế: Khảo sát cấu trúc vận hành, giao diện điều khiển và phương thức quét bàn phím/hiển thị của kit vi xử lý có sẵn như MT-80Z (Trung tâm Đào tạo Bưu chính Viễn thông II) và kit SDK-85 của nhà trường.
- Phương pháp thực nghiệm - kiểm thử từng bước: Soạn thảo giải thuật, lập trình bằng hợp ngữ (Assembly 8085), nạp thử nghiệm từng chương trình con vào RAM của kit SDK-85 để kiểm tra tính đúng đắn trước khi nạp cố định vào EPROM.
Nguồn dữ liệu và tài liệu tham khảo
Cơ sở dữ liệu tham khảo chính của đề tài gồm các giáo trình và tài liệu kỹ thuật:
- Phương pháp nghiên cứu khoa học (Châu Kim Lang, ĐH SPKT TP.HCM).
- Kỹ thuật vi xử lý 8085A (Trần Văn Trọng, ĐH SPKT TP.HCM).
- Truyền dữ liệu sử dụng vi mạch LSI (Paul Bates, biên dịch: Tống Văn On, ĐH Bách Khoa TP.HCM).
- Digital Systems: Principles and Applications (Ronald J. Tocci, Prentice Hall International Inc., 1998).
Thiết kế và triển khai
Phân bổ không gian bộ nhớ và cổng ngoại vi
Hệ thống phần cứng phục vụ cho chương trình Monitor được phân chia không gian địa chỉ như sau:
| Loại thiết bị / Bộ nhớ |
Ký hiệu linh kiện |
Dung lượng / Chức năng |
Không gian địa chỉ (Hex) |
| EPROM 1 |
2764 |
8 Kbyte (Chứa chương trình Monitor) |
0000H – 1FFFH |
| EPROM 2 |
2764 |
8 Kbyte (Chương trình tiện ích, bài thí nghiệm) |
2000H – 3FFFH |
| RAM |
6264 (3 IC) |
24 Kbyte (Dành cho người dùng và hệ thống) |
4000H – 9FFFH |
| Bàn phím & Hiển thị |
8279 |
Quét 36 phím và 8 LED 7 đoạn |
A000H (Dữ liệu), A001H (Điều khiển) |
| Cổng song song 1 & 2 |
8255 (2 IC) |
Vào/ra số liệu song song |
00H – 07H và 08H – 0FH |
| Bộ định thời 1 & 2 |
8253 (2 IC) |
Định thời, tạo xung 300Hz cho 8251 và xung 5Hz |
10H – 17H và 18H – 1FH |
| Truyền thông nối tiếp |
8251 |
Giao tiếp nối tiếp dị bộ |
28H – 2FH |
| Điều khiển ngắt ưu tiên |
8259 |
Quản lý 8 mức ngắt ngoài |
20H – 27H |
| Bộ chuyển đổi A/D |
ADC 0809 |
Biến đổi điện áp tương tự sang số |
30H – 37H |
| Bộ chuyển đổi D/A |
DAC 0808 |
Biến đổi số sang điện áp tương tự |
38H – 3FH |
Cấp phát vùng nhớ RAM cho hệ thống Monitor
Chương trình Monitor sử dụng 1 Kbyte cuối của bộ nhớ RAM để làm ngăn xếp và lưu trữ các biến trạng thái, dữ liệu phục vụ điều khiển:
- Đáy ngăn xếp hệ thống: Khởi tạo tại địa chỉ
9CFFH (LXI SP, 9CFFH).
- Ngăn xếp giả lập (
MNT-STACKPOINTER): Bố trí tại vùng 9D00H – 9DFFH (đỉnh tại 9DFFH), phục vụ chạy từng bước chương trình của người dùng mà không làm hỏng ngăn xếp chính.
- Vùng biến trạng thái và đệm dữ liệu:
9FD2H – 9FD9H (Addrec): Lưu trữ tạm thời trạng thái các thanh ghi CPU (A, F, B, C, D, E, H, L) phục vụ chức năng hiển thị/nạp thanh ghi (REG).
9FD3H – 9FD5H (Addcopy): Lưu kết quả các phép tính toán số học, phục vụ sao chép bộ nhớ.
9FDAH – 9FF1H (Addst): Vùng nhớ đệm phục vụ phân tích mã lệnh, cài mã nhảy và phục hồi ngữ cảnh cho chức năng chạy từng bước (STEP).
9FDDH – 9FE2H (Addins): Lưu trữ các tham số địa chỉ phục vụ chèn dữ liệu và hiệu chỉnh địa chỉ (INS, SDC).
Quy trình thi công phần mềm
Quá trình xây dựng phần mềm được thực hiện qua 6 bước nghiêm ngặt:
- Soạn thảo mã nguồn hợp ngữ và chuyển đổi thành mã máy (Opcode).
- Nhập mã lệnh vào RAM của kit SDK-85, kiểm tra và chạy thử từng chương trình con.
- Điều chỉnh các lỗi logic, tối ưu hóa thuật toán và dung lượng mã.
- Sử dụng máy nạp ROM chuyên dụng để ghi chương trình đã hoàn thiện vào EPROM 2764.
- Cắm EPROM vào kit thực tập, chạy thử nghiệm hệ thống thực tế và kiểm tra tính năng các phím điều khiển.
- Sao chép nhân bản EPROM dự phòng nhằm đảm bảo tính sẵn sàng của thiết bị.
Nội dung chính theo từng chương
Chương 1: Dẫn nhập
Chương này phân tích tổng quan về bối cảnh công nghệ vi xử lý từ các thế hệ đầu tiên đến các dòng vi xử lý hiện đại. Tác giả nêu bật tầm quan trọng của việc xây dựng thiết bị thực tập tự chế tạo trong điều kiện cơ sở vật chất của nhà trường còn hạn chế. Chương 1 xác định rõ giới hạn đề tài: do thời gian thực hiện chỉ có 49 ngày và kinh nghiệm thực tế chưa nhiều, phần mềm được thiết kế tập trung quản lý 36 phím tương tác (16 phím số Hex từ 0 đến F và 20 phím chức năng), loại trừ các tính năng nâng cao như BREAK, PAUSE, SET (đặt điểm dừng) để chuyển sang các giai đoạn phát triển sau.
Chương 2: Cơ sở lý luận
Chương 2 thiết lập đề cương và phương pháp luận nghiên cứu gồm 4 giai đoạn: Giới thiệu phần cứng, Xây dựng chương trình Monitor, Thi công và Hướng dẫn sử dụng. Đối tượng nghiên cứu trọng tâm là các kit vi xử lý 8085, Z80 sẵn có, tiêu biểu là kit MT-80Z. Kế hoạch nghiên cứu 7 tuần được phân bổ chi tiết:
- Tuần 1: Lập đề cương tổng quát.
- Tuần 2: Thu thập tài liệu chuyên ngành.
- Tuần 3: Xây dựng đề cương chi tiết.
- Tuần 4, 5, 6: Khai triển đề cương, lập trình thuật toán và đánh máy văn bản.
- Tuần 7: Chỉnh sửa định dạng, kiểm thử và in ấn báo cáo.
Chương 3: Giới thiệu tổng quát về thiết bị thực tập
Chương này tổng kết cấu hình phần cứng của thiết bị phục vụ cho việc lập trình Monitor. Thiết bị tích hợp vi xử lý 8085A, bộ nhớ gồm 2 EPROM 8KB (2764), 3 RAM 8KB (6264, có 1 đế cắm đa năng cho phép cắm RAM hoặc EPROM), cùng hệ thống ngoại vi đầy đủ: 8279 (giao tiếp bàn phím 36 phím và 8 LED 7 đoạn: 4 LED hiển thị địa chỉ/thông báo, 4 LED hiển thị dữ liệu), hai IC 8255, hai IC 8253, 8251, 8259, ADC 0809 và DAC 0808.
Chương 4: Xây dựng chương trình Monitor
Đây là nội dung cốt lõi của đồ án, trình bày chi tiết giải thuật và mã nguồn hợp ngữ của hơn 30 chương trình con:
- Khởi tạo hệ thống (
MNT): Thiết lập con trỏ ngăn xếp SP = 9CFFH; cấu hình 8279 (xung 100 KHz 3EH, chế độ hiển thị 8 ký tự 10H, xóa FIFO C3H, đọc FIFO 40H, ghi RAM hiển thị tự tăng 90H); cấu hình 8255 (Mode 0 8BH); cấu hình 8253 (chia tần số tạo xung 300Hz cho bộ truyền thông 8251 và xung 5Hz); cấu hình 8251; cấu hình 8259 (địa chỉ vector ngắt 40H–47H); thiết lập thanh ghi mặt nạ ngắt SIM (che RST 7.5 và RST 5.5, chỉ cho phép TRAP và RST 6.5).
- Quét phím và giải mã (
KYBRD, KYCODE, PHIMSO, CODE1, CODE2): Lấy mã phím từ hàng đợi FIFO của 8279, xử lý chống rung, dịch dữ liệu hiển thị trên LED và chuyển đổi giữa số Hexa (00H–0FH) sang mã hiển thị LED 7 đoạn thông qua bảng tra cứu.
- Duyệt và thay đổi bộ nhớ (
ADD, UP, DOWN, DPHLM): Cho phép nhảy đến địa chỉ bất kỳ, hiển thị đồng thời địa chỉ (4 LED trái) và nội dung dữ liệu (4 LED phải), tự động tăng/giảm địa chỉ khi duyệt bộ nhớ.
- Sao chép dữ liệu (
COPY, SUBBCHL, COPY C.0, COPY C.1): Thuật toán kiểm tra quan hệ giữa vùng nhớ gốc và vùng nhớ đích. Nếu hai vùng nhớ không giao nhau hoặc giao nhau xuôi, hệ thống gọi COPY C.0 sao chép tuần tự từ địa chỉ thấp lên cao; nếu vùng nhớ đích giao nhau ngược với vùng gốc, hệ thống tự động chuyển sang gọi COPY C.1 sao chép ngược từ địa chỉ cao xuống thấp nhằm chống ghi đè làm mất dữ liệu.
- Xóa bộ nhớ (
DEL): Xóa nhanh một ô nhớ hoặc một khối vùng nhớ liên tục bằng cách nạp mã 00H.
- Quản lý thanh ghi CPU (
REG, DPM, KYTUB): Lưu trữ và phục hồi nội dung tất cả các thanh ghi đơn và cặp thanh ghi (A, F, B, C, D, E, H, L) vào vùng RAM Addrec, cho phép người dùng quan sát hoặc chỉnh sửa trực tiếp giá trị thanh ghi phục vụ chạy thử chương trình.
- Tìm kiếm dữ liệu (
SRCH, DPFIND): Tìm kiếm một byte dữ liệu mẫu trong vùng nhớ RAM chỉ định, hiển thị địa chỉ tìm thấy đầu tiên và cho phép bấm tiếp tục để quét toàn bộ vùng nhớ.
- Chạy từng bước (
STEP, LMB): Module gỡ rối chương trình. Chương trình con LMB (Length of Machine Byte) có nhiệm vụ phân tích mã Opcode để xác định độ dài lệnh sắp thực thi (1 byte, 2 byte, 3 byte, lệnh nhảy JMP, lệnh gọi CALL, lệnh trở về RET). Hệ thống sử dụng một ngăn xếp riêng biệt (MNT-STACKPOINTER) để bảo toàn trạng thái ngăn xếp thực của người dùng, cài mã ngắt/nhảy tạm thời để thực thi đúng 1 lệnh rồi trả quyền điều khiển về Monitor.
- Chèn dữ liệu và sửa địa chỉ (
INS, SHM, SDC, ADDBCDE): Chèn một hoặc nhiều byte vào giữa chương trình; chương trình con SHM thực hiện dịch chuyển các byte phía sau xuống địa chỉ cao hơn; chương trình con SDC tự động quét toàn bộ mã lệnh và cộng dồn khoảng cách thay đổi (ADDBCDE) vào địa chỉ đích của tất cả các lệnh nhảy, lệnh gọi, lệnh lưu trữ có tham chiếu đến vùng bị dịch chuyển.
- Thực thi chương trình (
PC, DPPC): Nạp địa chỉ bắt đầu của chương trình người dùng vào cặp thanh ghi HL và thực thi chuyển quyền điều khiển bằng lệnh PCHL.
Chương 5: Thi công
Trình bày quy trình thi công thực tế phần mềm, cách thức nạp mã máy vào RAM kit SDK-85, phương pháp kiểm thử logic, nạp chương trình vào EPROM 2764 và lập bảng tra cứu chi tiết địa chỉ bắt đầu, địa chỉ kết thúc cùng dung lượng bộ nhớ của từng chương trình con.
Chương 6: Hướng dẫn sử dụng thiết bị
Chương này cung cấp quy trình thao tác chi tiết từng phím chức năng trên bàn phím:
- Phím
ADD: Nhập 4 chữ số Hex địa chỉ cần đến, nhấn ADD để hiển thị địa chỉ và nội dung ô nhớ.
- Phím
UP / DOWN: Nhập 2 chữ số Hex dữ liệu, nhấn UP để ghi vào ô nhớ hiện hành và tăng con trỏ lên 1; nhấn DOWN để lùi con trỏ địa chỉ.
- Phím
PC và GO: Nhấn PC (màn hình hiện PC = --), nhập địa chỉ bắt đầu, nhấn GO để thực thi chương trình người dùng.
- Phím
REG: Nhấn REG để duyệt qua các thanh ghi (A, F, B, C, D, E, H, L), dùng UP/DOWN để chuyển thanh ghi, nhập giá trị mới và nhấn UP để ghi đè.
- Phím
COPY: Nhập địa chỉ đầu vùng gốc -> nhấn ADD -> nhập địa chỉ cuối vùng gốc -> nhấn ADD -> nhập địa chỉ đầu vùng đích -> nhấn ADD để thực hiện chép dữ liệu.
- Phím
DEL: Nhập địa chỉ đầu -> nhấn ADD -> nhập địa chỉ cuối -> nhấn ADD để xóa toàn bộ vùng nhớ về 00H.
- Phím
SRCH: Nhập byte dữ liệu cần tìm -> nhấn UP để bắt đầu tìm kiếm từ địa chỉ hiện hành.
- Phím
STEP: Đặt con trỏ tại địa chỉ bắt đầu lệnh -> nhấn STEP để thực thi từng lệnh đơn và kiểm tra cờ/thanh ghi bằng REG.
- Phím
INS: Di chuyển đến vị trí cần chèn -> nhấn INS -> nhập địa chỉ cuối vùng -> nhấn ADD -> nhập dữ liệu mới; có thể kích hoạt tính năng tự sửa địa chỉ (SDC).
Chương 7: Tóm tắt - Kết luận - Đề nghị
Tổng kết toàn bộ kết quả nghiên cứu sau 7 tuần làm việc, rút ra các quy luật về mối quan hệ giữa phần cứng và phần mềm nhúng, đánh giá các thuật toán then chốt và đề xuất phương hướng phát triển tiếp theo cho thiết bị.
Phần C: Tài liệu tham khảo và Phụ lục
Trình bày danh mục tài liệu tham khảo và mã nguồn chi tiết của các chương trình con phục trợ hiển thị và định thời: DAUCHAM (hiệu ứng đèn sáng lan dần), DELAY 0.1 (tạo trễ thời gian), DEMP (ghép 4 ô mã phím thành địa chỉ 16-bit trong DE), DPFIND (hiển thị chuỗi "FIND"), DPHL/DPHLM (xuất địa chỉ HL và dữ liệu ra LED), DPM (hiển thị nội dung ô nhớ), DP PC (hiển thị thông báo nạp PC), DP REG (hiển thị tên thanh ghi), CODE 1/CODE 2 (giải mã Hex sang LED 7 đoạn), HELLO (hiển thị chữ "HELLO" khi khởi động), KYTUB (hiển thị ký tự kèm dấu bằng), ORMP (hợp 2 nibble thành 1 byte), XADD (hiển thị chuỗi "ADD").
Kết quả và đóng góp
Kết quả kỹ thuật đạt được
Đề tài đã thiết kế, lập trình, kiểm thử và nạp thành công toàn bộ hệ thống chương trình Monitor cho kit vi xử lý 8085A, bao gồm hơn 30 module chương trình con được định vị chặt chẽ trong không gian bộ nhớ:
| Tên chương trình con |
Địa chỉ bắt đầu (Hex) |
Địa chỉ kết thúc (Hex) |
Dung lượng (Byte) |
Chức năng kỹ thuật chính |
MNT |
0000H |
00FCH |
253 byte |
Chương trình chính, khởi tạo SP, ngoại vi 8279, 8255, 8253, 8251, 8259, ngắt và điều phối phím |
DAUCHAM |
0200H |
023AH |
59 byte |
Hiển thị hiệu ứng dấu chấm dịch chuyển trên LED |
DELAY 0.1 |
0250H |
027AH |
43 byte |
Tạo trễ thời gian chuẩn phục vụ quét hiển thị |
DEMP |
0290H |
02A5H |
22 byte |
Chuyển đổi dữ liệu 4 ô phím quét thành cặp địa chỉ 16-bit DE |
DPFIND |
02C0H |
030EH |
79 byte |
Xuất thông báo trạng thái tìm kiếm ra màn hình LED |
DPHLM |
0360H |
037DH |
30 byte |
Hiển thị đồng thời địa chỉ trong HL và dữ liệu ô nhớ trỏ bởi HL |
DPM |
0390H |
03B3H |
36 byte |
Hiển thị dữ liệu của ô nhớ hiện hành |
DP PC |
03C0H |
03F5H |
54 byte |
Hiển thị thông báo trạng thái nạp con trỏ lệnh PC |
DP REG |
0400H |
0422H |
35 byte |
Hiển thị ký tự thanh ghi và giá trị hiện hành |
CODE 1 |
0430H |
0437H |
8 byte |
Tra bảng đổi mã Hex (4-bit) sang mã LED 7 đoạn |
CODE 2 |
0440H |
0467H |
40 byte |
Tách byte thành 2 nibble và đổi sang 2 mã LED 7 đoạn |
HELLO |
0480H |
04EFH |
112 byte |
Hiển thị dòng chữ chào mừng "HELLO" khi bật nguồn |
KYTUB |
0500H |
053EH |
63 byte |
Hiển thị ký hiệu thanh ghi kèm dấu bằng (ví dụ: A = ) |
ORMP |
0550H |
055FH |
16 byte |
Hợp nhất 2 nibble phím quét thành 1 byte dữ liệu |
XADD |
0570H |
059BH |
44 byte |
Hiển thị ký tự chữ "ADD" trên LED |
KYBRD |
05A0H |
05AFH |
16 byte |
Chờ và nhận mã quét phím từ bàn phím |
KYCHECK |
05C0H |
05D9H |
26 byte |
Kiểm tra trạng thái hàng đợi FIFO của 8279 |
KYCODE |
05F0H |
060BH |
28 byte |
Đọc mã phím từ FIFO của vi mạch 8279 |
PHIMSO |
0620H |
06C3H |
164 byte |
Xử lý nhập và hiển thị ký tự số Hex (0–F) |
UP |
06E0H |
06F8H |
25 byte |
Ghi dữ liệu vào ô nhớ và tăng địa chỉ HL lên 1 |
DOWN |
0700H |
070CH |
13 byte |
Giảm con trỏ địa chỉ HL xuống 1 đơn vị |
ADD |
0720H |
072EH |
15 byte |
Nhận và chuyển con trỏ bộ nhớ đến địa chỉ mới |
SUBBCHL |
0740H |
074DH |
14 byte |
Thực hiện phép trừ 16-bit: BC - HL |
COPY C.0 |
0760H |
077EH |
31 byte |
Sao chép dữ liệu vùng không giao nhau (chiều tiến) |
COPY C.1 |
0790H |
07BBH |
44 byte |
Sao chép dữ liệu vùng giao nhau (chiều lùi) |
COPY |
07D0H |
08CDH |
254 byte |
Quản trị toàn diện tính năng sao chép khối nhớ |
DEL |
08E0H |
0975H |
150 byte |
Xóa khối bộ nhớ (ghi đè dữ liệu 00H) |
REG |
09A0H |
0AA0H |
257 byte |
Xem và chỉnh sửa giá trị các thanh ghi của CPU |
SRCH |
0AD0H |
0B23H |
84 byte |
Tìm kiếm byte dữ liệu trong không gian nhớ |
STEP |
0B50H |
0D23H |
468 byte |
Thực thi từng lệnh đơn của chương trình người dùng |
LMB |
0D50H |
0E78H |
297 byte |
Phân tích và nhận dạng độ dài mã lệnh (1, 2, 3 byte) |
SHM |
0E90H |
0EAFH |
32 byte |
Dịch chuyển dữ liệu bộ nhớ phục vụ thao tác chèn |
INS |
0EC0H |
0F9FH |
224 byte |
Chèn mã lệnh vào giữa chương trình |
SDC |
0FC0H |
1088H |
201 byte |
Tự động hiệu chỉnh địa chỉ các lệnh nhảy/gọi sau khi chèn |
ADDBCDE |
10C0H |
10CBH |
12 byte |
Thực hiện phép cộng 16-bit: DE + BC |
PC |
10F0H |
1123H |
52 byte |
Thiết lập địa chỉ con trỏ lệnh và thực thi chương trình |
Đóng góp thực tiễn của đề tài
- Làm chủ kỹ thuật phần mềm hệ thống nhúng: Giải quyết trọn vẹn bài toán xây dựng chương trình Monitor độc lập từ mức hợp ngữ thấp, không phụ thuộc vào các thư viện phần mềm thương mại.
- Giải thuật xử lý xung đột bộ nhớ và ngăn xếp:
- Xây dựng thành công thuật toán phân loại vùng nhớ trong hàm
COPY, tự động hoán chuyển giữa hai hàm con COPY C.0 và COPY C.1 để ngăn chặn triệt để hiện tượng ghi đè làm mất dữ liệu gốc khi vùng đích trùng một phần với vùng nguồn.
- Thiết kế cấu trúc ngăn xếp giả lập
MNT-STACKPOINTER tách biệt độc lập với ngăn xếp người dùng (SP), giúp tính năng chạy từng bước (STEP) và kiểm tra thanh ghi (REG) vận hành chính xác mà không phá vỡ cấu trúc ngăn xếp của chương trình đang chạy thử.
- Xây dựng module nhận dạng độ dài lệnh
LMB và module tự động hiệu chỉnh địa chỉ SDC, giải quyết triệt để vấn đề dịch chuyển địa chỉ các lệnh phân nhánh (JMP, CALL, STA, LDA) khi chèn mã lệnh mới bằng chức năng INS.
- Cung cấp tài liệu kỹ thuật nền tảng: Toàn bộ hệ thống mã nguồn, bản đồ bộ nhớ và bảng tra cứu chương trình con đã tạo tiền đề kỹ thuật trực tiếp để Khoa Điện – Điện tử hoàn thiện thiết bị thực tập vi xử lý tự tạo.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế được ghi nhận trong văn bản
- Thời gian và điều kiện nghiên cứu: Thời gian thực hiện chính thức bị giới hạn trong 49 ngày (7 tuần), kinh nghiệm thực tế của tác giả chưa nhiều, do đó một số tính năng nâng cao chưa kịp hoàn thiện trong khuôn khổ đề tài.
- Tính năng phần mềm chưa triển khai: Chưa xây dựng được các chức năng:
BREAK: Chạy chương trình theo từng đoạn giới hạn bởi các điểm dừng.
SET: Đặt điểm dừng phần mềm (Breakpoint) cho chương trình.
PAUSE: Tạm dừng chương trình người dùng đang thực thi.
- Chưa khai thác hết tiềm năng phần cứng: Phần mềm Monitor trong giai đoạn này chủ yếu quản lý tương tác bàn phím, LED và bộ nhớ; chưa khai thác hết khả năng của các khối ngoại vi đã tích hợp trên phần cứng như bộ truyền thông nối tiếp 8251, mạch biến đổi ADC 0809 và DAC 0808.
Hướng phát triển và kiến nghị của tác giả
Nhằm nâng cao tính hoàn thiện để thiết bị trở thành sản phẩm phục vụ giảng dạy hoàn chỉnh, tác giả kiến nghị các hướng nghiên cứu tiếp theo:
- Xây dựng hoàn chỉnh chức năng chạy từng đoạn (
BREAK) dựa trên việc cài đặt điểm dừng bằng phím SET.
- Bổ sung tính năng tự động sửa đổi địa chỉ các lệnh phân nhánh sau khi thực hiện thao tác sao chép dữ liệu (
COPY).
- Phát triển chương trình giao tiếp truyền thông nối tiếp qua vi mạch 8251, cho phép nạp trực tiếp tập tin mã máy từ máy tính cá nhân (PC) truyền xuống kit thực tập để chạy thử.
- Thiết kế các module phần cứng mở rộng chuyên dụng và biên soạn hệ thống bài thí nghiệm thực hành đồng bộ khai thác bộ định thời 8253, ADC 0809 và DAC 0808.
Giá trị tham khảo
Tài liệu đồ án mang lại giá trị thực tiễn và học thuật cho các nhóm đối tượng:
- Sinh viên ngành Kỹ thuật Điện, Điện tử, Kỹ thuật Máy tính và Tự động hóa: Là tài liệu tham khảo trực tiếp khi học tập các học phần Kỹ thuật Vi xử lý, Ghép nối ngoại vi và Lập trình Hợp ngữ (Assembly 8085).
- Người nghiên cứu thiết kế phần cứng và phần mềm nhúng: Cung cấp tài liệu thiết kế chi tiết về phương pháp quản lý tài nguyên vi xử lý ở mức thanh ghi, kỹ thuật điều khiển vi mạch quét phím/hiển thị 8279, định thời 8253, ngắt 8259 và tổ chức bộ nhớ RAM/ROM.
- Các nhóm sinh viên phát triển đề tài khóa sau: Cung cấp cấu trúc mã nguồn nền tảng, bảng tra cứu địa chỉ các chương trình con và bản đồ bộ nhớ để tiếp tục lập trình mở rộng các module truyền thông máy tính và bài thí nghiệm chuyên đề.
Câu hỏi thường gặp
1. Bản đồ bộ nhớ của hệ thống thực tập 8085 được phân chia như thế nào giữa ROM và RAM?
Theo thiết kế tại Chương 3 và Chương 4:
- Không gian ROM gồm: EPROM 1 (2764, địa chỉ
0000H – 1FFFH) dùng để lưu trữ toàn bộ chương trình Monitor; EPROM 2 (2764, địa chỉ 2000H – 3FFFH) dùng để lưu trữ các chương trình tiện ích và bài thí nghiệm sau này.
- Không gian RAM (6264) có địa chỉ từ
4000H đến 9FFFH. Trong đó, phần lớn dung lượng dành cho người sử dụng nạp chương trình, và 1 Kbyte cuối cùng (9C00H – 9FFFH) được dành riêng cho hệ thống để khởi tạo ngăn xếp (SP = 9CFFH), ngăn xếp giả lập MNT-STACKPOINTER (9D00H – 9DFFH) và các ô nhớ biến trạng thái điều khiển (9FDAH – 9FF1H).
2. Chức năng chạy từng bước (STEP) giải quyết vấn đề xung đột ngăn xếp của người dùng như thế nào?
Khi chạy từng bước, chương trình người dùng và chương trình Monitor phải chạy xen kẽ nhau. Để không chiếm dụng và phá vỡ con trỏ ngăn xếp phần cứng (SP) của chương trình người dùng, tác giả đã thiết lập một vùng ngăn xếp giả lập riêng biệt mang tên MNT-STACKPOINTER tại vùng nhớ 9D00H – 9DFFH (hoạt động theo nguyên tắc LIFO). Vùng này lưu giữ địa chỉ trở về khi gặp các lệnh gọi chương trình con (CALL) hoặc lệnh rẽ nhánh và phục hồi lại địa chỉ chính xác khi gặp lệnh trở về (RET), bảo toàn tuyệt đối các thông số thanh ghi và cờ trạng thái sau mỗi bước lệnh.
3. Thuật toán sao chép bộ nhớ (COPY) xử lý hiện tượng trùng lặp vùng nhớ như thế nào?
Chương trình COPY thực hiện so sánh địa chỉ đầu và cuối của vùng gốc (HL, BC) với địa chỉ đầu vùng đích (DE). Nếu hai vùng nhớ không giao nhau hoặc giao nhau mà địa chỉ đích nhỏ hơn địa chỉ gốc, chương trình gọi module COPY C.0 để sao chép tuần tự từ địa chỉ thấp lên địa chỉ cao. Nếu vùng đích có địa chỉ lớn hơn vùng gốc và nằm đè lên một phần vùng gốc, chương trình tự động chuyển sang gọi module COPY C.1 để sao chép ngược từ địa chỉ cao xuống địa chỉ thấp, đảm bảo dữ liệu chưa sao chép không bị ghi đè.
4. Chương trình con SDC thực hiện chức năng tự động sửa địa chỉ khi chèn lệnh (INS) ra sao?
Sau khi người dùng chèn thêm một hoặc nhiều byte lệnh vào chương trình (khiến toàn bộ khối lệnh phía sau bị dịch chuyển địa chỉ), chương trình con SDC sẽ quét qua các lệnh nằm trong vùng ảnh hưởng. Khi nhận diện các lệnh có liên quan đến địa chỉ 16-bit (như lệnh nhảy JMP, lệnh gọi CALL, lệnh lưu/nạp bộ nhớ trực tiếp STA, LDA), SDC sử dụng chương trình con ADDBCDE để cộng khoảng cách dịch chuyển (lưu trong BC) vào byte địa chỉ đích của các lệnh đó, giúp chương trình sau khi chèn vẫn duy trì đúng logic rẽ nhánh ban đầu.
5. Các cổng vào/ra (I/O) của các vi mạch ngoại vi được định vị tại các địa chỉ cụ thể nào?
Theo quy hoạch phần cứng tại Chương 3:
- 8279 (Bàn phím & Hiển thị): Cổng điều khiển
A001H, cổng dữ liệu A000H.
- 8255 thứ nhất: Cổng I/O từ
00H đến 07H; 8255 thứ hai: Cổng I/O từ 08H đến 0FH.
- 8253 thứ nhất (tạo xung nhịp cho 8251): Cổng I/O từ
10H đến 17H; 8253 thứ hai: Cổng I/O từ 18H đến 1FH.
- 8251 (Truyền thông nối tiếp): Cổng I/O từ
28H đến 2FH.
- 8259 (Điều khiển ngắt ưu tiên): Cổng I/O từ
20H đến 27H.
- ADC 0809: Cổng I/O từ
30H đến 37H.
- DAC 0808: Cổng I/O từ
38H đến 3FH.
Kết luận
Đồ án tốt nghiệp "Thiết Kế Thiết Bị Thực Tập Vi Xử Lý 8085" của sinh viên Nguyễn Thế Kỳ Sương đã hoàn thành xuất sắc nhiệm vụ thiết kế, xây dựng và thi công hệ thống phần mềm điều khiển Monitor trên nền tảng vi xử lý Intel 8085A. Tác giả đã tổ chức thành công hơn 30 chương trình con hợp ngữ với dung lượng tối ưu, giải quyết triệt để các bài toán kỹ thuật phức tạp như quản lý ngăn xếp khi chạy từng bước, chống ghi đè dữ liệu khi sao chép bộ nhớ và tự động hiệu chỉnh địa chỉ khi chèn lệnh. Kết quả nghiên cứu và quy trình thi công nạp EPROM được ghi lại chi tiết, tạo cơ sở thực tiễn vững chắc cho việc hoàn thiện các bộ kit thực tập vi xử lý phục vụ đào tạo kỹ thuật tại nhà trường.