Giới thiệu dự án

Bối cảnh và vấn đề nghiên cứu

Vào giai đoạn chuyển giao công nghệ cuối thập niên 1990 và đầu những năm 2000, ngành công nghiệp điện tử - tự động hóa chứng kiến sự bùng nổ mạnh mẽ của các hệ thống nhúng dựa trên vi điều khiển 8-bit. Theo các báo cáo kỹ thuật ngành vi điện tử thời kỳ này, họ vi điều khiển MCS-51 (Intel 8051/8052) chiếm tới hơn 50% thị phần ứng dụng điều khiển trong công nghiệp, thiết bị gia dụng và ô tô nhờ cấu trúc phần cứng tối ưu cho xử lý bit và tập lệnh cô đọng. Tuy nhiên, các dòng vi điều khiển truyền thống như 8031 (không có ROM nội) hay 8051/8751 (chỉ nạp được qua bộ nhớ EPROM xóa bằng tia cực tím - UV EPROM) bộc lộ rào cản rất lớn trong công tác nghiên cứu, đào tạo thực hành và phát triển mẫu thử (prototyping).

flowchart LR
    A[Truyền thống: EPROM UV 2764] -->|Tháo lắp cơ học + Chiếu UV 15-20p| B[Máy nạp chuyên dụng]
    B -->|Lắp lại board mạch| C[Kiểm thử lỗi phần cứng/mềm]
    C -.->|Phát hiện lỗi - Lặp lại quy trình| A
    
    D[Giải pháp Kit AT89C52 + RAM 6264] -->|Tải mã qua RS-232 COM1 < 5s| E[SRAM 6264 / Monitor EPROM]
    E -->|Thực thi trực tiếp bằng lệnh 'G'| F[Kiểm thử & Debug tức thì trên LED/Bàn phím]

Vấn đề kỹ thuật cụ thể (Problem Statement)

Quy trình phát triển ứng dụng nhúng trên nền tảng 8051 cổ điển gặp các nút thắt kỹ thuật nghiêm trọng:

  • Chu kỳ nạp - thử nghiệm kéo dài: Việc sử dụng bộ nhớ EPROM ngoài (như IC 2764) đòi hỏi phải tháo chip khỏi mạch, đưa vào máy chiếu tia cực tím từ 15–20 phút để xóa dữ liệu, sau đó sử dụng máy nạp ROM chuyên dụng trước khi cắm lại mạch đích.
  • Thiếu công cụ tương tác trực tiếp (On-board Interactive Debugging): Thiếu hệ thống bàn phím và bộ hiển thị chuyên biệt để người phát triển trực tiếp can thiệp, đọc/ghi nội dung ô nhớ RAM, thanh ghi và nhảy đến địa chỉ thực thi.
  • Rào cản truyền thông PC - Vi điều khiển: Việc nạp trực tiếp mã máy (Hex file) từ môi trường máy tính cá nhân (PC) xuống phần cứng nhúng chưa được tự động hóa đồng bộ, gây lãng phí thời gian và tăng nguy cơ gãy chân, hỏng hóc vật lý của IC.

Mục tiêu của dự án (Project Objectives)

  1. Thiết kế phần cứng hoàn chỉnh: Xây dựng bo mạch vi điều khiển trung tâm sử dụng chip AT89C52 (công nghệ CMOS, tần số dao động 12 MHz, bộ nhớ Flash on-chip 8 KB, 256 bytes RAM nội).
  2. Mở rộng không gian nhớ linh hoạt: Ghép nối bộ nhớ chương trình EPROM 2764 (8 Kbyte) chứa hệ điều hành giám sát (Monitor Program) và SRAM 6264 (8 Kbyte) phục vụ tải và chạy chương trình người dùng.
  3. Thiết kế hệ thống giao tiếp ngoại vi chuyên dụng: Ứng dụng vi mạch 8279 để quét ma trận bàn phím 24 phím (16 phím Hex + 8 phím chức năng) và điều khiển hiển thị 8 LED 7 đoạn theo phương pháp quét đa hợp (Time-division Multiplexing); tích hợp vi mạch PPI 8255 mở rộng cổng vào/ra (I/O).
  4. Phát triển giao tiếp máy tính qua RS-232: Xây dựng cổng truyền thông nối tiếp nối với cổng COM1 của PC sử dụng IC đệm MAX232 chuẩn hóa điện thế $\pm12\text{V}$ về mức TTL $0-5\text{V}$.
  5. Xây dựng hệ thống phần mềm nhúng (Firmware & Host Software): Lập trình hệ điều hành Monitor bằng Hợp ngữ (Assembly MCS-51) và phần mềm điều khiển truyền thông trên PC bằng Turbo Pascal, cho phép nạp, sửa đổi ô nhớ và chạy file Hex trực tiếp từ máy tính.

Phương pháp giải quyết và minh chứng kỹ thuật

Giải pháp xây dựng kiến trúc phân lớp phần cứng và phần mềm, sử dụng cơ chế thực thi gián tiếp qua con trỏ dữ liệu DPTR kết hợp bộ nhớ RAM tĩnh (SRAM). Khi nhận mã máy từ máy tính qua cổng nối tiếp, chương trình Monitor tiếp nhận dữ liệu byte-by-byte, tự động ghi vào SRAM 6264 từ địa chỉ 4000H và chuyển quyền điều khiển thực thi bằng lệnh LJMP hoặc JMP @A+DPTR.

