หลังจากที่ได้วงจร ได้โฟว์ชาร์ทการทำงานของโปแกรมกันแล้ว ก็มาเริ่มเขียนโค๊ดโปรแกรมกันเลยครับ เริ่มจากเปิดโปรแกรมเขียนโค๊ดที่ชื่อว่า MikroC ขึ้นมาแล้วสร้างโปรเจคขึ้นมาใหม่ ตามขั้นตอนต่างๆในภาพครับ ( หรือดูขั้นตอนต่างๆได้จากกระทู้
http://www.ubmthai.com/leksoundsmf3/index.php?topic=67451.0 )
เริ่มจากสร้างโฟลเดอร์ใหม่ขึ้นมาก่อน เพื่อใช้เก็บโค๊ดที่เราจะเขียนขึ้นครับ ตามภาพด้านล่าง
จากนั้นเปิดโปรแกรม MikroC แล้วสร้างโปรเจคใหม่ขึ้นมาตามภาพด้านล้าง
แล้วใส่รายละเอียดต่างๆของโปรเจคตามภาพตัวอย่างครับ
จากภาพด้านบน จะมีช่องให้เราใส่ค่าต่างๆ ซึ่งมีคำอธิบายไว้ในภาพแล้ว และมีที่น่าสังเกตุตรงช่อง config ของ PIC ถ้ายังไม่เข้าใจก็ให้เลือกติ๊กตามตัวอย่างในภาพเลยครับ อธิบายตามตัวที่เลือกติ๊กได้ดังนี้
_WDT_OFF ปิดการทำงานของ วอทดอก ไทม์เมอร์
_LVP_OFF ปิดการทำงานแบบ โลว์โวลเตจโปรแกรมเมอร์ เพื่อให้ใช้ขาของพอร์ต B ได้ครบทุกขา
_MCLRE_OFF ปิดการทำงานของขารีเซ็ต เพื่อไม่ต้องต่ออาร์พูลอัพที่ขารีเซ็ต และสามารถนำขารีเซ็ตมาเป็นอินพุตได้ นั่นคือขา 4 (RA5)
_INTRC_OSC_NOCLKOUT เลือกสัญญาณ CLK จากภายในแบบ RC และขา CLK OUT ใช้งานเป็น อิน-เอาท์พุตได้ นั่นคือขา 15 (RA6)
_HS_OSC เลือกใช้คริสตอลความถี่สูง จากความถี่เท่าไหร่ถึงเท่าไหร่ลืมแล้วครับ ต้องเปิดอ่านในดาต้าชีท แต่ถ้าใช้ CLK ภายในไม่ต้องติ๊กตัวนี้ก็ได้
หลังจากที่เลือกตั้งค่าต่างๆของโปรเจคเสร็จแล้ว ก็เริ่มเขียนโค๊ดกันได้เลย ซึ่งโค๊ดจากด้านล่างนี้ ก๊อปไปวางไว้ที่หน้าต่างเขียนโค๊ดของ MikroC ได้เลยครับ
//************************************************************************************
//************************************************************************************
//
// ไฟวิ่งเลือกได้ 3 รูปแบบ
// PIC16F627A
// http://www.ubmthai.com/leksoundsmf3/index.php?PHPSESSID=911e51fa19d3a848c23316dcb39cf132;topic=67728.msg357764#msg357764
//
//************************************************************************************
void timer(void); //ประกาศฟังก์ชั่นใช้ร่วมกัน
main()
{
//--------------- จากโฟว์ชาร์ทส่วนที่ 1 กำหนดพอร์ตต่างๆ
char p=0; //กำหนดตัวแปร p เป็นแบบ char มีค่าเท่ากับ 0
cmcon=0x07; //รีจิสเตอร์ cmcon มีค่าเท่ากับ 00000111 เพื่อให้พอร์ต A รับสัญญาณแบบดิจิตอล
portA=0xFF; //ให้พอร์ต A ทุกขาเป็น อินพุต
portB=0x00; //ให้พอร์ต B ทุกขาเป็น เอาพุต
//--------------- จากโฟว์ชาร์ทส่วนที่ 2 ตรวจสอบการกดสวิทช์ SW1
while(1)
{
if(portA.f0==0)
{
p++;
while(portA.f0==0)
{
portB=0xFF;
timer();
}
if(p>2)
{
p=0;
}
}
//--------------- จากโฟว์ชาร์ทส่วนที่ 3 ตรวจสอบค่าของ P เพื่อกำหนดรูปแบบการวิ่ง
if(p==0) //ถ้า P มีค่าเท่ากับ 0 ให้วิ่งรูปแบบที่ 1
{
portB=0b11111111;
timer();
portB=0b00000000;
timer();
}else{
if(p==1) //ถ้า P มีค่าเท่ากับ 1 ให้วิ่งรูปแบบที่ 2
{
portB=0b11110000;
timer();
portB=0b00001111;
timer();
}else{ //ไฟวิ่งรูปแบบที่ 3
portB=0b11000000;
timer();
portB=0b00110000;
timer();
portB=0b00001100;
timer();
portB=0b00000011;
timer();
}
}
} // end while-1
} // end main
void timer(void)
{
delay_ms(100);
}
//************************************************************************************
//************************************************************************************
จากรูปด้านล่างคือการคอมไพล์โค๊ดผ่านแล้ว
มาดูกันครับ ว่าหลังจากกดคอมไพล์ผ่านแล้ว เราจะได้ไฟล์อะไรบ้าง ซึ่งจะได้ตามรูปด้านล่างเลยครับ ไฟล์ที่วงสีแดงไว้คือ HEX ไฟล์ หรือไฟล์ที่แปลงแล้วเป็นภาษาเครื่อง เราจะนำไฟล์ตัวนี้เองครับ ไปเบิร์นเข้า PIC