โครงสร้างภาษาซี
MCS51
24/6/2557 SONGCHAI PRAPATRUNGSEE
โครงสร้างภาษาซี
MCS51
=======================
#include <REGX51.H>
//#include "REGX51.H"
unsigned char k;//0-255
void DELAY_MS(unsigned int TIME){
//DELAY HAVE INPUT
  unsigned int
i,j;//0-65535
 
for(i=TIME;i!=0;i--)
 
for(j=124;j!=0;j--);//ADJUST TIME THIS ROW
}
/*CRYSTAL 12MHZ,
124=1MS PER ROUND*/
void main(void){
  P1=255;  //P1=PORT1
  DELAY_MS(500);//500=DELAY
500MS
  P1=0;
  DELAY_MS(500);
 }
================================
#include <REGX51.H>
ส่วนนี้เรียกว่าหัวโปรแกรม(HEADER
FILE)
จะต้องมีเครื่องหมายชาร์ป #
# หมายถึง
PREPROCESSOR(ประมวลผลก่อน)
include หมายความว่าเอาไฟล์ภายนอกเข้ามาร่วม
<> ในวงเล็บมุมคือชื่อไฟล์ที่จะนำเข้ามาร่วม
อาจใช้เครื่องหมายคำพูด ” ” แทนวงเล็บมุมก็ได้
REGX51.H หมายถึงไฟล์ที่ทางC51คอมไพล์เลอร์
ได้ทำการตั้งชื่อแทนตำแหน่งแอดเดรส
(ที่อยู่ของไมโครคอนโทรลเลอร์จะเป็นตัวเลข)
เพื่อให้ง่ายต่อการจดจำและใช้งาน
เมื่อตั้งชื่อแทนตำแหน่งแอดเดรสแล้ว
ชื่อนั้นจะเรียกว่ารีจิสเตอร์(REGISTER)
.H เป็นนามสกุลH
FILE ไม่ใช่HEX FILE
ในส่วนตรงนี้จะใช้นามสกุลอื่นก็ได้ เช่น .C
//#include "REGX51.H"
// เครื่องหมายสแลช(SLASH)2อัน
หมายถึงคอมเมนท์หรือคำอธิบายบรรทัดเดียว
คอมไพล์เลอร์จะไม่คอมไพล์จุดนี้
unsigned char k;//0-255
ส่วนนี้เรียกว่าการประกาศตัวแปร(DECLARATION)
การประกาศส่วนนี้คือ 
การประกาศตัวแปรแบบโกลบอล(GLOBAL)
ข้อดีคือสามารถใช้ตัวแปรได้ทั่วทั้งไฟล์หรือโปรแกรม
ข้อเสียคือเปลืองแรม(RAM)
เพราะเป็นการจองแรมแบบถาวร
unsigned char คือชนิดข้อมูล(DATA TYPE)
มีค่าอยู่ในช่วง 0 – 255
k คือชื่อตัวแปรที่เราตั้งขึ้นเอง
ควรตั้งให้สอดคล้องกับความหมาย
; เครื่องหมายเซมิโคลอน
เรียกว่าสเตทเมนท์(STATEMENT)
หมายถึงจบคำสั่ง
ถ้าไม่มีเวลาคอมไพล์จะฟ้อง ERROR
==========================
ฟังชันย่อย
ส่วนนี้จะมีหรือไม่มีก็ได้
void DELAY_MS(unsigned int TIME){
//DELAY HAVE INPUT
  unsigned int
i,j;//0-65535
 
for(i=TIME;i!=0;i--)
  for(j=124;j!=0;j--);//ADJUST
TIME THIS ROW
}
/*CRYSTAL 12MHZ,
124=1MS PER ROUND*/
void แรกในตำแหน่งนี้เรียกว่าเอาท์พุท
(OUTPUT) 
หรือRETURN TYPE
void แปลว่าไม่มีในที่นี้หมายความว่าไม่มีเอาท์พุท
หรือ ไม่มี RETURN TYPE
DELAY_MS คือชื่อฟังชันที่เราตั้งขึ้นเอง
(unsigned int TIME) ส่วนวงเล็บนี้
เรียกว่าอินพุท(INPUT)
หรืออาร์กิวเมนท์(ARGUMENT)
ส่วนช่วงที่รับข้อมูล เรียกว่าพารามิเตอร์(PARAMETER)
unsigned int คือชนิดข้อมูล อยู่ในช่วง 0 – 65535
TIME คือชื่อตัวแปรที่ตั้งขึ้นเอง
หมายความว่า
ตอนนี้ตัวแปรชื่อTIME
จะมีค่าอยู่ในช่วง 0 – 65535
{  วงเล็บปีกกาเปิด หมายถึง
จุดเริ่มต้นการทำงานของฟังชัน
unsigned int i,j; 
เป็นการประกาศตัวแปรแบบโลคอล(LOCAL)
เพราะประกาศภายในวงเล็บปีกกาของฟังชัน
ข้อดีคือ ประหยัดแรม(RAM)
หมายถึงเมื่อจบฟังชัน
ก็จะคืนแรมให้กับไมโครคอนโทรลเลอร์
ข้อเสียคือสามารถใช้ตัวแปร
ได้เฉพาะในฟังชันที่ประกาศไว้เท่านั้น
i,j;  หมายความว่าเป็นการประกาศตัวแปร2ตัว
โดยใช้เครื่องหมายคอมมา มาคั่นไว้
for(i=TIME;i!=0;i--)
 
for(j=124;j!=0;j--);
คำสั่งวนลูปfor แบบ2ชั้น
} วงเล็บปีกกาปิด
หมายถึงสิ้นสุดหรือจบฟังชัน
/*  */ หมายถึงคอมเมนท์หรือคำอธิบายได้หลายบรรทัด
คอมไพล์เลอร์จะไม่คอมไพล์ส่วนนี้
===========================
ฟังชันหลัก
เป็นฟังชันที่จะต้องมี ถ้าไม่มีจะERROR
ฟังชันหลักจะเป็นจุดเริ่มต้นการทำงานของโปรแกรม
และเป็นจุดสิ้นสุดการทำงานของโปรแกรม
void main(void){
  P1=255;  //P1=PORT1
  DELAY_MS(500);//500=DELAY
500MS
  P1=0;
  DELAY_MS(500);
 }
===========================
void main(void)
void แรกในตำแหน่งนี้เรียกว่าเอาท์พุท
(OUTPUT) 
หรือRETURN TYPE
void แปลว่าไม่มีในที่นี้หมายความว่าไม่มีเอาท์พุท
หรือ ไม่มี RETURN TYPE
main คือชื่อฟังชันหลัก
ฟังชันนี้เราไม่สามารถตั้งขึ้นเองได้
(void) ส่วนวงเล็บนี้
เรียกว่าอินพุท(INPUT)
หรืออาร์กิวเมนท์(ARGUMENT)
ส่วนช่วงที่รับข้อมูล เรียกว่าพารามิเตอร์(PARAMETER)
ในที่นี้เป็น void แปลว่าไม่มี
{  วงเล็บปีกกาเปิด หมายถึง
จุดเริ่มต้นการทำงานของโปรแกรม
P1=255;  หมายถึงPORT1มีไฟทั้ง8ขา
DELAY_MS(500);  เรียกใช้ฟังชันDELAY_MS
หน่วงเวลา 500MS(ครึ่งวินาที)
P1=0;  หมายถึงPORT1 เป็นกราวด์ทั้ง8ขา
DELAY_MS(500);  เรียกใช้ฟังชันDELAY_MS
หน่วงเวลา 500MS(ครึ่งวินาที)
} วงเล็บปีกกาปิด
หมายถึงสิ้นสุดหรือจบโปรแกรม
////////////////////////////////////////////// 
ไม่มีความคิดเห็น:
แสดงความคิดเห็น