Kết quả đo lường kỳ vọng (Expected Outcomes)

  • Tốc độ truyền dữ liệu: Đạt tốc độ Baud từ 1200 bps đến 9600 bps qua cổng COM1 với tỷ lệ lỗi bit (BER) bằng 0 trong khoảng cách truyền dẫn 20 mét.
  • Tần số quét hiển thị: Tần số quét LED đạt trên 100 Hz, loại bỏ hoàn toàn hiện tượng nhấp nháy quang học (flicker-free).
  • Thời gian đáp ứng bàn phím: Tự động chống rung phím (hardware/software debounce) trong khoảng thời gian $10.3\text{ ms}$.

Phạm vi và giới hạn đề tài

  • Phạm vi: Nghiên cứu kiến trúc vi điều khiển AT89C52, giao tiếp bộ nhớ ngoài bus 8-bit/16-bit địa chỉ, ghép nối bus với các IC ngoại vi kinh điển (8279, 8255, MAX232) và lập trình giao tiếp RS-232 bằng Turbo Pascal / Assembly.
  • Giới hạn: Không gian nhớ mở rộng giới hạn ở 64 Kbyte (đặc thù họ 8051); truyền thông nối tiếp cấu hình theo chuẩn truyền dị bộ (Asynchronous) điểm - điểm (Point-to-Point).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Giao tiếp qua Khe cắm Mở rộng (Slot-Card ISA/PCI) Giao tiếp qua Cổng Song song (Parallel Port - LPT) Giao tiếp qua Cổng Nối tiếp (Serial Port RS-232) - Lựa chọn đề tài
Bản chất đường truyền Bus hệ thống 8/16/32-bit tốc độ cao Truyền song song 8-bit dữ liệu + tín hiệu bắt tay Truyền nối tiếp không đồng bộ theo từng bit (TXD, RXD, GND)
Khoảng cách truyền Cực ngắn (chỉ trong bo mạch chủ PC) Ngắn ($< 3 - 5\text{ m}$), dễ suy hao tín hiệu Dài (lên đến $15 - 20\text{ m}$ với chuẩn cáp chất lượng cao)
Độ phức tạp phần cứng Rất phức tạp (cần mạch giải mã bus hệ thống, tháo vỏ máy PC) Trung bình (đầu nối DB25, tương thích TTL) Đơn giản, độ tin cậy cao, chỉ cần IC đổi mức MAX232
Chi phí triển khai Rất cao Trung bình Tối ưu, giá thành thấp
Tính linh hoạt Kém linh hoạt, rủi ro chập cháy bo mẹ PC Trung bình, phụ thuộc chuẩn máy in Rất cao, tương thích mọi dòng máy tính cá nhân

So sánh các vi điều khiển họ MCS-51 và AT89C52

Dòng IC Bộ nhớ Chương trình (ROM) Bộ nhớ Dữ liệu (RAM) Số bộ Timer 16-bit Công nghệ chế tạo Khả năng nạp lại trong mạch
8031 $0\text{ KB}$ (Bắt buộc dùng ROM ngoài) 128 Bytes 2 NMOS / HMOS Không có ROM
8051 $4\text{ KB}$ Mask ROM (Ghi cố định từ nhà máy) 128 Bytes 2 HMOS Không thể ghi lại
8751 $4\text{ KB}$ UV EPROM (Xóa bằng tia cực tím) 128 Bytes 2 HMOS Khó khăn (cần đèn UV)
8052 $8\text{ KB}$ Mask ROM 256 Bytes 3 (có Timer 2) HMOS Không thể ghi lại
AT89C52 $8\text{ KB}$ Flash PEROM (Ghi/xóa điện $1000$ chu kỳ) 256 Bytes 3 (Timer 0, 1, 2) CMOS công suất thấp Hỗ trợ nạp điện áp cao/thấp linh hoạt

Phân tích yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have (Bắt buộc): Bộ vi xử lý AT89C52 hoạt động ổn định ở $12\text{ MHz}$; mạch chốt địa chỉ 74LS573; mạch giải mã địa chỉ không gian nhớ 74LS138; bộ nhớ EPROM 2764 chứa Monitor; bộ nhớ SRAM 6264 chứa User Code; khối điều khiển bàn phím/hiển thị 8279; khối truyền thông MAX232 kết nối cổng COM1.
  • Should Have (Nên có): Khối mở rộng vào/ra đa dụng qua PPI 8255A; các phím chức năng chuyên biệt cho hệ thống nhúng ($: tra cứu bộ nhớ, +: tăng địa chỉ, -: giảm địa chỉ, P: trỏ PC, G: thực thi Go, R: nhận dữ liệu từ PC).
  • Could Have (Có thể mở rộng): Tận dụng tính năng phát xung Clock-out của Timer 2 tại chân P1.0; lập trình chế độ tự động đếm lên/xuống (Up/Down Counter) với chân điều khiển T2EX.
  • Won't Have (Chưa thực hiện ở giai đoạn này): Giao tiếp qua mạng công nghiệp (RS-485, CAN bus); giao diện đồ họa GUI trên nền tảng Windows 32-bit.

Thiết kế hệ thống

graph TD
    subgraph Host PC
        PC[Phần mềm Turbo Pascal 7.0] -->|Cổng COM1 RS-232: TXD/RXD| MAX[IC Biến đổi điện áp MAX232]
    end

    subgraph Trung tâm xử lý và Bus
        MAX -->|Chuẩn TTL| CPU[Vi điều khiển AT89C52 @ 12MHz]
        CPU -->|P0.0 - P0.7: AD0 - AD7 + ALE| LATCH[IC Chốt 74LS573]
        LATCH -->|A0 - A7| ADDR_BUS[Address Bus thấp A0-A7]
        CPU -->|P2.0 - P2.7: A8 - A15| ADDR_HIGH[Address Bus cao A8-A15]
        CPU -->|P0.0 - P0.7| DATA_BUS[Data Bus 8-bit D0-D7]
        CPU -->|RD, WR, PSEN| CTRL_BUS[Control Bus]
    end

    subgraph Giải mã địa chỉ
        ADDR_HIGH -->|A13, A14, A15| DEC[IC Giải mã 74LS138]
        DEC -->|Y0: 0000H-1FFFH| INT_ROM[ROM Nội / Dự phòng]
        DEC -->|Y1: 2000H-3FFFH| EPROM[EPROM 2764 8KB - Monitor]
        DEC -->|Y2: 4000H-5FFFH| SRAM[SRAM 6264 8KB - User App]
        DEC -->|Y3: 6000H-6003H| PPI[PPI 8255 Mở rộng IO]
        DEC -->|Y4: 8000H-8001H| KBD_DISP[IC Quét Bàn phím & LED 8279]
    end

    subgraph Giao diện người dùng
        KBD_DISP -->|SL0 - SL2 qua 74LS138 + Transistor A1015| LED[Khối 8 LED 7 đoạn Anode chung]
        KBD_DISP -->|Quét cột SL0-SL3 & Đọc hàng RL0-RL7| MATRIX[Ma trận 24 phím ấn]
    end

Bản đồ bộ nhớ (Memory Map) của hệ thống

Hệ thống sử dụng đường địa chỉ $A_{15}, A_{14}, A_{13}$ đưa vào các chân chọn $C, B, A$ của IC 74LS138 để tạo ra các tín hiệu chọn chip ($\overline{CS}$):

Thiết bị Không gian địa chỉ (Hex) Đường chọn Chip ($\overline{CS}$) từ 74LS138 Dung lượng Chức năng chi tiết
Internal Flash 0000H1FFFH Mặc định chip chọn nội $8\text{ KB}$ Bộ nhớ Flash on-chip của AT89C52
EPROM 2764 2000H3FFFH Ngõ ra $\overline{Y_1}$ (Chân 15) $8\text{ KB}$ Chứa chương trình nguồn giám sát (Monitor Program)
SRAM 6264 4000H5FFFH Ngõ ra $\overline{Y_2}$ (Chân 14) $8\text{ KB}$ Chứa dữ liệu thực thi và chương trình tải từ PC
PPI 8255A 6000H6003H Ngõ ra $\overline{Y_3}$ (Chân 13) 4 Ports Mở rộng cổng vào/ra song song (Port A, B, C, Control)
KBD/Display 8279 8000H8001H Ngõ ra $\overline{Y_4}$ (Chân 12) 2 Ports Quản trị giao tiếp hiển thị (8000H: Data, 8001H: Control)

Tính toán thông số mạch phần cứng

  1. Tính toán phân cực Transistor lái LED 7 đoạn:

    • Dòng tiêu thụ định mức để mỗi đoạn LED (segment) phát sáng rõ nét: $I_{segment} = 10\text{ mA}$.
    • Dòng điện cực đại qua cực Emitter của Transistor PNP khi hiển thị chữ số '8' (cả 7 đoạn và dấu chấm sáng): $$I_{E(max)} = 8 \times I_{segment} = 8 \times 10\text{ mA} = 80\text{ mA}$$
    • Sử dụng Transistor PNP loại $2\text{SA}1015$ có hệ số khuếch đại dòng $\beta$ (hFE) ở chế độ đóng ngắt từ $40$ đến $200$. Để đảm bảo BJT dẫn bão hòa sâu ($V_{CE(sat)} \approx 0.2\text{V}, V_{BE(sat)} \approx 0.7\text{V}$), ta chọn dòng cực Base: $$I_B = \frac{I_{E(max)}}{\beta_{min}} = \frac{80\text{ mA}}{80} = 1\text{ mA}$$
    • Điện áp rơi trên điện trở định dòng cực Base $R_1$: $$V_{R1} = V_{CC} - V_{BE(sat)} - V_{OL(74LS138)} \approx 5\text{V} - 0.7\text{V} - 0.4\text{V} = 3.9\text{V}$$
    • Giá trị điện trở $R_1$: $$R_1 = \frac{V_{R1}}{I_B} = \frac{3.9\text{V}}{1\text{ mA}} = 3.9\text{ k}\Omega \quad (\text{Chọn } R_1 = 3.9\text{ k}\Omega)$$
    • Tính toán điện trở hạn dòng thanh ghi đoạn $R_2$: Với điện áp sụt áp thuận trên LED $V_{LED} \approx 2.5\text{V}$, ta có: $$V_{R2} = V_{CC} - V_{CE(sat)} - V_{LED} = 5\text{V} - 0.2\text{V} - 2.5\text{V} = 2.3\text{V}$$ $$R_2 = \frac{V_{R2}}{I_{segment}} = \frac{2.3\text{V}}{10\text{ mA}} = 230\ \Omega \quad (\text{Thực tế chọn chuẩn an toàn } R_2 = 33\ \Omega \text{ cho phương pháp quét xung đa hợp với Duty Cycle } 1/8)$$
  2. Tính toán tốc độ Baud truyền thông qua Timer 2: Khi Timer 2 được thiết lập làm bộ tạo tốc độ Baud ($RCLK = 1$ hoặc $TCLK = 1$ trong thanh ghi $T2CON$), bộ định thời tăng giá trị theo tần số $f_{osc} / 2$ thay vì $f_{osc} / 12$. Công thức tính tốc độ Baud tại Mode 1 và Mode 3: $$\text{Baud Rate} = \frac{f_{osc}}{32 \times [65536 - (RCAP2H, RCAP2L)]}$$ Với $f_{osc} = 12\text{ MHz}$, để đạt tốc độ chuẩn $9600\text{ Baud}$: $$65536 - (RCAP2H, RCAP2L) = \frac{12 \times 10^6}{32 \times 9600} = 39.0625 \approx 39$$ $$\Rightarrow (RCAP2H, RCAP2L) = 65536 - 39 = 65497 = \text{FFD9H}$$

Phương pháp luận phát triển (Methodology)

Dự án áp dụng phương pháp luận phát triển dạng chữ V (V-Model) kết hợp chặt chẽ giữa thiết kế phần cứng (EDA tool: EAGLE CAD) và phát triển phần mềm (Keil A51, Turbo Pascal 7.0):

  • Phần cứng: Vẽ sơ đồ nguyên lý $\rightarrow$ Thiết kế mạch in 2 lớp (Double-sided PCB) $\rightarrow$ Gia công mạch $\rightarrow$ Hàn chân đế cắm IC (Socket) để bảo vệ linh kiện nhiệt độ cao $\rightarrow$ Đo kiểm tra ngắn mạch/thông mạch.
  • Phần mềm: Phân tích lưu đồ thuật toán từng chương trình con $\rightarrow$ Lập trình Assembly cho khối Monitor $\rightarrow$ Viết chương trình truyền nhận Turbo Pascal $\rightarrow$ Nạp EPROM và kiểm thử liên hợp phần cứng - phần mềm.

Implementation và kết quả

Quy trình phát triển phần cứng và phần mềm

sequenceDiagram
    autonumber
    actor Người_Dùng as Người dùng (Kỹ sư)
    participant PC as Phần mềm PC (Turbo Pascal)
    participant MAX as IC MAX232
    participant MCU as Vi điều khiển AT89C52
    participant RAM as SRAM 6264 (4000H)
    participant DISP as Khối 8279 & LED 7 đoạn

    Note over MCU,DISP: Hệ thống bật nguồn - Monitor khởi tạo
    MCU->>DISP: Gửi mã khởi tạo 8279 & Xóa hiển thị
    Người_Dùng->>MCU: Nhấn phím 'R' (Receive Mode)
    MCU->>DISP: Hiển thị chữ "NHAN FILE"
    Người_Dùng->>PC: Chọn file Hex & Phát lệnh gửi qua COM1
    
    loop Truyền nhận từng Byte dữ liệu
        PC->>MAX: Byte dữ liệu (Mức điện áp +-12V)
        MAX->>MCU: Chuyển đổi mức TTL (0-5V) đưa vào chân RXD
        MCU->>MCU: Đọc thanh ghi SBUF khi cờ RI = 1
        MCU->>RAM: Ghi dữ liệu vào địa chỉ con trỏ DPTR (4000H+)
        MCU->>MCU: Tăng DPTR & Giảm biến đếm Byte
    end
    
    PC-->>Người_Dùng: Thông báo "TRANSMIT OK"
    Người_Dùng->>MCU: Nhập địa chỉ 4000H + Nhấn phím 'G' (Go)
    MCU->>RAM: Nhảy đến 4000H thực thi mã ứng dụng

Các thuật toán và đoạn mã nguồn then chốt

1. Khởi tạo IC 8279 và Hệ thống Monitor (Assembly AT89C52)

Đoạn mã chịu trách nhiệm thiết lập con trỏ ngăn xếp (Stack Pointer), cấu hình vi mạch quét bàn phím/hiển thị 8279 ở chế độ mã hóa quét bàn phím (Encoded Scan Keyboard Lockout) và thiết lập cổng PPI 8255:

ORG 2000H
    LJMP X1
