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

Trong kỹ thuật điện tử và tự động hóa, vi điều khiển và vi xử lý đóng vai trò trung tâm trong cấu trúc vận hành của hầu hết các thiết bị điện dân dụng hiện đại (như đầu đĩa CD, máy thu hình, máy ghi hình, dàn âm thanh HiFi, bộ điều khiển lò sưởi) cũng như các hệ thống điều khiển công nghiệp, thiết bị y tế, năng lượng, giao thông và nghiên cứu khoa học. Việc ứng dụng vi điều khiển trong thiết kế hệ sinh thái phần cứng giúp giảm thiểu chi phí thiết kế, hạ giá thành sản phẩm, đồng thời nâng cao độ ổn định và độ tin cậy của toàn bộ hệ thống.

Thị trường vi điều khiển thời kỳ này cung cấp đa dạng các kiến trúc từ nhiều nhà sản xuất: họ MSC-51 của Intel, 68HC11 của Motorola, Z80 của Zilog, PIC của Microchip, H8 của Hitachi. Việc phát triển các hệ vi xử lý đòi hỏi sự kết hợp chặt chẽ giữa thiết kế phần cứng và kỹ thuật lập trình phần mềm. Nhằm thay thế phương pháp lập trình thuần bằng hợp ngữ (Assembly) vốn đòi hỏi nhiều thời gian phát triển và khó quản lý các cấu trúc dữ liệu phức tạp, việc tiếp cận các ngôn ngữ bậc cao như C, C++ hoặc Visual Basic là giải pháp kỹ thuật cần thiết để nâng cao chất lượng mã nguồn và rút ngắn thời gian thử nghiệm.

Đồ án tốt nghiệp "Lập trình C cho họ vi điều khiển 8051" do sinh viên Lê Văn Long và Đặng Đức Trung thực hiện (Khoa Công nghệ Điện tử, Trường Đại học Công nghiệp TP. Hồ Chí Minh, tháng 8/2007, dưới sự hướng dẫn của ThS. Huỳnh Minh Ngọc) được triển khai nhằm giải quyết các nhiệm vụ nghiên cứu cụ thể:

  1. Sơ lược kiến trúc và đặc tính phần cứng vi điều khiển AT89C51.
  2. Khảo sát toàn diện vi điều khiển AT89C2051 của hãng Atmel (sơ đồ chân linh kiện, sơ đồ khối, bản đồ thanh ghi chức năng đặc biệt SFR, các giới hạn lệnh và quy trình lập trình Flash).
  3. Khảo sát cấu trúc và công cụ phát triển của môi trường phát triển tích hợp Keil Software µVision 2.
  4. Nghiên cứu chu trình biên dịch, liên kết, mô phỏng và gỡ lỗi mã nguồn C cho vi điều khiển họ 8051 qua các dự án mẫu tiêu biểu.
  5. Định hướng ứng dụng ngôn ngữ C và Assembly trong các bài toán điều khiển hiển thị LED (LED đơn, LED 7 đoạn, LED ma trận).

Đối tượng nghiên cứu trọng tâm của đề tài là vi điều khiển 8-bit họ MCS-51 (tập trung vào hai dòng vi mạch AT89C2051 và AT89C51) cùng bộ công cụ lập trình C chuyên dụng Keil C51 Compiler và môi trường mô phỏng µVision 2.


Cơ sở lý thuyết và phương pháp

Khung lý thuyết của đồ án dựa trên kiến trúc phần cứng vi điều khiển 8-bit MCS-51 chuẩn công nghiệp, tập lệnh 8051 và các mở rộng kiến trúc bộ nhớ Flash của hãng Atmel. Về mặt phần mềm, đề tài dựa trên chuẩn ANSI C mở rộng dành cho hệ thống nhúng thông qua trình biên dịch Keil C51, bộ hợp ngữ A51/Ax51, bộ liên kết/định vị mã nguồn BL51/LX51, và hệ điều hành thời gian thực RTX51 Tiny.

