Lập trình C cho vi điều khiển

Mình tham gia các diễn đàn từ lâu lắm rồi và cũng giải đáp nhiều thắc mắc về lập trình C cho các vi điều khiển thông dụng như 8051, PIC. Mình viết bài này để giải đáp thắc mắc cho các bạn mới bước vào học lập trình cho vi điều khiển dùng ngôn ngữ C.

Mình xin nói theo ý hiểu của mình về lập trình C cho vi điều khiển.

Để có thể lập trình C cho vi điều khiển, cần học những gì ở ngôn ngữ C:

  • Cách khai báo biến, các hàm
  • Cách phân biệt các kiểu dữ liệu, và dùng trong trường hợp nào: các kiểu cơ bản có dấu, không có dấu, khoảng dữ liệu, kiểu cấu trúc, kiểu con trỏ, struct ..
  • Cách viết một hàm và gọi 1 hàm
  • Cách qui hoạch hàm: phân chương trình thành các hàm nhỏ và cho vào thư viện (thực ra là file .h, .c để sau này gọi )
  • Các lệnh gán, so sánh <=, >=, ==
  • Các vòng lặp if .. then , if  .. then ... else, while

Ngôn ngữ C cho vi điều khiển tuân theo chuẩn C, ngoài ra bổ sung thêm các kiểu dữ liệu khác phụ thuộc riêng vào từng loại vi điều khiển. Nên khi nói đến khái niệm "tệp lệnh" trong khi lập trình  C thì nó bao hàm tất cả các lệnh cơ bản của C và các kiểu dữ liệu này mà thôi, nên đừng đi hỏi là tệp lệnh là gì ? mà hãy xem trong manual của trình biên dịch đó xem.

Nói đến trình biên dịch mới nhớ là: các định nghĩa, kiểu dữ liệu, ... nó phụ thuộc thêm vào các trình biên dịch  C riêng biệt. Ví dụ với PIC16 thì khi viết bằng HTPIC thì khai báo configuration khác với khi viết bằng CCS, cái này được nói trong mỗi manual của trình biên dịch.

Các bạn có thể xem bài viết  Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18 thì những kiến thức để viết được nó rất đơn giản, chẳng có gì cả. Cái quan trọng là viết cái gì ở trong đó. Câu trả lời nằm ở datasheet của từng module của vi điều khiển. Các tên đặc biệt trong đó là nằm trong thư viện của trình biên dịch đó thôi. Bao giờ mỗi trình biên dịch cũng có các file header định nghĩa các thanh ghi của vi điều khiển, thường là giống với tên trong datasheet, nhưng có thể là không giống nên chỉ cần mở cái đó ra là được.

Thông thường, các vi điều khiển hiện nay khi giao tiếp với một cái gì đó thì nó có riêng một module và có riêng một chương trong mỗi datasheet của vi điều khiển hướng dẫn đầy đủ, cách active module thế nào, cách giao tiếp như thế nào.

Kết luận

Để có thể viết 1 chương trình cho vi điều khiển cần có các yếu tố sau:

  • Những kiến thức lập trình C căn bản.
  • Đọc kĩ manual của trình biên dịch, mở header file của vi điều khiển liên quan.
  • Datasheet của vi điều khiển để đọc từng module.

Vì thế nên hãy có khái niệm đầy đủ và đừng hỏi những câu hỏi không cần thiết ở các diễn đàn nhé.

