มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี

มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี

(1/2) > >>

kiano♥:
เนื้อหา...
โปรแกรมภาษาซีที่จะกล่าวถึงในกระทู้นี้ จะหมายถึงโปรแกรม MikroC ซึ่งดูรายละเอียดได้ในกระทู้ ของการใช้งานโปรแกรม MikroC นะครับ

- โครงสร้างโปรแกรมภาษาซี
- ฟังก์ชั่น
- ชนิดของตัวแปร
- ค่าคงที่
- การคำนวณทางคณิตศาสตร์
- เงื่อนไขการทำงานและลอจิก
- การกระทำทางบิต
- การทำงานแบบมีเงื่อนไข

-------------------------------------------------------------------------------------------------------

- โครงสร้างโปรแกรมภาษาซี
ภาษาซี จะประกอบด้วย 3 ส่วนหลักๆคือ 1. ฟังก์ชั่น 2.ตัวแปร 3.คำสั่งการทำงาน
ตัวอย่างโปรแกรมภาษาซี

main
{
    portB=0B00000011;
}

โปรแกรมนี้จะส่งค่า 0B00000011 ออกแสดงผลทางพอร์ต B ซึ่งอธิบายโปรแกรมได้ดังนี้
main เป็นฟังก์ที่ต้องมีในทุกโปแกรม เป็นฟังก์ชั่นหลัก และส่วนอื่นๆจะอยู่ภายในเครื่องหมาย { } ทุกครั้ง
portB=0B00000011; เป็นคำสั่งในการส่งค่า 0B00000011 ออกแสดงผลทางพอร์ต B นั่นหมายถึงถ้าพอร์ต B ซึ่งมี 8 บิตได้ต่อหลอด LED ไว้ มันก็จะติด 2 หลอด คือบิตที่ 0 กับบิตที่ 1 คำสั่งในโปรแกรมภาษาซี ต้องลงท้ายด้วยเครื่องหมาย  ;  ด้วยทุกครั้ง
นี้คือตัวอย่างการเขียน code ในถาษา C จะเห็นว่าการเขียนจะเขียนเรียงลำดับลงมาทำให้อ่านง่าย
จากการเขียนโค๊ดด้านบน ถ้าต่อวงจรตามรูปด้านล่าง หลอดจะติดตามภาพครับ

kiano♥:
จากตัวอย่างด้านบน จะเห็นว่า มันไม่ได้ยากเลยใช่ไหมครับ
มาถึงตรงนี้ บางคนอาจจะคิดไปแล้ว ว่าถ้าอยากให้มันกระพริบล่ะ เขียนแบบนี้ได้ไหม

main
{
    trisB=0B00000000;
    portB=0B00000011;
    portB=0B00000000;
}

คำอธิบายโค๊ดดังนี้ครับ
trisB=0B00000000; จะกำหนดให้รีจิสเตอร์ trisB เป็น 0 ทุกบิต เพื่อให้พอร์ต B ทุกบิตเป็นเอาพุต
portB=0B00000011;  แถวนี้จะส่งค่า portB=0B00000011 ออกแสดงผลทางพร์อต B หลอดจะติดสองหลอด
portB=0B00000000;  แถวนี้จะส่งค่า portB=0B00000000 ออกแสดงผลทางพร์อต B หลอด LED จะดับหมดทุกหลอด แล้วก็จบการทำงาน

อ้าว แล้วถ้าอยากให้มันกระพริบต่อเนื่องล่ะ ทำอย่างไร?? ก็จะเขียนได้ดังนี้ครับ

main
{
trisB=0B00000000;
while(1)
{
    portB=0B00000011;
    portB=0B00000000;
}
}

จะเห็นว่า เพิ่มเข้ามาอีกคือ while(1) ผลคือ จะเป็นการวนทำงานคำสั่งที่อยู่ใน {} ของ while(1) แบบไม่มีจบ จนกว่าจะหยุดจ่ายไปให้กับวงจร ถ้าเขียนโค๊ดตามนี้ หลอดก็จะกระพริบต่อเนื่อง จนกว่าจะหยุดจ่ายไฟครับ ถ้าต่อดูการแสดงผลก็จะเห็นว่า หลอดติดตลอดเวลา ไม่เห็นกระพริบเลย .....
ไม่ใช่หรอกครับ ที่จริงมันกระพริบ แต่มันจะกระพริบด้วยความเร็ว 1,000,000 ครั้งต่อวินาที(1Mhz) ซึ่งตาของเรามองไม่ทัน อ้าว แล้วทำยังไงล่ะครับ

ก็ต้องเพิ่มการหน่วงเวลาให้มันครับ คือหลังจากหลอดติดแล้ว มันก็จะติดค้างไว้แบบนั้นก่อน จนกว่าลูปการหน่วงเวลาจบ แล้วหลอดถึงจะดับ แล้วก็ดับค้างไว้แบบนั้นก่อน รอลูปการหน่วงเวลา แล้วก็วนการทำงานแบบนี้ไปเรื่อยๆ จนกว่าจะหยุดจ่ายไฟ จะได้โค๊ดตามด้านล่างครับ

main()
{
    trisB=0B00000000;
    while(1)
    {
        portB=0b00000011;
        delay_ms(500);
        portB=0b00000000;
        delay_ms(500);
    }
}

อธิบายแถว delay_ms(500); ได้ดังนี้ครับ ... เป็นรูปแบบการเขียนในโปรแกรม MikroC ที่ต้องเขียนในรูปแบบนี้ ผลจากการเขียนคือ ตัวซีพียูจะทำงานนับวนลูปไปเรื่อยๆ จนกว่าจะได้รอบการทำงานเป็น 500 มิลลิเซค หลังจากนั้นจะทำงานที่แถวถัดไปด้านล่าง ดูรูปประกอบแล้วจะทำให้เข้าใจขึ้นครับ

kiano♥:
- ฟังก์ชั่นภาษาซี

จากกระทู้ที่แล้วเราได้รู้โครงสร้างของภาษาซีที่ใช้กับ PIC แล้ว ต่อมาจะมาดูฟังก์ชั่นที่ใช้ในการเขียนโค๊ดกันครับ
เนื้อหา....

sua:
 THANK!!
กำลังรอตอนต่อไปครับ
 wav!!

E29IOU:
ท่านใช้โปรแกรมอะไรเขียนอะครับ ถึงมีวงจร และโปรแกรมเรียงทีละบรรทัดครับ

นำร่อง

[0] ดัชนีข้อความ

[#] หน้าถัดไป