Phương pháp nghiên cứu trong đồ án bao gồm:

  • Phương pháp phân tích - tổng hợp kỹ thuật phần cứng: Trích xuất, phân tích sơ đồ khối vi kiến trúc, sơ đồ bố trí chân, đặc tính điện học, các chế độ định thời và giới hạn vật lý của chip AT89C2051 và AT89C51.
  • Phương pháp khảo sát quy trình phát triển phần mềm nhúng: Khảo sát chu trình quản lý dự án (Project Management), biên dịch mã nguồn C sang mã đối tượng, liên kết định vị bộ nhớ, tạo tập tin định dạng HEX (OHx51) và nạp vào ROM Flash.
  • Phương pháp mô phỏng và phân tích kiểm thử (Simulation & Debugging): Sử dụng trình gỡ lỗi µVision Simulator để kiểm tra logic hoạt động của chương trình mà không bắt buộc có phần cứng vật lý; thiết lập điểm dừng (Breakpoints), kiểm tra thanh ghi, bộ nhớ, ngăn xếp (Call Stack) và cổng nối tiếp (Serial Window).
  • Phương pháp kích thích tín hiệu ảo (Signal Functions & VTREGs): Áp dụng các hàm tín hiệu viết bằng ngôn ngữ kịch bản để tạo dạng sóng điện áp (răng cưa, sóng sin, nhiễu) tác động vào các chân chuyển đổi tương tự - số (A/D) của vi điều khiển.

Nguồn dữ liệu kỹ thuật sử dụng trong đồ án xuất phát từ tài liệu kỹ thuật vi điều khiển của hãng Atmel, tài liệu hướng dẫn kỹ thuật của bộ công cụ Keil Software µVision 2, cùng các tập tin mã nguồn mẫu được cung cấp sẵn trong gói cài đặt C51.


Nội dung chính theo từng chương

Chương 1: Giới thiệu bộ vi điều khiển 89C2051 và 89C51

Chương 1 trình bày chi tiết về cấu trúc phần cứng, sơ đồ khối, chức năng các chân, đặc tính điện và quy trình lập trình bộ nhớ Flash của hai dòng vi điều khiển AT89C2051 và AT89C51.

1. Khảo sát vi điều khiển AT89C2051

Chip AT89C2051 là vi điều khiển CMOS 8-bit hiệu suất cao, điện áp thấp của Atmel, tương thích tập lệnh MCS-51:

  • Bộ nhớ chương trình Flash PEROM dung lượng 2K byte với độ bền 1.000 chu kỳ ghi/xóa.
  • Bộ nhớ dữ liệu RAM nội 128 byte (128 x 8 bit).
  • Tầm điện áp hoạt động rộng từ 2,7V đến 6,0V; tần số xung clock hoạt động từ 0 Hz đến 21 MHz (hoặc lên đến 24 MHz ở điện áp 5V).
  • 15 đường vào/ra (I/O) lập trình được; 2 bộ định thời/đếm (Timer/Counter) 16-bit.
  • Kênh truyền thông nối tiếp UART hoàn toàn song công (Full-duplex); cấu trúc ngắt 2 mức với 5 vector ngắt.
  • Tích hợp sẵn mạch so sánh tương tự chính xác (On-chip analog comparator) với ngõ vào dương AIN0 (P1.0) và ngõ vào âm AIN1 (P1.1), ngõ ra kết nối cứng tại chân P3.6.
  • Các mạch đệm cổng Port 1 và Port 3 có khả năng hút dòng 20mA, cho phép kích trực tiếp các bộ hiển thị LED.
  • Hai chế độ tiết kiệm năng lượng: Chế độ nghỉ (Idle Mode - dừng CPU nhưng vẫn duy trì hoạt động của RAM, Timer, UART, hệ thống ngắt) và Chế độ giảm công suất (Power-Down Mode - dừng mạch dao động, chỉ duy trì nội dung RAM cho đến lần reset cứng tiếp theo).

Về mặt sơ đồ khối, chip tích hợp các khối: ALU, thanh ghi tích lũy ACC, thanh ghi B, con trỏ ngăn xếp SP, con trỏ dữ liệu DPTR, từ trạng thái chương trình PSW, bộ đếm chương trình PC, các mạch chốt và mạch kích Port 1, Port 3.

+-----------------------------------------------------------------------------------+
| Bản đồ và giới hạn tập lệnh AT89C2051:                                           |
| - Bộ nhớ Flash 2KB (000H - 7FFH): Các lệnh rẽ nhánh và nhảy (LJMP, LCALL, AJMP,    |
|   ACALL, SJMP, CJNE, JB, JNB, JC, JNC, JBC, JZ, JNZ) bắt buộc phải có địa chỉ     |
|   đích nằm trong phạm vi 000H - 7FFH (ví dụ: LJMP 7E0H hợp lệ; LJMP 900H lỗi).    |
| - RAM nội 128 byte: Độ sâu ngăn xếp (Stack) bị giới hạn tối đa 128 byte.          |
| - Không hỗ trợ bộ nhớ ngoài: Hoàn toàn không sử dụng lệnh truy xuất MOVX.         |
+-----------------------------------------------------------------------------------+

Chế độ bảo vệ bộ nhớ gồm 2 bit khóa (LB1, LB2) với các trạng thái:

Chế độ LB1 LB2 Tính chất bảo vệ
Mức 1 U U Không khóa chương trình, cho phép đọc và lập trình thêm.
Mức 2 P U Cấm lập trình thêm vào bộ nhớ Flash.
Mức 3 P P Cấm lập trình thêm và cấm thao tác đọc kiểm tra (Verify).

(Ghi chú: U = Chưa lập trình/Unprogrammed; P = Đã lập trình/Programmed. Xóa bit khóa bằng thao tác Chip Erase).

Quy trình lập trình Flash cho AT89C2051 sử dụng điện áp lập trình $V_{PP} = 12\text{V}$, dòng $I_{PP} = 250,\mu\text{A}$. Bộ đếm địa chỉ PEROM nội bộ tự động tăng sau mỗi xung dương đưa vào chân XTAL1. Thao tác xóa toàn bộ chip (Chip Erase) yêu cầu đưa xung tích cực mức thấp kéo dài $10\text{ms}$ vào chân P3.2. Mã chữ ký nhận dạng nhà sản xuất tại địa chỉ 000H trả về giá trị 1EH (Atmel).

Thông số định thời lập trình Flash Ký hiệu Giá trị tối thiểu Giá trị tối đa Đơn vị
Thời gian giữ dữ liệu sau xung PROG $t_{GHDX}$ 1,0 - $\mu\text{s}$
Độ rộng xung lập trình PROG $t_{GLGH}$ 1 110 $\mu\text{s}$
Thời gian chu kỳ ghi một byte $t_{WC}$ - 1,0 $\text{ms}$
Trì hoãn từ RDY/BSY đến xung clock tăng $t_{BHIH}$ 0 - $\mu\text{s}$

2. Khảo sát vi điều khiển AT89C51

Vi điều khiển AT89C51 thuộc họ MSC-51 chuẩn, có các đặc tính:

  • Bộ nhớ chương trình EEPROM/Flash nội dung lượng 4K byte.
  • Khả năng mở rộng bộ nhớ chương trình ngoài lên tới 64K byte và bộ nhớ dữ liệu ngoài lên tới 64K byte.
  • 2 bộ định thời Timer 16-bit; 210 bit được địa chỉ hóa; bộ nhân/chia thực hiện trong $4,\mu\text{s}$.
  • Cấu trúc 4 cổng I/O 8-bit (Port 0 trên các chân 32-39 không tích hợp sẵn điện trở kéo dương; Port 1 trên các chân 1-8; Port 2 trên các chân 21-28; Port 3 trên các chân 10-17 tích hợp nhiều chức năng giao tiếp nối tiếp, ngắt ngoài, tín hiệu ghi/đọc bộ nhớ).
  • Chân điều khiển $\overline{\text{EA}}$ (chân 31): Đặt ở mức cao ($+5\text{V}$) để thực thi chương trình trong ROM nội (từ $0000\text{H}$ đến $0\text{FFFH}$); đặt ở mức thấp ($\text{GND}$) để thực thi hoàn toàn từ ROM mở rộng bên ngoài (tối đa 64KB); đồng thời nhận điện áp 12V khi nạp EEPROM.
  • Chân $\overline{\text{PSEN}}$ (chân 29 - Program Store Enable): Tín hiệu điều khiển cho phép đọc mã lệnh từ bộ nhớ EPROM/ROM mở rộng bên ngoài nối đến chân $\overline{\text{OE}}$.

Chương 2: Giới thiệu chung về phần mềm Keil Software

Chương 2 giới thiệu cấu trúc các mô-đun phần mềm trong bộ công cụ Keil C51 và hướng dẫn chi tiết quy trình phát triển, biên dịch, mô phỏng và kiểm thử mã nguồn trên môi trường µVision 2.

1. Hệ thống công cụ Keil C51

Bộ công cụ Keil Software 8051 bao gồm các thành phần:

  • µVision IDE: Môi trường phát triển tích hợp quản lý dự án, soạn thảo mã nguồn và liên kết trình gỡ lỗi.
  • Cx51 Compiler: Trình biên dịch C chuẩn ANSI tối ưu hóa cho kiến trúc 8051, tạo các đoạn mã đối tượng tái định vị.
  • Ax51 Macro Assembler: Trình biên dịch hợp ngữ cho tập lệnh 8051.
  • BL51 Linker/Locator: Bộ kết nối và định vị các mô-đun đối tượng từ C51, A51 và các tệp thư viện để tạo tệp đối tượng tuyệt đối ELF/DWARF.
  • LX51 Extended Linker: Bộ kết nối mở rộng hỗ trợ phân trang bộ nhớ (Code Banking, Far Memory) trong gói chuyên nghiệp PK51.
  • LIBx51: Trình quản lý thư viện mã nguồn.
  • OHx51: Bộ chuyển đổi từ tệp đối tượng sang tệp mã máy Intel HEX để nạp vào ROM Flash.
  • RTX51 Tiny: Hệ điều hành thời gian thực đa nhiệm cỡ nhỏ dành cho các ứng dụng nhúng có cấu trúc phức tạp.

