Ở bài này chúng ta sẽ cài đặt các công cụ cần thiết cho việc lập trình Nuvoton N76E885 trên máy tính Windows đó là SDCC và Code::Blocks. Các bạn có thể sử dụng các trình biên dịch khác nhau cho dòng chi này, nhưng làm việc với nhiều trình biên dịch và IDE khác nhau sẽ giúp chúng ta dễ dàng tiếp cận dòng chip mới hơn.
Bài 2 trong Serie Học lập trình 8051 Nuvoton từ A tới Z
Cài đặt trình biên dịch SDCC
Tải SDCC
Các bạn vào trang chủ http://sdcc.sourceforge.net/ mục download để tải SDCC phiên bản mới nhất:
Cài đặt SDCC
Các bạn cài đặt SDCC tương tự như hầu hết các phần mềm khác:
Cứ việc để mặc định và nhấn Next đến bước này thì dừng lại:
Các bạn tích chọn vào ô Add…to the PATH như hình dưới:
Tiếp tục nhấn Next và hoàn thành:
Các bạn mở công cụ Command Prompt của máy tính Windows và gõ sdcc -v
, nếu hiện ra như hình bên dưới là đã cài đặt thành công:
Hướng dẫn cài đặt IDE Code::Blocks
Tải Code::Blocks
Các bạn vào trang chủ https://www.codeblocks.org/ mục download để tải Code::Blocks phiên bản mới nhất:
Cài đặt Code::Blocks.
Các bạn cũng cài đặt Code::Blocks tương tự những phần mềm khác:
Cứ để mặc định và nhấn Next đến khi hoàn thành:
Liên kết SDCC vào Code::Blocks
Mặc định sau khi cài SDCC và kiểm tra lại bằng Command Prompt thành công thì Code::Blocks sẽ tự liên kết với trình biên dịch SDCC. Ở lần chạy Code::Blocks đầu tiên, các bạn sẽ thấy một của sổ thông báo như hình dưới:
Trường hợp gặp phải chữ “Not found” thay vì “Detected” ở cột Status?
Nguyên nhân lỗi này chính là SDCC chưa được thêm vào biến môi trường (PATH). Điều này có thể do các bạn đã bỏ qua bước tích vào mục “Add…to PATH” (các bạn xem lại phần 1.2).
Để fix lỗi:
- Các bạn hãy thêm SDCC vào biến môi trường (Tương tự cài đặt VS code)
- Hoặc đơn giản hơn, các bạn hãy cài đặt lại SDCC.
Làm quen với giao diện Code::Blocks.
Tối giản giao diện Code::Blocks
Khi chạy Code::Blocks lần đầu, ta có giao diện khá nhiều nút chức năng.
Để gọn lại, các bạn vào “View Perspectives Code::Blocks minimal”
Giao diện lúc này gọn hơn:
Các bạn có thể tắt “Start here” đi. Sau đó vào “View” chọn 2 mục “Manager” và “Logs”
Giới thiệu giao diện Code::block
Không gian làm việc của chúng ta gồm 3 phần chính như hình sau:
- Phần 1: đây là phần của editor, là phần để viết code (các file .c, .h,…).
- Phần 2: phần này chứa các thông tin liên quan đến project như cây thư mục, các file, tùy chọn đường dẫn, tùy chọn trình biên dịch…
- Phần 3: phần này chứa thông tin về quá trình biên dịch (các lỗi, cảnh báo, dữ liệu debug,…).
Cũng tương tự những IDE khác như KeilC, VS code mà thôi.
Tạo project Code::Blocks cho 8051 và biên dịch bằng SDCC
Tại giao diện Code::Blocks, chúng ta vào File -> New -> Project:
Vào Categories, chọn Embedded Systems, rồi chọn MCS51 Project:
Đặt tên và chọn nơi lưu project:
Các bạn memory model là “small”.
Phần Memory sizes, các bạn dựa vào datasheet của MCU để thiết lập cho đúng theo đơn vị byte.
Ví dụ mình lập trình cho N76E885, theo như datasheet ta có ROM là 18 Kbyte = 18432 Byte (không dùng LDROM), RAM nội (IDATA) là 256 Byte, RAM ngoại (XDATA) là 256 Byte. Việc khai báo này giúp ích trong trường hợp project của bạn quá lớn, ROM, RAM của chương trình đích (chạy trên MCU) có thể vượt qua con số đã thiết lập, từ đó trình biên dịch sẽ báo lỗi cho chúng ta trong quá trình biên dịch.
Nhớ chọn Output Format là Intel hex luôn nhé.
Như vậy là đã tạo xong project:
Mặc định khi tạo 1 project MCS51, Code::Blocks sẽ tạo sẵn 1 file main.c với nội dung như hình trên và include sẵn một header file của 8051 chuẩn (định nghĩa các thanh ghi cơ bản nhất).
Build Project dùng Code::Blocks
Trước khi build project, ta cần chọn trình biên dịch, các bạn làm như hình sau:
Ở đây mình chọn Small Device C Compiler (SDCC) để biên dịch.
Lưu ý, các bạn làm tương tự cho cả “Debug” và “Release” luôn nhé.
Sau các bước thiết lập, chúng ta sẽ biên dịch (build project). Các bạn nhấn “Ctrl + F9” hoặc vào Build -> Build như hình:
Biên dịch thành công (0 error, 0 warning):
Chuẩn bị header file cho Nuvoton N76E885
Header file là gì?
Chúng ta đều biết, thực chất lập trình là thay đổi giá trị của các ô nhớ trong vi điều khiển. Header file tương ứng với các con vi điều khiển khác nhau sẽ định nghĩa sẵn các vị trí trên ô nhớ cho từng ngoại vi, Ram, thanh ghi, vector ngắt…
Thông thường các file header này được định nghĩa sẵn trong các IDE lập trình cho loại vi điều khiển đó hoặc ở trong thư viện viết cho dòng vđk đó.
Tạo header file cho N76E885
Để viết code cho N76E885, chúng ta cần header file của nó theo chuẩn của SDCC.
Trong serie mình đã tạo sẵn header file, các bạn có thể để tải tại đây: https://github.com/nguyenkhue2608/8051-Nuvoton-N76E885-Example
Trong thư mục Header file. Các bạn có thể clone hoặc download về.
File nén bao gồm 2 file: “N76E885.h” (định nghĩa các thanh ghi, bit của N76E885) và “Define.h” (chứa các Macro và hằng số hay sử dụng).
Sau khi tải về các bạn giải nén và copy 2 file đó vào thư mục cài đặt của SDCC theo như hình sau:
Kết luận
Như vậy chúng ta đã chuẩn bị xong công cụ để viết code đó là trình biên dịch SDCC và IDE Code::Blocks. Hẹn các bạn ở bài sau, chúng ta sẽ viết chương trình và nạp code lên MCU.
Nếu cảm thấy bài viết có ích hay đánh giá và chia sẻ cho bạn bè. Đừng quên tham gia nhóm Nghiện lập trình để cùng trao đổi và kết nối nhé!