วันเสาร์ที่ 1 พฤศจิกายน พ.ศ. 2557

โครงสร้างภาษาซี MCS51




โครงสร้างภาษาซี 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(ครึ่งวินาที)

} วงเล็บปีกกาปิด หมายถึงสิ้นสุดหรือจบโปรแกรม

//////////////////////////////////////////////

ไม่มีความคิดเห็น: