Thứ Hai, 3 tháng 12, 2018

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

Cấu trúc của 1 chương trình viết trên CCS:

#include <18F4431.h>                      1) header file
                                                       2) Các lệnh tiền khai báo :

#use delay….                                             #use delay(clock=20000000) => khai báo tần số thạch anh (Hz) để sử dụng hàm delay
#fuses ……
#use rs232 …….                                        #use rs232 => khai báo sử dụng cổng thu phát nối tiếp



Khai báo biến toàn cục                               3) Khai báo tên và kiểu biến sử dụng,
                                                         có thể khai báo biến cục bộ bên trong
                                                         chương trình con và bên trong hàm
Chương trình ngắt                                       4) Chương trình ngắt

“chương trình con 1”                                   5) Chương trình con
“chương trình con 2”

                                                            
MAIN ()                                              6) Chương trình chính
{ …………….
……………..
Gọi các chương trình con
……………..
……………..
}


1.Cấu trúc chương trình đơn giản trong CCS
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
Chương trình nhấp nháy led
*********************************
Chương trình này nhấp nháy một đèn led kết nối với pin RB0 ở PORTB với chu kỳ 2 giây (1 giây sáng và 1 giây tắt)
Programmer :D. Ibrahim
File: LED.C
Date:
Micro: 16f877a
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay(clock=20000000)
void main()
{
for(;;) // Vòng lặp vô tận
{
Set_Tris_B(0x00); // Cấu hình PORTB là port xuất
Output_low(Pin_B0); // RB0 = 0
Delay_ms(1000); // Chờ một giây
Output_high(Pin_B0); // RB0 = 1
Delay_ms(1000); // Chờ một giây
} // 
}

1.1 Chú thích:
Chú thích được sử dụng để làm rõ hoạt động của chương trình hoặc 1 câu lệnh, dòng chú thích được bỏ qua và không biên dịch bởi chương trình biên dịch CCS. Chú thích có hai loại đó là: Chú thích dài (chiếm nhiều dòng) và chú thích ngắn (Chỉ chiếm 1 dòng đơn). Chú thích ở đầu chương trình có thể mô tả ngắn gọn hoạt động của chương trình, cung cấp tên tác giả, tên tập tin chương trình, ngày giờ viết chương trình, danh sách phiên bảng , cũng những sửa đổi trong phiên bảng.
Các dòng chú thích nên rõ ràng và súc tích giúp dễ dàng đọc hiểu bảo trì, cập nhật, nâng cấp chương trình. 
Chú thích dài bắt đầu với ký tự  " /* " và kết thúc với ký tự " */ ". chú thích ngắn bắt đầu với ký tự "//" và không cần ký tự kết thúc.
1.2 Chỉ thị tiền xữ lý:
Đầu tiên là các chỉ thị tiền xử lý : # . . . có nhiệm vụ báo cho CCS cần sử dụng những gì trong chương trình C như dùng VXL gì , có dùng giao tiếp PC không , ADC không , DELAY không , . Trong đoạn chương trình ví dụ ở trên trong đó
#include <16f877a.h> nói cho chương trình biên dịch biết để chèn file 16f877a.h như là một phần của chương trình, trong đó có định nghĩa thanh ghi , địa chỉ...., 
#use delay(clock=20000000) nói cho trình biên dịch tần số xung clock của thạch anh khi chạy, để trình biên dịch tính toán khi sử dụng hàm delay,
#fuses định nghĩa cấu hình các cầu chì (Fuse) bên trong chip
1.3 Hàm main()
Chương trình trong ngôn ngữ C phải có ít nhất 1 hàm , tên là main(). Là điểm bắt đầu khi đoạn mã chương trình được thực thi. Là hàm đầu tiên được gọi khi chương trình bắt đầu.
Hàm main bắt đầu và kết thúc các dấu { } 
void main()
{
//các câu lệnh trong hàm
}

Hình1 :Sơ đồ mạch cho ví dụ
Cấu trúc chương trình đơn giản trong CCS có sử dụng hàm
Hàm là một khối các câu lệnh thực hiện một nhiệm vụ nhất định, và có thể được gọi khi cần
Sử dụng hàm giúp:
Chia nhỏ chương trình thành nhiều bài toán con
Sử dụng lại trong một hoặc nhiều chương trình
Cách khai báo:
<kiểu trả về> <tên hàm>(<danh sách các tham số>)
     {
//Khai báo các biến dùng cho hàm
//Các câu lệnh của hàm
}
Câu lệnh return dùng để thoát khỏi hàm và trả kết quả
Cấu trúc chương trình đơn giản trong CCS có sử dụng ngắt.
Ví dụ chương trình trong CCS có sử dụng ngắt:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

//============================
#INT_RDA
void NgatNhan_RS232()
{
   char c;
   c = getc();
    if(c=='0')
   {
   output_d(0b11111111);
   }
   if(c=='1')
   {
   output_d(0b11111110);
   }
   if(c=='2')
   {
   output_d(0b11111101);
   }
   if(c=='3')
   {
   output_d(0b11111100);
   }
}
void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
Set_tris_D(0x00); //Thiết lập cổng I/O của port D là cổng xuất
Output_D(0xFF); // tắt tất cả các led kết nối đến port D
while(true)
  {

  }
}

Không có nhận xét nào:

Đăng nhận xét

Bài đăng mới nhất

Valdes Fernando - Microcontrollers Applications With Pic

Bài đăng phổ biến