Lập trình Pic, Vi điều khiển về Biến, lệnh C, truy xuất CCS – Bài 2

nhan-do-an-vi-dieu-khien
Lập trình Pic là một cách để viết cho vi điều khiển các khai báo Biến, lệnh C cơ bản, lệnh truy xuất CCS  

Mua linh kiện điện tử tại Điện tử Nhật Tùng

Liên hệ làm mạch  Phone: 0967.551.477 Zalo: 0967.551.477 Email: dientunhattung@gmail.com Địa Chỉ: 171/25 Lê Văn Thọ, P8, Gò Vấp, Tp HCM Chi tiết: Nhận làm mạch và đồ án Điện tử  
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>>  Kích vào hình để được biết thêm chi tiết khóa học lập trình vi điều khiển online  

Giới thiệu

Lý do chọn lập trình Pic trên ngôn ngữ C

  • Ngôn ngữ lập trình pic là một ngôn ngữ lập trình được sử dụng phổ biến, là ngôn ngữ tạo mã hiệu quả, các phần tử lập trình có cấu trúc và một tập hợp phong phú các toán tử và được sử dụng khá nhiều trong lập trình Vi điều khiển.
  • Ngôn ngữ C một ngôn ngữ lập trình thuận tiện và hiệu quả, nhiều ứng dụng có thể được giải quyết dễ dàng hơn và hiệu quả hơn bằng ngôn ngữ C so với các ngôn ngữ chuyên biệt khác.

Phần hổ trợ của ngôn ngữ C

  • Khi lập trình bằng ngôn ngữ C thì các vấn đề phức tạp được giải quyết một cách nhanh chóng và gọn gàng, tuy nhiên không thể biết chính xác thời gian thực hiện các lệnh, mã sau khi biên dịch thường chưa tối ưu vì trình biên dịch thường phải tạo 1 chương trình khung tổng quát để đáp ứng cho tất cả các dạng lập trình nên code biên dịch dài hơn, người lập trình có thể không cần hiểu biết nhiều về cấu trúc của vi điều khiển hơn.
  • Do có nhiều họ vi điều khiển của nhiều hãng khác nhau nên các phần mềm lập trình Ccho vi điều khiển cũng khác nhau, phần này chỉ trình bày những kiến thức lập trình C chung vàcơ bản nhất và tùy thuộc vào từng phần mềm biên dịch mà các bạn tìm hiểu thêm.
  • Sau khi kết thúc phần này sẽ giúp các bạn biết cấu trúc một chương trình, biết các lệnh C cơ bản để lập trình, biết khai báo các kiểu dữ liệu cho các biến, biết viết chương trình.

Các kiểu dữ liệu lập trình Vi điều khiển

Đối với phần mềm CCS hoặc các phần mềm khác và các họ vi điều khiển khác sẽ có cách khai báo dữ liệu tương đối giống nhau, nhưng đa phần sẽ khác nhau về số Bit của các kiểu dữ liệu. Sau đây là bảng khai báo biến của phần mềm CCS lập trình Pic.
KiểuKích cỡUnsigned (Không dấu)Signed (Có dấu)
int1  Số 1 bit = true hay false ( 0 hay 1)0 đến 1 Không có
int8Số nguyên 1 byte ( 8 bit)0 đến 255-128 đến 127 
int16Số nguyên 16 bit0 đến 65535 -32768 đến 32767 
int32Số nguyên 32 bit0 đến 4294967295 -2147483648 đến 2147483647 
float32Số thực 32 bit  -1.5 x 1045  đến  3.4 x 1038
Lưu ý: 
  • Khi khai báo int1,int8,int16,int32 chúng ta sử dụng được vì trong phần mềm CCS đã được định nghĩa trong thư viện của từng con Pic cụ thể.
Ví dụ các bạn mở thư viện của Pic16F887 các bạn chỉ việc khai báo #include<16F887.h>  Sau đó các bạn nhấn chuột phải mở lên. Kéo tới dòng lệnh 24 đến 30 sẽ thấy được định nghĩa như sau: #if (!defined(__PCM__)||defined(__ISNT_CCS__)) #define _bif #define int8 char #define int16 long #define int32 long long #define float32 float #define int1 char #endif

Một vài ví dụ cụ thể

Kiểu dữ liệu có dấu

  • Signed là kiểu dữ liệu có dấu nên giá trị sẽ có 1 nữa phần âm và 1 nữa phần dương.
Ví dụ: signed    int8    dem;    // biến đếm là 8bit, giá trị sẽ được tính như sau Bit số 7 sẽ quy định dấu. nếu là số “1”  thì mang dấu “-”  còn lại 7 bit nên chỉ còn 2^7 = 128 giá trị. sẽ chạy từ (-128 về -1). Bit số 7 sẽ quy định dấu. nếu là số “0”  thì mang dấu “+”  còn lại 7 bit nên chỉ còn 2^7 = 128 giá trị. sẽ chạy từ (0 về 127).

Kiểu dữ liệu không dấu

  • Unsigned  là kiểu không dấu nên giá trị theo biến 
Ví dụ : biến 8bit thì 2^8 = 256 và sẽ được chạy từ 0 đến 255.

Có 4 cách khai báo lập trình Pic

  • 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 toán tử trong lập trình Pic

  • Toán tử gán (=).     // sử dụng cho các toán gán giá trị như a=1;
  • Toán tử số học (+, -, *, /, %).    // sử dụng cho tính toán như các bài toán thông thường
  • Toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)   // su dụng tính vơi giá trị đi trước và giá trị sau.
  • Toán tử tăng và giảm (++, –)      // cách ghi gọn như a++ => a = a+1;
  • Toán tử quan hệ (==, !=, > , <, >=, <=)    // sử dụng cho so sánh 
  • Toán tử logic (!, && ,||)      // sử dụng so sánh trong các cổng logic, tức nhiều điều kiện 1 lúc
  • Toán tử xử lý bit (&, |, ^, ~, <<, >>)    // tính toán logic số học và dịch dữ liệu
Các ví dụ về toán tử các bạn xem trong file giáo trình sẽ chi tiết hơn.

Các lệnh C cơ bản lập trình Pic

Lệnh if và else trong lập trình pic

Có 4 loại cơ bản sau:

1. Chỉ có điều kiện if

lenh-if
Lệnh này chỉ thực hiện lệnh C khi đúng điều kiện còn nếu sau thì bỏ qua kết thúc lệnh đầu tiên.

2.  Có if/else

Lập trình Pic Lệnh if và else
Lưu đồ lệnh if,else
Lệnh này kiểm tra điều kiện có đúng không, nếu đúng thì thực hiện 1 và kết thúc, còn ngược lại nếu sai thì chạy tiếp chương trình thực hiện hai và kết thúc.

3.  Có if/else if

lệnh if và else if
Lưu đồ lệnh if, else if…
Lệnh này kiểm tra có đúng điều kiện 1 đúng không, nếu đúng thì thực hiện 1 sau đó kết thúc lệnh, nếu sai tiếp tục kiểm tra điều kiện 2 có đúng không, nếu đúng thực hiện 2 sau đó kết thúc còn nếu cả hai điều kiện đều không đúng thì kết thúc và không thực hiện gì cả.

4. Đầy đủ if/else if … else if /else

Lập trình Pic lệnh if, else if,...,else if, else
Lưu đồ lệnh if,else if,…,else if,else
Lệnh này kiểm tra điều kiện 1 có đúng không, nếu đúng thì thực hiện 1 sau đó kết thúc, nếu sai tiếp tục kiểm tra điều kiện 2 có đúng không, nếu đúng thì thực hiện 2 sau đó kết thúc, nếu sai kiểm tra đến điều kiện n+1, nếu vẫn sai thì thực hiện n sau đó kết thúc dòng lệnh. Có nhiều điều kiện chổ else if, và chương trình sẽ kiểm tra theo thứ tự. Lưu ý:  Điều kiện if chỉ thực hiện 1 lần sau đó kết thúc dù đống hay sai và sẽ không quay lại chương trình.

Lệnh lặp while trong lập trình pic

lệnh while
Lưu đồ vòng lặp While
Lệnh while thực hiện theo chiều đúng, nếu chương trình không có điều kiện sai thì sẽ không có END sảy ra lúc đó được gọi là vòng lặp tuần hoàn thường sử dụng là while(1) hoặc while(true). 

Lệnh lặp Do While() trong lập trình pic

Lập trình Pic Lệnh Do while trong C
Lưu đồ vòng lặp Do while
Lệnh Do while là thực hiện trước rồi kiểm tra điều kiện sau, nếu đúng thì quay lại thực hiện tiếp vòng lặp đến khi điều kiện sai thì kết thúc chương trình.

Lệnh vòng lặp for trong lập trình pic

Lập trình Pic Lệnh vòng lặp for
Lưu đồ vòng lặp FOR
Lệnh for thực hiện khi đúng điều kiện, ở ví dụ này ta có thể hiểu,      n=0 là giá trị đầu của vòng lặp for      n<10 là điều kiện kết thúc,      n++ mỗi lần vòng lặp chạy sẽ tăng lên 1 đơn vị. Số vòng lặp của for phụ thuộc vào 3 yếu tố trên.

Lưu ý: 

Nếu các bạn sử dụng vòng phải đảm bảo được chương trình không thực hiện gì ngoài vòng lặp vì khi vòng lặp chạy nó không thể thực hiện các lệnh khác. Điều kiện của vòng lặp phải chắt chắn sẽ có một lúc nào đó chương trình kết thúc nếu không sẽ bị treo chương trình không lối thoát.

Lệnh truy xuất trong phần mềm CCS

Ở đây mình chỉ sử dụng các lệnh truy xuất đơn giản nhất để có thể viết được các bài toán. Giúp cho người học không cảm giác bị rối khi xử dụng. Lệnh OUTPUT_LOW(pin)
  • Lệnh OUTPUT_LOW(pin): có chức năng cho 1 chân của port xuống mức 0.  
Ví dụ: output_low(Pin_A0);   // cho chân A0 xuống mức thấp; Lệnh OUTPUT_HIGH(pin)
  • Lệnh OUTPUT_HIGH(pin): có chức năng cho 1 chân của port lên  mức 1. 
Ví dụ: OUTPUT_HIGH(Pin_A0);   //cho chân A0 lên mức cao. Lệnh OUTPUT_BIT (pin, value)
  • Lệnh OUTPUT_BIT (pin, value): có chức năng xuất giá trị value ra 1 chân của port.  
Ví dụ: OUTPUT_BIT(Pin_A0,1);   //xuất tín hiệu mức cao cho chân A0. Nếu value là 1 thì giống OUTPUT_HIGH(PIN); Nếu value là 0 thì giống OUTPUT_LOW(PIN);  Để thuận tiện trong việc sử dụng người ta định nghĩa cho mình giúp tối ưu chương trình khi cần thiết.
Lệnh OUTPUT_X(value):  
Chức năng: có chức năng xuất dữ liệu 8 bit ra port X   Ví dụ: OURPUT_A(0x0f);   // xuất tín hiệu 0000 1111 cho Port A. Lệnh SET_TRIS_X(value)
  • 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. Lệnh INPUT(pin)
  • Lệnh INPUT(pin): có chức năng đọc giá trị 1 chân của port gán cho biến.  
Ví dụ: INPUT(PIN_A0); // đọc tín hiệu vào vi điều khiển là mức thấp hay mức cao. Lệnh này thường được sử dụng trong các chương trình cảm biến hoặc nút nhấn. Ngoài ra các bạn có thể đọc thêm ở phần giáo trình ở trên sẽ đầy đủ hơn.

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 *