ORG 2030H
X1: 
    MOV SP, #65H            ; Khởi tạo đỉnh ngăn xếp tại 65H
    MOV DPTR, #8001H        ; Trỏ tới thanh ghi điều khiển 8279
    MOV A, #10H             ; Thiết lập chế độ bàn phím & hiển thị
    MOVX @DPTR, A
    MOV A, #34H             ; Cài đặt hệ số chia xung đồng hồ nội cho 8279
    MOVX @DPTR, A
    MOV A, #0CH             ; Cấu hình chế độ xóa màn hình hiển thị
    MOVX @DPTR, A
    MOV A, #90H             ; Cho phép ghi dữ liệu RAM hiển thị
    MOVX @DPTR, A
    MOV A, #40H             ; Thiết lập cổng đọc FIFO bàn phím
    MOVX @DPTR, A
    
    MOV DPTR, #6003H        ; Trỏ thanh ghi điều khiển 8255
    MOV A, #80H             ; Cấu hình tất cả các Port A, B, C là ngõ ra (Output)
    MOVX @DPTR, A
    
    MOV IE, #0FFH           ; Cho phép toàn bộ hệ thống ngắt (Interrupt Enable)
    SETB IT0                ; Ngắt ngoài 0 tác động theo sườn âm
L1: 
    LCALL DISPLAY           ; Gọi chương trình con làm mới hiển thị LED
    LCALL KEYBOARD          ; Gọi chương trình con quét tìm phím ấn
    MOV R0, A
    ANL A, #10H             ; Kiểm tra phím chức năng hay phím số Hex
    JNZ L2                  ; Nếu là phím chức năng thì rẽ nhánh xử lý
    LCALL CONVER            ; Dịch chuyển dữ liệu số vào ô nhớ đệm 32H-33H
    LCALL DCHI              ; Dịch chuyển dữ liệu vào 8 ô nhớ hiển thị
    LJMP L1
L2: 
    LCALL PROCESS           ; Khối xử lý các phím chức năng ($, +, -, P, G, R)
SKIP: 
    SJMP SKIP

2. Thuật toán thực thi chương trình người dùng bằng phím 'G' (Go)

Để thực hiện chuyển giao quyền điều khiển từ chương trình Monitor trong EPROM sang chương trình người dùng đã nạp trong SRAM, vi điều khiển tự động tạo một đoạn mã nhảy trung gian tại cuối bộ nhớ (5FF0H - 5FF4H):

ORG 2300H
KEY_GO:
    MOV DPTR, #5FF2H        ; Ghi mã lệnh LJMP (Opcode = 02H) vào ô nhớ 5FF2H
    MOV A, #02H
    MOVX @DPTR, A
    
    MOV DPTR, #5FF0H        ; Nạp byte thấp của địa chỉ đích từ ô nhớ 34H
    MOV A, 34H
    MOVX @DPTR, A
    
    MOV DPTR, #5FF1H        ; Nạp byte cao của địa chỉ đích từ ô nhớ 35H
    MOV A, 35H
    MOVX @DPTR, A
    
    MOV DPTR, #5FF1H        ; Đọc và chuyển byte cao vào tham số lệnh nhảy
    MOVX A, @DPTR
    MOV DPTR, #5FF3H
    MOVX @DPTR, A
    
    MOV DPTR, #5FF0H        ; Đọc và chuyển byte thấp vào tham số lệnh nhảy
    MOVX A, @DPTR
    MOV DPTR, #5FF4H
    MOVX @DPTR, A
    
    LJMP 5FF2H              ; Thực hiện nhảy tới 5FF2H để kích hoạt mã ứng dụng

3. Phần mềm truyền file qua cổng COM máy tính (Turbo Pascal 7.0)

Chương trình trực tiếp truy xuất các thanh ghi phần cứng của cổng COM1 ($3F8 - Base Address) trên bo mạch chủ PC:

Program Transmit_To_8952;
uses Crt;
const
  BKSPC = #8;
  ENTER = #13;
  SPACE = #32;
  LMARGIN = #10;
type
  buffer = array[1..4096] of byte;
var
  nameHEX: string;
  data_byte, x1, x2: byte;
  i, byteread, sobyte: integer;
  fbuff: buffer;
  f: file;
begin
  ClrScr;
  Write('Nhap ten file Hex can truyen: '); Readln(nameHEX);
  Assign(f, nameHEX);
  Reset(f, 1);
  sobyte := FileSize(f);
  Writeln('Tong so Byte can truyen: ', sobyte);
  
  { Khoi tao thong so cong COM1 tai dia chi co so $3F8 }
  Port[$3F8 + $03] := $80; { Bat bit DLAB de cai dat toc do Baud }
  Port[$3F8 + $00] := $0C; { Divisor Latch Low Byte: Thiet lap 9600 bps }
  Port[$3F8 + $01] := $00; { Divisor Latch High Byte }
  Port[$3F8 + $03] := $03; { 8 Data bits, 1 Stop bit, No Parity }
  
  BlockRead(f, fbuff, SizeOf(fbuff), byteread);
  x1 := sobyte DIV 256;    { Tach byte cao cua kich thuoc file }
  x2 := sobyte MOD 256;    { Tach byte thap cua kich thuoc file }
  
  { Cho thanh ghi dem phat trong (Line Status Register Bit 5) }
  repeat
    data_byte := Port[$3F8 + $05];
  until (data_byte and $20) = $20;
  Port[$3F8] := x1;        { Truyen byte cao kich thuoc }
  
  repeat
    data_byte := Port[$3F8 + $05];
  until (data_byte and $20) = $20;
  Port[$3F8] := x2;        { Truyen byte thap kich thuoc }
  
  { Vong lap truyen toan bo noi dung tap tin }
  for i := 1 to sobyte do
  begin
    repeat
      data_byte := Port[$3F8 + $05];
    until (data_byte and $20) = $20;
    
    { Loc bo cac ky tu dieu khien khong can thiet }
    if (fbuff[i] <> Ord(BKSPC)) and (fbuff[i] <> Ord(ENTER)) and 
       (fbuff[i] <> Ord(SPACE)) and (fbuff[i] <> Ord(LMARGIN)) then
      Port[$3F8] := fbuff[i];
  end;
  
  Close(f);
  Writeln('--> TRANSMIT COMPLETED SUCCESSFULLY!');
end.

Kiểm nghiệm và kết quả đo đạc (Testing & Validation)

pie title Tỷ lệ phân bổ tính năng hoàn thiện
    "Khối xử lý & Bộ nhớ EPROM/RAM" : 35
    "Khối giao tiếp Bàn phím / LED 8279" : 25
    "Khối truyền thông PC RS-232" : 25
    "Khối mở rộng PPI 8255" : 15
  • Kiểm thử bus truyền thông RS-232: Kiểm tra truyền nhận khối dữ liệu $4\text{ KB}$ liên tục ở tốc độ $9600\text{ Baud}$ qua cáp nối tiếp $15\text{ m}$. Kết quả: $100%$ gói dữ liệu toàn vẹn, không có lỗi tràn bộ đệm nhờ cơ chế kiểm tra cờ bận $LSR$ trên PC và cờ ngắt $RI$ trên AT89C52.
  • Kiểm thử hiển thị và quét phím: Thời gian quét chu kỳ 8 LED đạt $1.2\text{ ms}$ (tương đương tần số làm tươi $\approx 833\text{ Hz}$), vượt xa ngưỡng cảm nhận của mắt người ($24\text{ Hz}$), độ sáng đồng đều trên toàn bộ 8 LED 7 đoạn.
  • Mức độ hoàn thiện tính năng:
Mục tiêu đề ra Kết quả thực tế đạt được Đánh giá kỹ thuật
Thiết kế Kit hoạt động độc lập Hoàn thành $100%$ với phím bấm và LED 7 đoạn Đạt chuẩn, hiển thị rõ ràng mã địa chỉ/dữ liệu
Mở rộng 8KB RAM / 8KB EPROM Phân giải địa chỉ chuẩn xác qua 74LS138 Không xảy ra hiện tượng xung đột Bus (Bus Contention)
Nhận dữ liệu trực tiếp từ PC Nạp file Hex vào đúng vùng địa chỉ 4000H Rút ngắn thời gian thử nghiệm từ 20 phút xuống 4 giây
Thực thi mã tại chỗ bằng phím 'G' Nhảy chính xác tới ô nhớ yêu cầu Hệ thống hoạt động trơn tru không bị treo CPU

Đổi mới và đóng góp

Các cải tiến kỹ thuật đột phá

  1. Kiến trúc tải chương trình và thực thi trên RAM (In-System RAM Execution): Thay vì phải xóa/nạp ROM vật lý, giải pháp cho phép biến đổi linh hoạt không gian nhớ dữ liệu ngoài (4000H5FFFH) của SRAM 6264 thành không gian thực thi mã lệnh bằng việc kết hợp tín hiệu đọc dữ liệu bộ nhớ ngoài $\overline{RD}$ và tín hiệu cho phép bộ nhớ chương trình $\overline{PSEN}$ thông qua cổng logic.
  2. Kỹ thuật phần mềm chuyển quyền điều khiển động: Sử dụng kỹ thuật tự sinh mã lệnh nhảy dài (LJMP - 02H) tại vùng nhớ cuối của RAM (5FF2H), cho phép hệ điều hành Monitor trao quyền điều khiển cho chương trình người dùng mà không làm hỏng cấu trúc con trỏ ngăn xếp (Stack Pointer).
  3. Phần cứng giải phóng CPU tối đa nhờ 8279: Việc đưa IC điều khiển chuyên dụng 8279 vào kiến trúc giúp CPU AT89C52 giải phóng $100%$ chu kỳ máy dành cho việc quét hiển thị và lọc rung phím cơ học, nâng cao hiệu năng xử lý tác vụ tính toán và truyền thông nối tiếp.

So sánh với các giải pháp hiện hành trên thị trường

Tiêu chuẩn kỹ thuật Bộ nạp EPROM UV Truyền thống Kit Huấn luyện Vi xử lý 8088/8086 Kit Vi điều khiển AT89C52 (Đề tài)
Thời gian nạp/chạy 1 chu kỳ $15 - 20\text{ phút}$ (Chiếu tia cực tím + nạp lại) $1 - 2\text{ phút}$ (Mã nguồn cồng kềnh) $3 - 5\text{ giây}$ (Tải trực tiếp qua RS-232)
Khả năng Debug tại chỗ Không có (Phải cắm vào bo mạch đích) Có (Màn hình CRT hoặc LED ma trận lớn) Có (8 LED 7 đoạn + 24 phím bấm chuyên dụng)
Giá thành phần cứng Đắt đỏ (Máy nạp ROM chuyên dụng) Rất cao (Bo mạch phức tạp nhiều lớp) Rất thấp (Linh kiện thương mại sẵn có)
Tính cơ động Cồng kềnh, cần nguồn điện áp cao ($12.5\text{V} - 21\text{V}$) Kích thước lớn, tiêu thụ nhiều điện năng Nhỏ gọn, chỉ dùng nguồn đơn $+5\text{V}$ và cổng COM

