วันพฤหัสบดีที่ 30 ตุลาคม พ.ศ. 2557

INCLUDE ตัวแปร




INCLUDE ตัวแปร
29/3/2557 SONGCHAI PRAPATRUNGSEE
INCLUDE ตัวแปร
ในกรณีที่มีการประกาศตัวแปรจำนวนมาก
และอยากเก็บไว้ในINCLUDE ทำดังนี้
1 ให้COPY ตัวแปรที่จะเอาเข้ามาในINCLUDE
2 คลิกFILE/NEW
3 วาง(PASTE)ลงในไฟล์ที่สร้างขึ้น
4 คลิกFILE
5 คลิกSAVE AS
6 ที่ช่องFILE NAMEให้พิมพ์ชื่อตามด้วย.C หรือ.H
7 คลิกSAVE
8 INCLUDEไฟล์ที่เราสร้างเสร็จแล้วเป็นไฟล์.C หรือ.H เช่น
#include <MUL.C> ชื่อไฟล์ที่อยู่ในวงเล็บมุม
#include ”MUL.C”  ชื่อไฟล์ที่อยู่ในเครื่องหมายคำพูด
#include <MUL.H> ชื่อไฟล์ที่อยู่ในวงเล็บมุม
#include ”MUL.H”  ชื่อไฟล์ที่อยู่ในเครื่องหมายคำพูด
สามารถใช้ได้เหมือนกันทั้งวงเล็บมุมและเครื่องหมายคำพูด
ถ้าเก็บใน C:\Keil\C51\INC
หรือเก็บไว้ในFOLDERที่รวบรวมไฟล์โปรเจคนั้น
ไม่ต้องมีDIRECTORY
บอกเส้นทางเพราะคอมไพล์เลอร์จะรู้เอง
แต่ถ้าจะเก็บไว้ในที่ของเราเอง
ต้องบอกDIRECTORYหรือบอกเส้นทางให้คอมไพล์เลอร์รู้ เช่น
#include < F:\MUL\MULVARIABLE.C >
#include ” F:\MUL\MULVARIABLE.C ”
#include < F:\MUL\MULVARIABLE.H >
#include ” F:\MUL\MULVARIABLE.H”
=====================

การประกาศตัวแปรแบบGLOBAL
คือการประกาศตัวแปรนอกฟังชัน
และเป็นการจองตัวแปรแบบถาวร
ข้อดีคือสามารถใช้ได้ทั่วทั้งไฟล์(โปรแกรม)
ข้อเสียคือเปลืองRAMและROM เช่น

#include <REGX51.H>

unsigned char i,j;//0-255
unsigned int k;//0-65535

void main(){
  i=10,j=200;
 
  k=i*j;
}
/*GLOBAL USE DATA=13BYTE,CODE=33BYTE*/
========================

การประกาศตัวแปรแบบLOCAL
คือการประกาศตัวแปรในฟังชัน
และเป็นการจองตัวแปรแบบชั่วคราว
ข้อดีคือประหยัดRAMและROM
เพราะสามารถใช้งานได้ภายในฟังชันเท่านั้น
เมื่อใช้งานเสร็จแล้วจะคืนพื้นที่ให้กับRAM
    เมื่อคืนพื้นที่ให้กับแรมแล้วก็จะสามารถ
ใช้งานชื่อตัวแปรซ้ำกันได้ในฟังชันอื่น
    ยกเว้นฟังชันINTERRUPT
เพราะเมื่อเกิดการINTERRUPT
ก็จะกระโดดไปทำงานในฟังชันINTERRUPTก่อน
เมื่อเกิดการINTERRUPTหรือขัดจังหวะ
ฟังชันที่ใช้ชื่อซ้ำกันถ้ายังทำงานไม่เสร็จ
ก็จะยังไม่คืนพื้นที่ให้กับแรม
ดังนั้นค่าของตัวแปรที่ใช้ชื่อซ้ำกันนั้น
ก็จะไปทำงานในฟังชันINTERRUPT
ทำให้เกิดค่าที่ผิดพลาดได้
    ในทางกลับกันถ้าฟังชัน INTERRUPTทำงานเสร็จ
ก็จะกลับมาทำงานต่อจากบรรทัดที่ทำงานค้างไว้
ในฟังชันmain(ฟังชันหลัก)
ก็จะทำให้ค่าผิดเพื้ยนได้เช่นเดียวกัน

ข้อเสียคือ
1 ไม่สามารถใช้งานนอกฟังชันได้ เช่น

#include <REGX51.H>

void main(){
  unsigned char i,j;//0-255
  unsigned int k;//0-65535
  i=10,j=200;
 
  k=i*j;
}
/*LOCAL USE DATA=11BYTE,CODE=29BYTE*/
========================

การใช้งานINCLUDE ตัวแปร

#include <REGX51.H>
#include "MULVARIABLE.C"

void main(){
  i=10,j=200;
 
  k=i*j;
}
/*INCLUDE=GLOBAL USE DATA=13BYTE,
CODE=33BYTE*/

============================

คำอธิบายโปรแกรม(ไฟล์)
    #include <REGX51.H>
# คือ เครื่องหมายSHARP เป็นพรีโปรเซสเซอร์ไดเรกทีฟ
    ( PREPROCESSOR  DIRECTIVE )
    หมายความว่าเป็นคำสั่งประมวลผลก่อน


include =เอาไฟล์ภายนอกเข้ามาร่วมในการคอมไพล์(แปล)
    หมายความว่าเวลากดBUILDหรือREBUILD
    ก็จะเข้าไปทำการคอมไพล์(แปล)ในไฟล์ include ก่อน
    จากนั้นจึงกลับมาคอมไพล์ต่อจากบรรทัดที่คอมไพล์ไปแล้ว
    ให้เป็นไฟล์.HEX หรือเลขฐาน16

<REGX51.H> = ชื่อที่ทางคอมไพล์เลอร์กำหนด
    แทนตำแหน่งแอดเดรสของไมโครคอนโทรลเลอร์
    เพื่อให้ง่ายต่อการจดจำและใช้งาน

.H คือไฟล์นามสกุล H FILE ไม่ใช่ HEX FILE


    unsigned char i,j;
, เครื่องหมายคอมมา หมายความว่า ยังมีอีก
; เครื่องหมายเซมิโคลอน หมายความว่าจบคำสั่ง
i,j คือตัวแปรที่ตั้งชื่อเองอยู่ในช่วงชนิดข้อมูลunsigned char
    อยู่ในช่วง0-255=256ค่า

   unsigned int k;
k คือตัวแปรที่ตั้งชื่อเองอยู่ในช่วงชนิดข้อมูลunsigned int
   อยู่ในช่วง0-65535=65536ค่า

    void main( )
void =ไม่มี OUTPUT(RETURN TYPE)
main = FUNCTION NAME, main=ชื่อฟังค์ชันหลัก
( ) =วงเล็บเปล่า=ไม่มี INPUT(ARGUMENTS)
{….} =วงเล็บปีกกา เป็นLOOPหรือขอบเขตของการทำงาน

     i=10,j=200;
กำหนด i=10 และกำหนด j=200
และจบคำสั่งด้วย ; STATEMENT

    k=i*j;
* คือเครื่องหมายดอกจัน=เครื่องหมายคูณ
k=i*j; i*jเสร็จแล้วเอาผลลัพท์มาเก็บไว้ใน k
   จบบรรทัดนี้เข้าสู่โหมดประหยัดพลังงาน

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