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

LSVคลังสมองออนไลน์ "ปีที่14"

► อิเล็กทรอนิกส์ ► => ใช้งานPICด้วยภาษาASM => ข้อความที่เริ่มโดย: kiano♥ ที่ ธันวาคม 29, 2009, 11:47:43 AM



หัวข้อ: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: kiano♥ ที่ ธันวาคม 29, 2009, 11:47:43 AM
เนื้อหา...
โปรแกรมภาษาซีที่จะกล่าวถึงในกระทู้นี้ จะหมายถึงโปรแกรม MikroC ซึ่งดูรายละเอียดได้ในกระทู้ ของการใช้งานโปรแกรม MikroC นะครับ

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

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

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

main
{
    portB=0B00000011;
}

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


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: kiano♥ ที่ ธันวาคม 30, 2009, 07:14:11 AM
จากตัวอย่างด้านบน จะเห็นว่า มันไม่ได้ยากเลยใช่ไหมครับ
มาถึงตรงนี้ บางคนอาจจะคิดไปแล้ว ว่าถ้าอยากให้มันกระพริบล่ะ เขียนแบบนี้ได้ไหม

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 มิลลิเซค หลังจากนั้นจะทำงานที่แถวถัดไปด้านล่าง ดูรูปประกอบแล้วจะทำให้เข้าใจขึ้นครับ


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: kiano♥ ที่ มกราคม 01, 2010, 12:11:08 PM
- ฟังก์ชั่นภาษาซี

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


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: sua ที่ ตุลาคม 27, 2010, 04:29:52 AM
 THANK!!
กำลังรอตอนต่อไปครับ
 wav!!


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: E29IOU ที่ พฤศจิกายน 17, 2010, 09:52:21 AM
ท่านใช้โปรแกรมอะไรเขียนอะครับ ถึงมีวงจร และโปรแกรมเรียงทีละบรรทัดครับ


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: kiano♥ ที่ พฤศจิกายน 17, 2010, 01:02:39 PM
มันทำยากอ่ะครับ ถึงยังทำต่อไม่เสร็จนี่ไง

ก็เอาหลายๆโปรแกรมเปิดไว้ แล้วแคปเจอร์หน้าจอ แล้วเอาภาพมาวางซ้อนกัน
เปิดที 4-5 โปรแกรม ทำแล้วมึนเอง สุดท้ายแล้วทำไม่สำเหร็จ

ที่ใช้คือ
1. โปรแกรมเขียนโค๊ด เพื่อแคปเจอร์หน้าจอเอาภาพโค๊ดมา(MikroC)
2. โปรแกรม AutoCAD เพื่อแคปเจอร์หน้าจอเอาภาพวงจรมา
3. โปรแกรม Microsoft paint เพื่อตัดเอาภาพที่แคปเจอร์มาจากโปรแกรมต่างๆมาต่อกัน
4. โปรแกรม Adobe ImageReady 7.0 เพื่อทำเป็นภาพเคลื่อนไหว

เห้อ เหนื่อย ...


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: Nattawut-LSV Team ที่ พฤศจิกายน 17, 2010, 06:30:42 PM
มันทำยากอ่ะครับ ถึงยังทำต่อไม่เสร็จนี่ไง

ก็เอาหลายๆโปรแกรมเปิดไว้ แล้วแคปเจอร์หน้าจอ แล้วเอาภาพมาวางซ้อนกัน
เปิดที 4-5 โปรแกรม ทำแล้วมึนเอง สุดท้ายแล้วทำไม่สำเหร็จ

ที่ใช้คือ
1. โปรแกรมเขียนโค๊ด เพื่อแคปเจอร์หน้าจอเอาภาพโค๊ดมา(MikroC)
2. โปรแกรม AutoCAD เพื่อแคปเจอร์หน้าจอเอาภาพวงจรมา
3. โปรแกรม Microsoft paint เพื่อตัดเอาภาพที่แคปเจอร์มาจากโปรแกรมต่างๆมาต่อกัน
4. โปรแกรม Adobe ImageReady 7.0 เพื่อทำเป็นภาพเคลื่อนไหว

เห้อ เหนื่อย ...

สู้ต่อไปครับ...ผมจะเป็นกำลังให้ครับ..อิอิ  :P
พักตรงนี้ก่อน…มีแรงแล้วค่อยก้าวเดินต่อไปใหม่... tongue3


หัวข้อ: Re: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
เริ่มหัวข้อโดย: Dumrong007 ที่ กันยายน 26, 2011, 11:37:39 PM
รอบทต่อไป ::) ::)