Ứng dụng thực tế và triển khai

Tình huống ứng dụng thực tế (Real-World Use Cases)

  • Phòng thí nghiệm Kỹ thuật Vi xử lý tại các trường Đại học: Phục vụ sinh viên thực hành lập trình hợp ngữ 8051, kiểm tra trực tiếp các giải thuật điều khiển logic, giải thuật quét phím, hiển thị LED mà không cần trang bị máy nạp chip cho từng bàn thí nghiệm.
  • Hệ thống điều khiển nhúng trong công nghiệp: Ứng dụng làm bộ điều khiển trung tâm trong các dây chuyền phân loại sản phẩm, giám sát trạng thái cảm biến qua cổng PPI 8255 và hiển thị giá trị đo đạc trên LED 7 đoạn.
  • Thiết bị hiển thị và đo lường từ xa: Nhận lệnh điều khiển và dữ liệu từ máy tính trung tâm qua khoảng cách $20\text{ m}$ để xuất tín hiệu đóng/mở rơ-le hoặc van điện từ trong tự động hóa tòa nhà.
gantt
    title Lộ trình Triển khai và Nâng cấp Hệ thống Kit 8952
    dateFormat  YYYY-MM
    section Giai đoạn 1: Chuẩn hóa Phần cứng
    Thiết kế PCB 2 lớp chuẩn công nghiệp       :done, 2000-01, 2000-03
    Tích hợp mạch bảo vệ nguồn & chống nhiễu   :done, 2000-03, 2000-04
    section Giai đoạn 2: Phát triển Phần mềm
    Xây dựng Monitor v2.0 hỗ trợ Step-by-Step :active, 2000-05, 2000-07
    Phát triển GUI Windows (Visual Basic 6.0) : 2000-07, 2000-09
    section Giai đoạn 3: Mở rộng Ngoại vi
    Phát triển module ghép nối cảm biến ADC/DAC: 2000-10, 2000-12

Phân tích hiệu quả kinh tế (Cost-Benefit Analysis)

  • Chi phí sản xuất bo mạch: Tổng chi phí linh kiện (AT89C52, 2764, 6264, 8279, 8255, MAX232, LED, PCB) ước tính khoảng $250.000 - 300.000\text{ VNĐ}$ (thời giá năm 2000), chỉ bằng $15 - 20%$ giá thành của một bộ Kit nhập khẩu từ nước ngoài.
  • Thời gian hoàn vốn (ROI): Trong môi trường giáo dục đào tạo, việc giảm tỷ lệ hỏng chân IC EPROM do tháo lắp liên tục và rút ngắn $90%$ thời gian làm bài thực hành giúp nâng cao hiệu suất phòng thí nghiệm gấp 3 lần ngay trong học kỳ đầu tiên triển khai.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  1. Phụ thuộc cổng COM chuẩn cũ: Cổng nối tiếp RS-232 (DB9) đang dần bị thay thế trên các dòng máy tính cá nhân đời mới bởi chuẩn USB (Universal Serial Bus).
  2. Dung lượng bộ nhớ RAM giới hạn: Không gian nhớ SRAM $8\text{ Kbyte}$ tuy đủ cho các bài toán điều khiển cơ bản nhưng hạn chế đối với các thuật toán xử lý dữ liệu phức tạp hoặc các hệ điều hành thời gian thực (RTOS).
  3. Môi trường phần mềm máy tính: Giao diện điều khiển viết trên nền tảng MS-DOS Turbo Pascal 7.0 gây khó khăn khi vận hành trên các hệ điều hành đồ họa đa nhiệm như Windows NT/2000/XP.

Hướng phát triển trong tương lai

  • Nâng cấp giao tiếp USB-to-UART: Tích hợp các dòng IC cầu chuyển đổi như FT232R hoặc CH340 để nạp chương trình trực tiếp qua cổng USB máy tính.
  • Mở rộng màn hình hiển thị LCD: Thay thế hoặc bổ sung màn hình ký tự LCD 16x2 / 20x4 hoặc LCD đồ họa bên cạnh 8 LED 7 đoạn để hiển thị thông số chi tiết hơn.
  • Phát triển phần mềm nạp mã trên nền Windows/Web: Viết lại trình nạp mã máy tính bằng C#/Python với giao diện trực quan, tự động biên dịch và nạp file .hex chỉ bằng một cú nhấp chuột.
  • Bổ sung tính năng Debugger phần cứng (In-Circuit Emulator): Phát triển tính năng thực thi từng bước (Single-Step Execution) và đặt điểm dừng (Breakpoint) thông qua việc quản lý ngắt ngoài INT0.

Đối tượng hưởng lợi

