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

May 17, 2009

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é.

Các bài viết liên quan:

  1. Lập trình C cho vi điều khiển: vấn đề khai báo biến Chào các bạn. Như các bạn đã biết trong các lệnh ASM của vi xử lý thì thao tác với các toán tử là các thanh ghi sẽ tốn ít thời gian nhất và do đó tối ưu được chương trình chạy rất nhanh, thời gian thực hiện từng thuật toán sẽ giảm đi nhiều. [...]...
  2. So sánh các bộ điều khiển tốc độ động cơ DC Trong bài này, tác giả muốn so sánh bộ điều khiển PID truyền thống và bộ điều khiển Robust Feedforward (thực tế không phải là Feedforward, mà là cải tiến của tác giả) trong quá trình tác giả và bạn của tác giả (Bá Hải) cùng nghiên cứu tại BioRobotics Lab Các bộ điều khiển [...]...
  3. Các tính chất của các điều khiển trong GUIDE Matlab Chào các bạn. Mình xin gửi các bạn tài liệu Matlab 7 – Creating Graphical User Interfaces, là tài liệu dạng .pdf của tài liệu trong Help của Matlab. Các bạn nào có thể tự đọc hiểu được English thì tài liệu này là quá đầy đủ rồi. Các bài viết của mình dựa một [...]...
  4. Hướng dẫn tự học vi điều khiển 32 bit TMS320F28335 của TI Rất lâu rồi mình không viết Blog, mà chỉ thỉnh thoảng trả lời comment của các bạn, còn chủ yếu mình dùng Facebook cá nhân, cũng vì nhiều nguyên nhân. Cũng không có cảm hứng viết blog, nên giờ mới dành thời gian viết tiếp. TMS320F28335 là một loại vi điều khiển thuộc loại mạnh [...]...
  5. PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART Chào các bạn. Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A). Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn. Để [...]...
  6. [C001] Kỹ thuật lập trình C căn bản Đây là khóa học C001 được tổ chức tại Hocdelam Group. Tóm tắt khóa học Khóa học : Kỹ thuật lập trình C căn bản Thời gian đào tạo: 4 tiếng Giảng viên: Ngô Hải Bắc Email: ngohaibac@hocdelam.com Website: http://www.ngohaibac.net Ngôn ngữ lập trình C C là ngôn ngữ lập trình tương đối nhỏ gọn, [...]...

{ 9 comments… read them below or add one }

1 hoanguit May 30, 2009 at 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

2 ngohaibac June 2, 2009 at 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

3 congcuong October 8, 2009 at 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

4 phan viet November 18, 2009 at 3:00 am

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

Reply

5 Any December 2, 2009 at 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

6 hong April 2, 2010 at 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

7 tinhtien83 April 13, 2010 at 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

8 ngohaibac April 13, 2010 at 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

9 trần xuân bính July 13, 2010 at 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

Leave a Comment

CommentLuv Enabled

Previous post:

Next post: