ตัวแปร FLOAT
INCLUDE ฟังชัน float
29/3/2557 SONGCHAI
PRAPATRUNGSEE
INCLUDE ฟังชัน float
ในกรณีที่มีการประกาศตัวแปรจำนวนมาก
และอยากเก็บไว้ใน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 <DIV.C> ชื่อไฟล์ที่อยู่ในวงเล็บมุม
#include ” DIV.C”
ชื่อไฟล์ที่อยู่ในเครื่องหมายคำพูด
#include < DIV.H> ชื่อไฟล์ที่อยู่ในวงเล็บมุม
#include ” DIV.H”
ชื่อไฟล์ที่อยู่ในเครื่องหมายคำพูด
สามารถใช้ได้เหมือนกันทั้งวงเล็บมุมและเครื่องหมายคำพูด
ถ้าเก็บใน C:\Keil\C51\INC
หรือเก็บไว้ในFOLDERที่รวบรวมไฟล์โปรเจคนั้น
ไม่ต้องมีDIRECTORY
บอกเส้นทางเพราะคอมไพล์เลอร์จะรู้เอง
แต่ถ้าจะเก็บไว้ในที่ของเราเอง
ต้องบอกDIRECTORYหรือบอกเส้นทางให้คอมไพล์เลอร์รู้
เช่น
#include < F:\DIVFUNC.C >
#include ” F:\DIVFUNC.C ”
#include < F:\DIVFUNC.H >
#include ” F:\DIVFUNC.H”
=====================
การประกาศตัวแปรแบบGLOBAL
คือการประกาศตัวแปรนอกฟังชัน
และเป็นการจองตัวแปรแบบถาวร
ข้อดีคือสามารถใช้ได้ทั่วทั้งไฟล์(โปรแกรม)
ข้อเสียคือเปลืองRAMและROM เช่น
#include <REGX51.H>/*H FILE NOT HEX FILE*/
unsigned char i,j;//0-255
float k,l,m;
/*float -999999967 UPTO 4294967295*/
void main(){
i=10,j=3;
//k=i/j;/*NOT
DISPLAY DOT*/
k=(float)i/j;/*CAN DISPLAY DOT*/
l=4294967295;//MAX4294967295
/* 4.294967e+009=4294967000 */
m=-999999967;/*LEAST
-999999967*/
/* -9999999e+008=999999900 */
}
/* GL0BAL
USE k=i/j; =DATA23,CODE140
IF USE k=(float)i/j; =DATA23,CODE402
*/
========================
การประกาศตัวแปรแบบLOCAL
คือการประกาศตัวแปรในฟังชัน
และเป็นการจองตัวแปรแบบชั่วคราว
ข้อดีคือประหยัดRAMและROM
เพราะสามารถใช้งานได้ภายในฟังชันเท่านั้น
เมื่อใช้งานเสร็จแล้วจะคืนพื้นที่ให้กับRAMและROM
เมื่อคืนพื้นที่ให้กับแรมและรอมแล้วก็จะสามารถ
ใช้งานชื่อตัวแปรซ้ำกันได้ในฟังชันอื่น
ยกเว้นฟังชันINTERRUPT
เพราะเมื่อเกิดการINTERRUPT
ก็จะกระโดดไปทำงานในฟังชันINTERRUPTก่อน
เมื่อเกิดการINTERRUPTหรือขัดจังหวะ
ฟังชันที่ใช้ชื่อซ้ำกันถ้ายังทำงานไม่เสร็จ
ก็จะยังไม่คืนพื้นที่ให้กับแรมและรอม
ดังนั้นค่าของตัวแปรที่ใช้ชื่อซ้ำกันนั้น
ก็จะไปทำงานในฟังชันINTERRUPT
ทำให้เกิดค่าที่ผิดพลาดได้
ในทางกลับกันถ้าฟังชัน INTERRUPTทำงานเสร็จ
ก็จะกลับมาทำงานต่อจากบรรทัดที่ทำงานค้างไว้
ในฟังชันmain(ฟังชันหลัก)
ก็จะทำให้ค่าผิดเพื้ยนได้เช่นเดียวกัน
ข้อเสียคือ
1 ไม่สามารถใช้งานนอกฟังชันได้ เช่น
#include <REGX51.H>/*H FILE NOT HEX FILE*/
void main(){
unsigned char
i,j;//0-255
float k,l,m;
/*float 999999967
UPTO 4294967295*/
i=10,j=3;
//k=i/j;/*NOT
DISPLAY DOT*/
k=(float)i/j;/*CAN DISPLAY DOT*/
l=4294967295;//MAX4294967295
/* 4.294967e+009=4294967000 */
m=-999999967;/*LEAST
-999999967*/
/* -9.999999e+008=999999900 */
}
/* LOCAL
USE k=i/j; =DATA21,CODE134
IF USE k=(float)i/j; =DATA22,CODE401
*/========================
การใช้ฟังชันFUNCTION
#include <REGX51.H>/*H FILE
NOT HEX FILE*/
float k;
/*float -999999967
UPTO 4294967295*/
float DIV(unsigned char i,j){
float l,m;
l=4294967295;//MAX4294967295
/* 4.294967e+009=4294967000
*/
m=-999999967;/*LEAST -999999967*/
/* -9.999999+008=999999900
*/
//return
i/j;/*NOT DISPLAY DOT*/
return(float)i/j;/*CAN
DISPLAY DOT*/
}
void main(){
k=DIV(10,3);
}
/*IF USE FUNCTION
USE k=i/j; =DATA21,CODE290
IF USE k=(float)i/j; =DATA23,CODE413
*/
==========================
การใช้งานINCLUDE
ฟังชัน
#include <REGX51.H>/*H FILE NOT HEX FILE*/
#include "DIVFUNC.C"
float DIV(unsigned char i,j);
float k;
/*float -999999967 UPTO 4294967295*/
void main(){
k=DIV(10,3);
}
/*IF USE FUNCTION
USE k=i/j; =DATA21,CODE290
IF USE k=(float)i/j; =DATA23,CODE413
*/
============================
ฟังชันDIV
float DIV(unsigned char i,j){
float l,m;
l=4294967295;//MAX4294967295
/* 4.294967e+009=4294967000 */
m=-999999967;/*LEAST
-999999967*/
/* -9.999999+008=999999900 */
//return
i/j;/*NOT DISPLAY DOT*/
return(float)i/j;/*CAN DISPLAY DOT*/
}
คำอธิบายโปรแกรม(ไฟล์)
#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ค่า
float k,l,m;
k,l,m; คือตัวแปรที่ตั้งชื่อเองอยู่ในช่วงชนิดข้อมูลfloat
อยู่ในช่วง
-999999967
UPTO 4294967295
e+008 =เลื่อนจุดทศนิยมขึ้น8จุด(ค่าเพิ่มขึ้น)
e+009 =เลื่อนจุดทศนิยมขึ้น9จุด(ค่าเพิ่มขึ้น)
void main( )
void =ไม่มี OUTPUT(RETURN TYPE)
main = FUNCTION
NAME, main=ชื่อฟังค์ชันหลัก
( ) =วงเล็บเปล่า=ไม่มี INPUT(ARGUMENTS)
{….} =วงเล็บปีกกา เป็นLOOPหรือขอบเขตของการทำงาน
i=10,j=3;
กำหนด i=10 และกำหนด
j=3
และจบคำสั่งด้วย “ ;
“ STATEMENT
k=(float)i/j;
(float)
คือการกำหนดให้ตัวแปร i เป็น floatแบบชั่วคราว
/ คือเครื่องหมายSLASH=เครื่องหมายหาร
k=(float)i/j; i/j เสร็จแล้วเอาผลลัพท์มาเก็บไว้ใน k
l=4294967295;
เอาค่าสูงสุดของfloat
คือ 4294967295
มาเก็บไว้ใน l
m=-999999967;
เอาค่าต่ำสุดของfloat
คือค่าลบ -999999967
มาเก็บไว้ใน m
จบบรรทัดนี้เข้าสู่โหมดประหยัดพลังงาน
float DIV(unsigned char i,j);
=FUNCTION PROTOTYPEหรือฟังชันต้นแบบ
ไฟล์หลักจะเรืยกใช้ INCLUDE
โดยการเรียกใช้ผ่าน FUNCTION
PROTOTYPE
หรือฟังชันต้นแบบ
float =มีOUTPUT(RETURN
TYPE)
เป็นชนิดข้อมูลมีค่าอยู่ในช่วง
-999999967
UPTO
4294967295
สามารถเป็นจุดทศนิยมได้ 6หลัก
DIV =
ชื่อฟังชันที่ตั้งขึ้นเอง
(
unsigned char i , j );
หมายความว่ามี INPUT(ARGUMENTS)
เป็นการประกาศตัวแปรแบบLOCAL
i และ j
คือตัวแปรที่ตั้งชื่อขื้นเอง
มีค่าอยู่ในช่วงชนิดข้อมูล
unsigned char
คือ0-255=256ค่า
{…..} =
ขอบเขตการทำงานของฟังชัน
float l,m; เป็นการประกาศตัวแปรแบบLOCAL
return (float)i/j;
หมายความว่า i/j
แล้วเก็บผลลัพท์ไว้ใน i
ในรูปแบบfloatชั่วคราว
return คือคำสั่งย้อนกลับหมายถึงเอาผลลัพท์ของ
i/j
ย้อนกลับไปให้ฟังชันDIV
ซึ่งมีOUTPUT(RETURN TYPE)
อยู่ในช่วงชนิดข้อมูลfloat
หมายความว่าฟังชันDIV
มีค่าเท่ากับผลลัพท์ของ i/j
ไม่มีความคิดเห็น:
แสดงความคิดเห็น