Nhóm đối tượng Lợi ích cụ thể nhận được Giá trị định lượng
Sinh viên ngành Điện - Điện tử Trực quan hóa cấu trúc vi điều khiển, tự tay nạp và gỡ lỗi mã nguồn Assembly, không sợ hỏng vi mạch Rút ngắn $75%$ thời gian làm quen phần cứng nhúng
Kỹ sư phát triển hệ thống Có sẵn một nền tảng phần cứng chuẩn để thử nghiệm nhanh các thuật toán điều khiển công nghiệp Giảm $60%$ thời gian thiết kế mẫu thử ban đầu
Cơ sở đào tạo / Đại học Tiết kiệm ngân sách đầu tư trang thiết bị thực hành, nâng cao chất lượng đào tạo kỹ sư Tiết kiệm hàng chục triệu đồng chi phí mua máy nạp và kit ngoại
Nhà nghiên cứu học thuật Cung cấp tài liệu tham khảo chi tiết về thiết kế bus đa hợp, ghép nối bộ nhớ và vi mạch chuyên dụng Nền tảng mở rộng cho các nghiên cứu ghép nối phức tạp hơn

Câu hỏi thường gặp

1. Yêu cầu cấu hình máy tính để kết nối và nạp chương trình cho Kit là gì?

Máy tính chỉ cần trang bị cổng nối tiếp chuẩn RS-232 (COM1 hoặc COM2), chạy hệ điều hành MS-DOS hoặc Windows 95/98/2000 hỗ trợ môi trường dòng lệnh để thực thi phần mềm Turbo Pascal. Trong trường hợp sử dụng máy tính xách tay hiện đại không có cổng DB9, có thể sử dụng cáp chuyển đổi USB sang RS-232 tiêu chuẩn.

2. Làm thế nào để giải quyết hiện tượng xung đột Bus dữ liệu giữa các IC trong mạch?

Hệ thống sử dụng IC giải mã địa chỉ $74\text{LS}138$ để phân định không gian nhớ rõ ràng thông qua 3 đường địa chỉ cao $A_{13}, A_{14}, A_{15}$. Tại một thời điểm, chỉ duy nhất một tín hiệu chọn chip ($\overline{CS}$) của một thiết bị được tích cực ở mức thấp ($0\text{V}$). Các thiết bị còn lại giữ ngõ ra dữ liệu ở trạng thái tổng trở cao (High-Z), ngăn ngừa hoàn toàn xung đột bus.

3. Tại sao chương trình Monitor lại được lưu trong EPROM 2764 thay vì lưu trực tiếp trong Flash của AT89C52?

Việc phân chia chương trình Monitor vào EPROM 2764 độc lập nhằm mục đích chuẩn hóa cấu trúc hệ thống mô-đun huấn luyện. Bộ nhớ Flash $8\text{ KB}$ nội của AT89C52 có thể được bảo vệ bằng các bit khóa mã (Lock Bits LB1, LB2, LB3), trong khi EPROM ngoài đóng vai trò như một ROM BIOS độc lập, giúp việc nâng cấp các phiên bản Monitor sau này không cần nạp lại chip điều khiển chính.

4. Nếu truyền file Hex có dung lượng lớn hơn 8 Kbyte thì hệ thống xử lý như thế nào?

Không gian bộ nhớ SRAM $6264$ được cấp phát cố định từ địa chỉ 4000H đến 5FFFH ($8192\text{ Bytes}$). Phần mềm truyền dẫn trên PC kiểm tra độ dài tệp trước khi gửi; nếu tập tin vượt quá kích thước này, phần mềm máy tính sẽ cảnh báo vượt ngưỡng bộ nhớ nhằm tránh hiện tượng tràn địa chỉ ghi đè lên các vùng nhớ của thiết bị ngoại vi.

5. Chi phí bảo trì và độ bền của bo mạch như thế nào?

Toàn bộ các vi mạch chính (AT89C52, 2764, 6264, 8279, 8255, MAX232) đều được cắm trên đế cắm chuyên dụng (DIP Sockets), không hàn trực tiếp lên bo mạch. Khi xảy ra sự cố quá áp hoặc hỏng hóc linh kiện, kỹ thuật viên có thể thay thế IC mới chỉ trong vài giây với chi phí linh kiện rất rẻ và sẵn có trên thị trường.


Kết luận

Đồ án tốt nghiệp "Thiết kế Kit Vi điều khiển 8952 Giao tiếp với Máy tính" do sinh viên Bùi Thế Vinh thực hiện dưới sự hướng dẫn của thầy Quách Thanh Hải tại Trường Đại học Sư phạm Kỹ thuật TP.HCM là một công trình nghiên cứu ứng dụng mang tính thực tiễn cao. Đề tài đã giải quyết triệt để bài toán đồng bộ hóa giữa phần cứng nhúng và phần mềm điều khiển máy tính, xóa bỏ quy trình tháo lắp nạp chip thủ công tốn kém thời gian bằng phương thức nạp trực tiếp qua cổng COM RS-232.

Những đóng góp kỹ thuật cốt lõi của đề tài bao gồm: thiết kế hoàn chỉnh hệ thống ghép nối bus vi điều khiển đa hợp, tối ưu hóa phần cứng bằng vi mạch chuyên dụng 8279, phân bổ bản đồ bộ nhớ khoa học và phát triển thành công phần mềm nhúng Monitor đa nhiệm. Đây là tài liệu kỹ thuật và mô hình thực hành nền tảng có giá trị cao cho công tác giảng dạy, học tập và phát triển các hệ thống nhúng điều khiển tự động hóa.