คำสั่ง preprocessor
#rom start_address เป็นการบอกคอมไพล์เลอร์ให้เขียนข้อมูล ลงในส่วน eeprom ครับ
โดย PIC 16FXXX จะมี address อยู่ที่ 0x2100
ดูเพิ่มเติมที่
http://www.thaimicrotron.com/CCS-628/EEPROM/InEEPROM.htmหากกำหนดแบบที่คุณกำหนดตามข้างบน มันจะทับกันเป็น 'A',0x4 ตัวเดียวครับ
ต้องกำหนดแบบเรียงต่อกันไปแบบนี้ครับ
#rom 0x2100={'A',0x2,'A',0x03','A',0x4}เนื่องจากแอดเดรสมีขนาด 2 ไบท์ การเข้าถึง eeprom ภายในตามต่ำแหน่ง คือ 00,02,04 สำหรับแอดเดรสของอุปกรณ์ 1,2,3 ตามลำดับ
ปกติแล้ว device แต่ละตัวจะมีแอดเดรสประจำตัวค่าเดียว แต่หากต้องการให้มีมากกว่านั้น
ให้กำหนด X10OUT ทั้ง 3 X10OUT1, X10OUT2, X10OUT3
#define X10OUT1 PIN_A2
#define X10OUT2 PIN_??
#define X10OUT3 PIN_???? หมายถึงพอร์ตที่ว่าง อย่าลืมเซ็ทเป็นเอาต์พุตด้วย
เพื่อไม่ให้สับสนให้ copy function
void X10FuncExe(int House,int Number,int Fn)ไปเป็น 3 function
void X10FuncExeADR1(int House,int Number,int Fn)
void X10FuncExeADR2(int House,int Number,int Fn)
void X10FuncExeADR3(int House,int Number,int Fn)โดยค่ำสังภายในจะต่างกันเล็กน้อยดั้งนี้ครับ
X10FuncExeADR1 //Get Address form EEPROM House & Number
H=read_eeprom(0);
N=read_eeprom(1);
ตรง X10OUT ให้เปลี่ยนเป็น X10OUT1
X10FuncExeADR2 //Get Address form EEPROM House & Number
H=read_eeprom(2);
N=read_eeprom(3);
ตรง X10OUT ให้เปลี่ยนเป็น X10OUT2
X10FuncExeADR3 //Get Address form EEPROM House & Number
H=read_eeprom(4);
N=read_eeprom(5);
ตรง X10OUT ให้เปลี่ยนเป็น X10OUT3
ส่วน case X10FN_STATUS_REQ ให้ตัดทิ้งไปก่อน
ใน function main() ตรง
X10FuncExe(rHouse,rNumber,rFunction);
ให้เปลี่ยนเป็น
X10FuncExeADR1(rHouse,rNumber,rFunction);
X10FuncExeADR2(rHouse,rNumber,rFunction);
X10FuncExeADR3(rHouse,rNumber,rFunction);