2. Chu trình phát triển phần mềm trong µVision

Chu trình phát triển chuẩn gồm:

  1. Tạo dự án mới qua Project -> New Project, đặt tên dự án (ví dụ PROJECT1.UV2).
  2. Chọn vi điều khiển mục tiêu từ cơ sở dữ liệu Device Database (như Philips 80C51RD+, Philips P89LPC935...).
  3. Cấu hình và chèn mã khởi động CPU STARTUP.A51 (thực hiện xóa vùng nhớ dữ liệu, khởi tạo con trỏ ngăn xếp và cấu hình bộ nhớ on-chip XRAM).
  4. Thiết lập tùy chọn phần cứng mục tiêu (Options for Target): Thiết lập tần số thạch anh (Xtal), chọn mô hình bộ nhớ (Memory Model: Small, Compact, Large), quản lý vùng nhớ ngoài (XData).
  5. Soạn thảo tệp mã nguồn C (.c) hoặc Assembly (.a51), thêm vào nhóm quản lý trong Project Workspace.
  6. Biên dịch và liên kết bằng lệnh Build Target hoặc Rebuild Target, kiểm tra thông báo lỗi cú pháp và cảnh báo.
  7. Đánh dấu tùy chọn tạo tệp HEX trong thẻ Output để tạo tệp nhị phân nạp chip.

3. Danh mục các dự án mẫu trong Keil C51

Các dự án mẫu trong thư mục C:\KEIL\C51\EXAMPLES\ minh họa các tính năng chuyên biệt của từng dòng vi điều khiển:

Tên thư mục / Dự án Mô tả chức năng
HELLO Chương trình C cơ bản xuất chuỗi văn bản "HELLO WORLD" qua cổng nối tiếp UART.
MEASURE Hệ thống đo lường và thu thập dữ liệu từ xa, ghi dữ liệu số và tương tự (A/D).
BLINKY Điều khiển chớp tắt LED trên bo mạch Keil MCBx51.
ASM Chương trình hợp ngữ xuất văn bản qua cổng nối tiếp.
Benchmarks Các chương trình kiểm thử hiệu năng kinh điển: Dhrystone, Whetstone, Sieve.
CodeBanking / FarMemory Kỹ thuật mở rộng không gian nhớ chương trình và dữ liệu vượt quá giới hạn 64KB.
CSAMPLE Ví dụ xây dựng chương trình đa mô-đun (cộng, trừ đơn giản).
Dallas 390 Ứng dụng chế độ định địa chỉ liên tục (Contiguous Addressing) trên chip Dallas DS80C390/400.
Philips LPC9xx / LPC95x Chương trình mẫu cho bo mạch Keil MCB900/MCB9xx sử dụng dòng vi điều khiển Philips.
TI MSC121x / MSC1200 Cấu hình và sử dụng hệ thống giải mã gỡ lỗi trên chip ISD51 In-System Debugger.

4. Khảo sát và vận hành ứng dụng HELLO

Dự án HELLO (tệp nguồn HELLO.C) dùng CPU 8051 chuẩn xuất chuỗi "HELLO WORLD" ra cổng nối tiếp. Quá trình vận hành mô phỏng trong µVision:

  • Mở tệp dự án HELLO.UV2, thực hiện lệnh Build Target.
  • Khởi động phiên gỡ lỗi bằng lệnh Start/Stop Debug Session (Ctrl+F5).
  • Mở cửa sổ cổng nối tiếp ảo qua View -> Serial Window #1.
  • Chạy toàn bộ chương trình bằng lệnh GO (F5), chuỗi "HELLO WORLD" xuất hiện trên màn hình và chuyển vào vòng lặp vô tận.
  • Kiểm soát luồng thực thi: Dùng lệnh Halt hoặc phím ESC để tạm dừng; dùng lệnh Insert/Remove Breakpoints (F9) đặt điểm dừng; chạy từng bước qua lệnh Step (F11), Step Into hoặc Step Out (Ctrl+F11); quan sát con trỏ lệnh màu vàng di chuyển qua từng dòng lệnh C hoặc mã Assembly trong cửa sổ Disassembly Window.

5. Khảo sát và vận hành hệ thống đo lường từ xa MEASURE

Chương trình MEASURE là ứng dụng thu thập dữ liệu tương tự và số chạy trên vi điều khiển Philips P89LPC935 (hoặc bo mạch Keil MCB900). Chương trình được tổ chức thành nhiều mô-đun mã nguồn:

  • Measure.c: Chứa hàm main() khởi tạo các ngoại vi trên chip P89LPC935, xử lý vòng lặp lệnh hệ thống và ngắt Timer 0 dùng cho đồng hồ thời gian thực.
  • Mcommand.c: Xử lý giải mã lệnh, hiển thị kết quả đo lường và định dạng tín hiệu điện áp từ 0,0V đến 5,0V.
  • Getline.c: Quản lý bộ đệm nhập dữ liệu ký tự từ cổng nối tiếp.

Tập lệnh điều khiển hệ thống qua giao diện nối tiếp mã ASCII gồm:

Lệnh Cấu trúc cú pháp Chức năng thực hiện
C clear Xóa toàn bộ dữ liệu đo lường đã lưu trữ trước đó trong RAM.
D display Hiển thị thời gian làm việc hiện tại và giá trị ngõ vào các kênh.
T time hh:mm:ss Cài đặt giá trị đồng hồ hệ thống theo định dạng 24 giờ.
I interval mm:ss.ttt Thiết lập chu kỳ lấy mẫu đo lường (từ $0:00.000$ đến 60 phút).
S start Khởi động quá trình tự động lấy mẫu tất cả tín hiệu ngõ vào theo chu kỳ đã định.
R read [count] Đọc và hiển thị các giá trị đo được (chỉ định số lượng mẫu hoặc đọc toàn bộ).
Q quit Dừng và thoát khỏi quá trình thu thập giá trị đo.

Quy trình gỡ lỗi nâng cao của MEASURE trên µVision hỗ trợ:

  • Mở cửa sổ Watch Window (Watch#1, Watch#2) để theo dõi và chỉnh sửa giá trị biến thời gian (current.sec), mảng và cấu trúc dữ liệu theo thời gian thực (nhấn F2 để gán giá trị).
  • Đặt điểm dừng phức tạp dạng điều kiện ghi (BreakPoint Write) kích hoạt khi biến current.sec == 3.
  • Bật tính năng ghi vết thực thi (Trace Recording) để kiểm tra các lệnh CPU đã chạy trước khi rơi vào điểm ngắt.
  • Cửa sổ hộp thoại ngoại vi (Peripherals -> I/O Ports -> Port2, Peripherals -> A/D Converter -> ADC0/DAC0) cho phép theo dõi thanh ghi chức năng đặc biệt SFR và trạng thái chân chip.
  • Sử dụng các thanh ghi mô phỏng ảo (Virtual Simulator Registers - VTREGs) trên dòng lệnh Command: ví dụ PORT2 = 0xDA gán dữ liệu số cổng 2; AD01 = 2.3 gán điện áp 2,3V cho ngõ vào tương tự A/D 1.
/* Kịch bản khởi tạo MEASURE.INI định nghĩa các hàm tín hiệu ảo */
FUNC void MyRegs (void) {
    printf ("---------- MyRegs() ----------\n");
    printf ("   R0   R1   R2   R3\n");
    printf ("  %02X  %02X  %02X  %02X\n", R0, R1, R2, R3);
    printf ("------------------------------\n");
}

// Tạo tín hiệu xung răng cưa trên ngõ vào tương tự AD01
signal void AD01_Saw (void) {
    float volts, frequency, offset, duration, delay, val;
    long i, end, steps;
    volts = 2.0;
    steps = 100;
    delay = (0.01 / frequency);
    end = (duration * 10000);
    for (i = 0; i < end; i++) {
        val = (i % steps) / ((float) steps);
        AD01 = (val * volts) + offset;
        swatch (delay);
    }
}

// Tạo tín hiệu sóng sin trên ngõ vào tương tự AD02
signal void AD02_Sine (void) {
    float volts, frequency, offset, duration, val;
    long i, end;
    volts = 1.0;
    // Tạo sóng sin theo hàm điều hòa tác động vào thanh ghi AD02
    AD02 = (val * volts) + offset;
    swatch (0.0001); // Bước nhảy thời gian 100 uSec
}

Thiết kế và triển khai

Hệ thống kỹ thuật được trình bày trong đồ án tập trung vào kiến trúc phần mềm nhúng phát triển trên nền tảng Keil C51 và quy trình tích hợp giữa phần mềm và phần cứng mô phỏng.

1. Kiến trúc chuỗi công cụ phát triển phần mềm

Kiến trúc phần mềm xây dựng theo mô hình phân lớp xử lý:

  • Tầng mã nguồn (Source Code Layer): Bao gồm các tệp C (.c), tệp hợp ngữ (.a51), và tệp tiền xử lý cấu hình khởi tạo vi điều khiển (STARTUP.A51).
  • Tầng biên dịch và tối ưu hóa (Compiler & Assembler Layer): Trình biên dịch C51 xử lý cú pháp ANSI C, tạo các tệp mã đối tượng có khả năng tái định vị địa chỉ (.obj), kết hợp cùng bộ hợp ngữ A51/Ax51.
  • Tầng liên kết và định vị bộ nhớ (Linker/Locator Layer): Trình liên kết BL51/LX51 thu thập các tệp đối tượng và các hàm từ thư viện LIB51, phân bổ không gian RAM (Data, IData, XData) và không gian ROM (Code), tạo tệp đối tượng tuyệt đối ELF/DWARF.
  • Tầng tạo mã thực thi (Binary Generation Layer): Tiện ích OHx51 trích xuất mã nhị phân tuyệt đối để tạo tệp HEX nạp trực tiếp vào bộ nhớ Flash của vi điều khiển.

2. Quy trình kiểm thử và mô phỏng trên môi trường ảo

Hệ thống kiểm thử được triển khai toàn diện trong môi trường mô phỏng µVision Simulator:

  • Khởi tạo phần cứng ảo tương ứng với cấu hình vi điều khiển lựa chọn từ cơ sở dữ liệu thiết bị (Philips P89LPC935, Intel 8051, Atmel AT89C51/2051).
  • Tích hợp tệp kịch bản mô phỏng ngoại vi MEASURE.INI trong cấu hình Options for Target -> Debug -> Initialization File.
  • Tạo luồng kích thích tín hiệu độc lập: Hàm tín hiệu AD01_Saw tạo sóng răng cưa biên độ $2,0\text{V}$; hàm AD02_Sine tạo sóng hình sin biên độ $1,0\text{V}$; kênh AD03 nhận tín hiệu nhiễu ngẫu nhiên.
  • Kiểm tra phản ứng ngắt của Timer 0, kiểm tra tính toàn vẹn của chu kỳ lấy mẫu thời gian thực (từ $1\text{ms}$ đến $60\text{phút}$) và độ chính xác của bộ chuyển đổi A/D thông qua các lệnh giao tiếp nối tiếp trên cửa sổ Serial Window #1.

Kết quả và đóng góp

Đồ án đã tổng hợp và xây dựng được các kết quả kỹ thuật cụ thể:

  1. Hệ thống hóa thông số kỹ thuật và bản đồ phần cứng của vi điều khiển AT89C2051 và AT89C51:
    • Cung cấp bảng tra cứu đầy đủ về cấu hình 15 chân I/O, bộ so sánh tương tự trên chip, 2 bộ định thời 16-bit, và các chế độ bảo vệ bằng bit khóa (LB1, LB2).
    • Xác định rõ ràng các giới hạn biên dịch và thực thi trên AT89C2051 (không gian Flash 2KB từ 00H đến 7FFH, độ sâu Stack tối đa 128 byte, loại trừ lệnh MOVX do không có bus mở rộng ngoài).
    • Làm rõ cấu trúc phân bổ chân, điện trở kéo cổng Port 0, và nguyên lý hoạt động của các tín hiệu điều khiển $\overline{\text{EA}}$ và $\overline{\text{PSEN}}$ trên AT89C51.
Tiêu chí kỹ thuật Vi điều khiển AT89C2051 Vi điều khiển AT89C51
Kiến trúc CPU 8-bit CMOS (MCS-51) 8-bit CMOS (MCS-51)
Bộ nhớ Flash nội 2K byte PEROM 4K byte EEPROM/Flash
Bộ nhớ RAM nội 128 byte 128 byte
Khả năng mở rộng bộ nhớ ngoài Không hỗ trợ 64KB ROM / 64KB RAM
Số chân I/O khả dụng 15 chân (Port 1: 8 chân, Port 3: 7 chân) 32 chân (Port 0, 1, 2, 3)
Bộ so sánh tương tự on-chip Có (AIN0/P1.0, AIN1/P1.1, Out/P3.6) Không tích hợp sẵn
Khả năng kích dòng ngõ ra Hút dòng 20mA (kích trực tiếp LED) Dòng chuẩn họ 8051
Bộ định thời / đếm 2 bộ Timer 16-bit 2 bộ Timer 16-bit
Điện áp nguồn hoạt động 2,7V đến 6,0V 5,0V $\pm 20%$
  1. Xây dựng tài liệu hướng dẫn quy trình phát triển và gỡ lỗi phần mềm nhúng bằng Keil C51:
    • Chuẩn hóa các bước thao tác từ khởi tạo dự án, cấu hình tệp STARTUP.A51, thiết lập tham số thạch anh và mô hình bộ nhớ đến xuất tệp HEX.
    • Hướng dẫn chi tiết phương pháp gỡ lỗi mô phỏng không cần phần cứng: kiểm soát điểm dừng điều kiện, phân tích biến trên Watch Window, kiểm tra ngăn xếp Call Stack, phân tích mã máy trên Disassembly Window.
    • Minh họa phương pháp kiểm thử hệ thống nhúng thông qua việc phân tích chuyên sâu hai dự án mẫu HELLO (giao tiếp nối tiếp cơ bản) và MEASURE (hệ thống điều khiển đo lường đa kênh với kịch bản kích thích tín hiệu tự động bằng tệp .INI).

Về mặt đóng góp học thuật và ứng dụng, đồ án đã hệ thống hóa phương pháp chuyển đổi từ kỹ thuật lập trình hợp ngữ truyền thống sang lập trình bằng ngôn ngữ C bậc cao trên họ vi điều khiển 8051, giúp tối ưu hóa thời gian phát triển và nâng cao tính module hóa của mã nguồn nhúng.


Hạn chế và hướng nghiên cứu tiếp

Căn cứ trên nội dung văn bản báo cáo, các hạn chế và hướng phát triển của đề tài được ghi nhận như sau:

  • Hạn chế của đề tài:

    • Nội dung văn bản tập trung phần lớn vào việc khảo sát lý thuyết phần cứng (AT89C2051, AT89C51) và hướng dẫn sử dụng bộ công cụ Keil Software µVision 2 thông qua hai chương trình mẫu (HELLO, MEASURE).
    • Mặc dù phần mục tiêu có đề cập đến nội dung ứng dụng ngôn ngữ C và Assembly điều khiển hiển thị LED (LED đơn, LED 7 đoạn, LED ma trận), văn bản tài liệu chưa trình bày chi tiết các sơ đồ nguyên lý mạch phần cứng thực tế và các khối mã nguồn ứng dụng cụ thể cho các mô-đun LED này.
    • Quá trình kiểm thử chủ yếu được tiến hành trên môi trường mô phỏng phần mềm (µVision Simulator), chưa trình bày kết quả đo đạc thực nghiệm trên phần cứng bo mạch thực tế.
  • Hướng nghiên cứu tiếp:

    • Triển khai xây dựng các mô-đun mã nguồn C hoàn chỉnh để điều khiển trực tiếp hệ thống hiển thị LED đơn, LED 7 đoạn quét nhiều kênh, và LED ma trận điểm.
    • Thiết kế và thi công mạch nạp Flash thực tế kết hợp bo mạch phát triển phần cứng (sử dụng chip AT89C51 hoặc AT89C2051) để nạp tệp HEX và kiểm chứng hoạt động thực nghiệm ngoài môi trường mô phỏng.
    • Ứng dụng hệ điều hành thời gian thực RTX51 Tiny vào các bài toán điều khiển công nghiệp đa nhiệm phức tạp trên nền vi điều khiển 8051.

Giá trị tham khảo

Tài liệu đồ án mang lại giá trị tham khảo kỹ thuật thiết thực cho:

  • Sinh viên ngành Công nghệ Điện tử, Kỹ thuật Vi xử lý, Cơ điện tử và Kỹ thuật Nhúng: Cung cấp tài liệu tra cứu nhanh về kiến trúc vi điều khiển AT89C2051, tập lệnh 8051, và cấu trúc các thanh ghi chức năng đặc biệt SFR.
  • Người học bắt đầu tiếp cận lập trình nhúng C cho họ vi điều khiển 8051: Nắm vững chu trình phát triển phần mềm chuẩn trên môi trường Keil Software µVision 2, từ khâu quản lý tệp dự án, cấu hình bộ nhớ đến xuất tệp HEX.
  • Kỹ sư và người nghiên cứu cần kiểm thử mô phỏng hệ thống: Phần hướng dẫn sử dụng các công cụ gỡ lỗi chuyên sâu (Disassembly, Watch Window, Call Stack) và kỹ thuật viết hàm tín hiệu ảo (Signal Functions) trong tệp kịch bản .INI của dự án MEASURE là tài liệu tham khảo giá trị để xây dựng các kịch bản kiểm thử phần mềm tự động mà không cần trang bị phần cứng đo lường đắt tiền.

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

1. Vi điều khiển AT89C2051 có những giới hạn phần cứng và tập lệnh nào mà người lập trình cần lưu ý?
Do AT89C2051 chỉ có 2K byte Flash PEROM (vùng nhớ từ 000H đến 7FFH), tất cả các lệnh nhảy và rẽ nhánh không điều kiện hoặc có điều kiện (như LJMP, LCALL, AJMP, ACALL, CJNE, JB, JNZ...) bắt buộc phải có địa chỉ đích nằm trong giới hạn vật lý 000H - 7FFH (ví dụ: LJMP 7E0H hợp lệ nhưng LJMP 900H không hợp lệ). Ngoài ra, do RAM nội chỉ có 128 byte nên độ sâu ngăn xếp (Stack) bị giới hạn tối đa 128 byte. Vi điều khiển không hỗ trợ bus mở rộng bộ nhớ ngoài nên hoàn toàn không hỗ trợ tập lệnh MOVX.

2. Vai trò của chân $\overline{\text{EA}}$ (chân 31) trên vi điều khiển AT89C51 được quy định như thế nào?
Chân $\overline{\text{EA}}$ (External Access Enable) quy định vùng nhớ thực thi mã nguồn của vi điều khiển: khi nối lên mức cao ($+5\text{V}$), AT89C51 thực thi chương trình trong bộ nhớ ROM Flash nội (từ địa chỉ $0000\text{H}$ đến $0\text{FFFH}$); khi nối xuống mức thấp ($\text{GND}$), vi điều khiển bỏ qua ROM nội và thực thi chương trình từ bộ nhớ mở rộng bên ngoài (dung lượng tối đa 64K byte). Ngoài ra, chân này còn được dùng để cấp điện áp $12\text{V}$ khi nạp bộ nhớ EEPROM/Flash của chip.

3. Kịch bản MEASURE.INI trong dự án mẫu MEASURE thực hiện mô phỏng tín hiệu ngõ vào A/D bằng cách nào?
Kịch bản MEASURE.INI sử dụng ngôn ngữ hàm tín hiệu (Signal Functions) của Keil µVision kết hợp với thanh ghi mô phỏng ảo (VTREGs). Trong đó: hàm AD01_Saw tự động tạo tín hiệu điện áp dạng xung răng cưa biên độ $2,0\text{V}$ cập nhật liên tục vào thanh ghi AD01; hàm AD02_Sine tạo tín hiệu dạng sóng sin biên độ $1,0\text{V}$ đưa vào thanh ghi AD02; còn ngõ vào AD03 được gán tín hiệu nhiễu nhằm kiểm tra khả năng xử lý tín hiệu tương tự của hệ thống.

4. Để thực hiện thao tác xóa toàn bộ bộ nhớ Flash (Chip Erase) trên chip AT89C2051, cần thiết lập các điều kiện tín hiệu gì?
Thao tác xóa chip thực hiện xóa toàn bộ 2K byte bộ nhớ Flash PEROM (ghi tất cả các byte về trạng thái logic FFH) và xóa 2 bit khóa bảo vệ. Quá trình này yêu cầu thiết lập tổ hợp mức logic thích hợp trên các chân điều khiển và duy trì chân P3.2 ở mức logic thấp ('L') trong khoảng thời gian tối thiểu là $10\text{ms}$.

5. Thành phần RTX51 Tiny trong bộ công cụ Keil C51 có chức năng gì trong phát triển ứng dụng nhúng?
RTX51 Tiny là một hệ điều hành thời gian thực (Real-Time Operating System - RTOS) cỡ nhỏ được tích hợp trong bộ công cụ Keil C51. Thành phần này hỗ trợ quản lý đa nhiệm (multitasking), lập lịch và định thời cho các tác vụ độc lập, giúp đơn giản hóa việc thiết kế và bảo trì các dự án phần mềm nhúng có cấu trúc thời gian thực phức tạp.


Kết luận

Đồ án tốt nghiệp "Lập trình C cho họ vi điều khiển 8051" đã khảo sát toàn diện kiến trúc phần cứng, cấu hình chân, bản đồ thanh ghi SFR và quy trình lập trình bộ nhớ Flash của hai dòng vi điều khiển tiêu biểu AT89C2051 và AT89C51. Đồng thời, công trình đã hệ thống hóa đầy đủ chu trình phát triển, biên dịch, tối ưu hóa và xuất mã HEX trên môi trường tích hợp Keil Software µVision 2. Thông qua việc phân tích chuyên sâu hai ứng dụng mẫu HELLO và MEASURE, đề tài đã chứng minh tính hiệu quả của phương pháp mô phỏng logic, gỡ lỗi đa kênh và tạo tín hiệu kiểm thử tự động, tạo nền tảng lý thuyết và thực hành vững chắc cho việc ứng dụng ngôn ngữ C trong các hệ thống điều khiển nhúng 8051.