{ 17 comments… add one }

  • hoanguit May 30, 2009, 11:23 pm

    chào anh hải.Không biết em post ở đây có đúng ko nêu sai cho em xin lỗi nhé.Em được biết anh qua rất nhiều diển đàn Em đang tìm hiểu về Ethernet trên 8051 em đang hướng tới truyền điều khiển qua ethernet để điều khiển robot,Mong anh giúp đỡ em về phần Ethernet

    Reply
    • ngohaibac June 2, 2009, 8:04 am

      Em search google với từ khóa: 8051 Ethernet sẽ ra được một vài kết quả:

      http://web51.hw-server.com/

      Em đọc qua site này, nó có nói về board 8051 và Ethernet đó.

      Chúc em thành công.

      Reply
  • congcuong October 8, 2009, 1:18 pm

    chào anh hải1
    em mới học lập trình C cho VDK .bây giờ em muồn viết một chương trình điều khiển động cơ cho RObot bằng C .anh có thể giúp em được ko? anh có Code gửi cho em nhé.
    Thank you

    Reply
  • phan viet November 18, 2009, 3:00 am

    ban co giao trinh ve vi dieu khien va plc send cho minh it voi
    cam on nha!

    Reply
  • Any December 2, 2009, 12:51 am

    Chao anh Hai,e dang lam 1 mach dieu khien thay doi do rong xung dung VDK+max232+giao tiep wa may tinh.e chi moi tim hieu so nen ko ranh lam,a co the jup e dc ko.e dang bi phan code viet giao dien tren may tinh dung VB.a co the jup e dc ko?thanks a nhiu lam

    Reply
  • hong April 2, 2010, 10:06 pm

    em đang học vi điều khiển!a thầy ơi dạy em với,em thấy khó nhớ môn này wa.

    Reply
    • tinhtien83 April 13, 2010, 11:41 am

      em dang tim hieu de hoc vdk nho may anh giup do nhieu cho em
      may anh co phan mem vdk cho send cho em voi cam on nhieu

      Reply
      • ngohaibac April 13, 2010, 2:00 pm

        Phần mềm VĐK nào em ? Em học VĐK nào thì tham gia các diễn đàn và tìm hiểu chuyên về diễn đàn đó chứ em.

        Chúc em thành công.

        Reply
  • trần xuân bính July 13, 2010, 11:01 pm

    em mới tốt nghiệp và đi làm cho công ty thiết kế biển quảng quảng cáo. ở đây sử dụng lập trình c mà em lai hoc assembly , anh có tài liệu không send vào gmail cho em. sdt của em là 0914800459. em ở hà nội

    Reply
  • AAAA August 12, 2010, 10:23 pm

    DOWNLOAD VE MA DUNG NO CUNG RAT DE XAI NO DUNG CHO NGUOI KO CO KIEN THUC LAP TRINH

    Reply
  • AAAA August 12, 2010, 10:25 pm

    WEN NOI TEN PHAN MEM PHAN MEM DO TEN LA( LEDIMM ) NHUNG VE PHAI CRACK MOI XAI DUOC CHUC B THANH CONG

    Reply
  • sinhvien September 6, 2010, 3:34 pm

    lập trình diều khiển từ pc, can co những kiến thức gi trong c/c++
    co thể giới thiệu một vài quyển sách có ích cho lập trình điều khiển không ?
    em la sinh viên mới ra trường có đủ khả năng lập trình điều khiển không ?
    và cho em biết thêm chuẩn PCIe, PCIX, DDR2,DDR3, IDE/ATA,SATA2 …
    hoặc có thể cho em một vài diễn dàn tham khảo không ?

    em cam on mấy anh nhiều.

    Reply
  • sinhvien September 6, 2010, 3:37 pm

    Em là sinh viên công nghệ thông tin, không biết nhiều về điện tử nên em rất lo.

    Reply
  • Nguyen Thanh Tung October 5, 2010, 4:14 pm

    Chao anh Bac!
    Em co bai tap the nay:
    Lap trinh vdk dieu khien 4 role dong mo theo thoi gian hoac bang may tinh, giao tiep may tinh thong qua rs232, lap trinh trang thai role tren man hinh va co the dieu chinh thoi gia dongt ngat tren man hinh.
    Em dung 89c51 mac noi tiep max232 va qua cong COM, 4 role em noi truc tiep vao P2.0->P2.3.
    Mong anh huong dan cho em cac buoc lap trinh bang keil C.
    Em xin chan thanh cam on va rat mong nhan dc hoi am cua anh.
    Mail cua em la: thanhtung2486@gmail.com

    Reply
  • Walk Alone November 2, 2010, 2:00 pm

    Em chào anh Hải, em cũng đang học IT. Em đang có đồ án làm về ethernet dùng PIC18F97J60, và em sử dụng HT-PIC, nhưng em thấy trên Net có khá ít về HT-PIC, em vẫn chưa biết viết 1 chương trình đơn giản điều khiển led đơn (I/O port), anh có thể hướng dẫn cho em và các bạn newbie như em được không ạ? (nếu có thể thì anh quay video hướng dẫn, em thấy như vậy khá trực quan, hoặc send tài liệu qua mail: thedb8@gmail.com). Em cám ơn anh nhiều.
    Chúc anh mạnh khỏe và thành công!.
    Mong được sự giúp đỡ của anh.

    Reply
  • le nguyen July 28, 2011, 8:44 am

    Cho minh hoi chut xiu, muon hoc lap trinh vi xu ly tren chip thi minh can trang bi nhung kien thuc gi, mong cac ban giup do. Cam on nhieu

    Reply
  • thietitc September 19, 2011, 8:55 am

    chao anh Bac. e dang hoc lap trinh c cho 8051, viet code c cho led don 8 hoac 16 led.Nhung ko biet viet, a biet chi e voi.cam on anh truoc nha

    Reply

Leave a Comment