Lập trình C, Lập trình Vi điều khiển về Cấu trúc chương trình C – Bài 3

nhan-do-an-vi-dieu-khien

Lập trình C, Lập trình Vi điều khiển về Cấu trúc chương trình C
Lý do:

  • Vi điều khiển hoạt động theo tính thứ tự, nếu chúng ta khai báo biến lung tung, hoặc định nghĩa nhiều nơi sẽ rất khó quản lý tốt được, và sẽ có lúc chương trình báo lỗi vì chưa định nghĩa (nhưng các bạn đã định nghĩa hoặc khai báo rồi nhưng vì không theo thứ tự).
  • Các bạn muốn lập trình c tốt thì nên theo cấu trúc này sẽ giúp các bạn sắp xếp, thêm tính logic khi lập trình, dễ sửa lỗi, tìm kiếm thông tin 1 cách nhanh nhất.
  • Mong các bạn góp ý về phần cấu trúc lập trình C một cách chân thành.

Các bạn tải link giáo trình:

Giáo trình : Vi điều khiển – Lý thuyết – Nguyễn Đình Phú

Giáo trình : Vi điều khiển – Thực hành – Nguyễn Đình Phú

Bài giảng: Vi điều khiển – Lý thuyết – Thực hành – Trương Ngọc Anh

Pass giải nén : Nhattungnt93

Cấu trúc chương trình lập trình C gồm 5 phần:

  • Khai báo thư viên 
  • Các định nghĩa (nếu có)
  • Khai báo biến
  • Chương trình con (mình sẽ chỉ các bạn chuyên dùng chương trình con luôn)
  • Chương trình chính

Bắt đầu đi giải thích các phần nào.

Khai báo thư viện lập trình C

#include <16F887.h>      // dòng lệnh này là khai báo thư viện con Pic16F887, nếu các bạn sử dụng thử viện khác thì thay đổi tên lại nhé.

Ví dụ: Pic16F877A thì khai báo #include<16F877A.h>
Pic18F4550  thì khai báo #include <18F4550>

#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP     // dòng lệnh này định cấu hình cho Pic

Chức năng các thông số như sau:

  • NOWDT:             là không sử dụng bộ định thời giám sát (No watchdog timer)  
  • PUT:                    là sử dụng bộ định thời khi có nguồn để kéo dài them thời gian reset vi điều  khiển để chờ nguồn điện ổn định, thời gian kéo dài thêm 72ms (Power up timer) 
  • HS:                      là sử dụng bộ dao động tần số cao từ 4MHz đến 20MHz (High Speed) 
  • NOPROTECT:  là không sử dụng bảo vệ mã code nạp vào bộ nhớ flash bên trong
  • NOLVP:             là không sử dụng chế độ nạp code dùng nguồn điện áp thấp 5V mà dùng nguồn 12,5V.
  • Ngoài ra thì còn nhiều thông số khác các bạn xem thêm trong thư viện Pic16F887 nhé.

#use delay (clock =20M)    // nếu sử dụng thạch anh nội thì từ 37k đến 8M, còn thạch anh ngoài thì 4M đến 20M, Khi bạn sử dụng thạch anh nào thì nhớ khai báo đúng ở đây là được.

Ngoài ra còn nhiều thư viện khác như tv_lcd… khi có mình sẽ thêm sau nhé.

Các định nghĩa nếu có cho lập trình C

Phần này thì đơn giản hơn 

cấu trúc định nghĩa 

#define <tên cần định nghĩa>     <giá trị hoặc một chân>

Ví dụ:

#define     UP     pin_c0     // định nghĩa chân C0 có tên là UP

hoặc 

#define    ON     UP          // định nghĩa lại giá trị UP có tên là ON.

Vậy thực chất định nghĩa là gì, là mình đặt lại tên cho giá trị hoặc cho biến đó để dễ sử dụng cho các trường hợp cụ thể

Khai báo biến trong lập trình C

Hôm trước mình đã giới thiệu phần này có các bạn rồi giờ mình chỉ nói lại nhé

Cấu trúc  

<dấu>   <kiểu dữ liệu>   <tên biến>

Có 4 cách khai báo chính

  • int1         tt;      //biến tt là kiểu dữ liệu 1bit chỉ có hai giá trị là 0 và 1.
  • signed    int8      dem      //biến dem là kiểu số nguyên giá trị 8bit và có dấu.
  • unsigned int8     tam      // biến tam là kiểu số nguyên giá trị 8bit không dấu
  • float        doc                 //biến doc là kiểu số thực tức có dấu , phía sau, VD: 1,12 và chỉ lấy được hai giá trị thập phân ở sau không lấy được nhiều hơn.

Các chương trình con trong lập trình C

Cấu trúc chương trình con

void <tên chương trình con>()

{

      // xử lý chức năng của chương trình con

}

Lưu ý khi đặt tên chương trình con như sau:

  • Nên đặt tên đúng với chức năng của chương trình con.
  • Mình viết bài nhấp nháy led đơn nên đặt:                  void   nhapnhay()
  • Không được để số đứng đầu:                                      void   123nhapnhay()
  • Không được để ký tự đặt biệt trừ dâu “_” đứng đầu : void   @nhapnhay()
  • Không có khoảng trắng giữa các ký tự:                      void    nhap nhay()

Ví dụ:

void       nhapnhay()

{

            output_high(pin_c0);

            delay_ms(200);

            output_low(pin_c0);

            delay_ms(200);

}

Chương trình chính

Vi điều khiển sẽ chạy khi có chương trình chính, những thứ ở trên chỉ bổ trợ cho chương trình chính hoạt động.

  • Khởi tạo port: phần này mình nói ở bài số 2 rồi nha

Lệnh SET_TRIS_X(value): có chức năng định cấu hình cho port X .

Vì các chân vi điều khiển có chức năng hai chiều là I/O nên phải quy định trước chiều cho vi điều khiển, hầu hết vi điều khiển chỉ xử lý chân theo một chiều tại một thời gian nhất định.

Ví dụ: SET_TRIS_A(0xf0);    // định cấu hình cho port A là 1111 0000 có nghĩa là từ chân A7 – A4 là tín hiệu đi vào vi điều khiển, từ chân A3 – A0 là tín hiệu đi ra vi điều khiển.

  • Khởi tạo các module nếu có : phần này giống mình định cấu hình trước khi nó chạy, như viết lcd, adc,timer… phải khởi tạo trước thì mới hoạt động được.
  • Khởi tạo giá trị ban đầu cho các biến: khai báo biến ở trên nhưng chưa được gán giá trị ban đầu là từ đâu, nên các bạn nên gán để vi điều khiển biết các biến sẽ được gán giá trị là bao nhiêu.

Lệnh While(true)  : là vòng lặp tuần hoàn, tức là sẽ không có điều kiện sai.

// chuong trinh chinh

void main()

{

   set_tris_c(0x0f);

   while(true)

   {

           nhapnhay();

   }

}

Các bạn xem đầy đủ chi tiết phần Video:

https://www.youtube.com/watch?v=_VlhkdbstY0

Bài giảng hôm nay dừng ở đây nhé hôm sau sẽ học:

==> Lập trình Vi điều khiển – Led đơn – Và các hiệu ứng cơ bản

Toàn bộ khóa học Vi điều khiển

Chúc các bạn thành công.!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *