Mua linh kiện điện tử tại Điện tử Nhật Tùng
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ếtTable of Contents
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ểu | Kí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ó |
int8 | Số nguyên 1 byte ( 8 bit) | 0 đến 255 | -128 đến 127 |
int16 | Số nguyên 16 bit | 0 đến 65535 | -32768 đến 32767 |
int32 | Số nguyên 32 bit | 0 đến 4294967295 | -2147483648 đến 2147483647 |
float32 | Số thực 32 bit | -1.5 x 1045 đến 3.4 x 1038 |
- 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ể.
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.
Kiểu dữ liệu không dấu
- Unsigned là kiểu không dấu nên giá trị theo biến
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 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
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ệ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 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ệ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 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ệ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ệ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.
- Lệnh OUTPUT_HIGH(pin): có chức năng cho 1 chân của port lên mức 1.
- Lệnh OUTPUT_BIT (pin, value): có chức năng xuất giá trị value ra 1 chân của port.
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 .
- Lệnh INPUT(pin): có chức năng đọc giá trị 1 chân của port gán cho biến.