Custom Search
มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี
MUSICONICA
หน้า: [1]
  พิมพ์  
ผู้เขียน หัวข้อ: มาเริ่มเขียนโค๊ดควบคุม PIC ด้วยภาษาซี  (อ่าน 11649 ครั้ง)
kiano♥
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน 333
ออฟไลน์ ออฟไลน์

กระทู้: 564


Macplus UD Tel.083-6401595


เว็บไซต์
« เมื่อ: ธันวาคม 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 จะเห็นว่าการเขียนจะเขียนเรียงลำดับลงมาทำให้อ่านง่าย
จากการเขียนโค๊ดด้านบน ถ้าต่อวงจรตามรูปด้านล่าง หลอดจะติดตามภาพครับ
บันทึกการเข้า

kiano♥
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน 333
ออฟไลน์ ออฟไลน์

กระทู้: 564


Macplus UD Tel.083-6401595


เว็บไซต์
« ตอบ #1 เมื่อ: ธันวาคม 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 มิลลิเซค หลังจากนั้นจะทำงานที่แถวถัดไปด้านล่าง ดูรูปประกอบแล้วจะทำให้เข้าใจขึ้นครับ
บันทึกการเข้า
kiano♥
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน 333
ออฟไลน์ ออฟไลน์

กระทู้: 564


Macplus UD Tel.083-6401595


เว็บไซต์
« ตอบ #2 เมื่อ: มกราคม 01, 2010, 12:11:08 pm »

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

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

คะแนน 0
ออฟไลน์ ออฟไลน์

กระทู้: 10


« ตอบ #3 เมื่อ: ตุลาคม 27, 2010, 04:29:52 am »

 THANK!!
กำลังรอตอนต่อไปครับ
 wav!!
บันทึกการเข้า
E29IOU
member
*

คะแนน 0
ออฟไลน์ ออฟไลน์

กระทู้: 15



« ตอบ #4 เมื่อ: พฤศจิกายน 17, 2010, 09:52:21 am »

ท่านใช้โปรแกรมอะไรเขียนอะครับ ถึงมีวงจร และโปรแกรมเรียงทีละบรรทัดครับ
บันทึกการเข้า
kiano♥
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน 333
ออฟไลน์ ออฟไลน์

กระทู้: 564


Macplus UD Tel.083-6401595


เว็บไซต์
« ตอบ #5 เมื่อ: พฤศจิกายน 17, 2010, 01:02:39 pm »

มันทำยากอ่ะครับ ถึงยังทำต่อไม่เสร็จนี่ไง

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

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

เห้อ เหนื่อย ...
บันทึกการเข้า
Nattawut-LSV Team
พนักงานวิทยุสมัครเล่น(E23IUY)
.กลุ่มผู้มีน้ำใจงาม.
member
*

คะแนน 786
ออฟไลน์ ออฟไลน์

กระทู้: 3490

ผมไม่เก่งทุกๆเรื่อง....แต่ขยันทุกๆด้าน


เว็บไซต์
« ตอบ #6 เมื่อ: พฤศจิกายน 17, 2010, 06:30:42 pm »

มันทำยากอ่ะครับ ถึงยังทำต่อไม่เสร็จนี่ไง

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

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

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

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

นายณัฐวุฒิ ค่าไทยสง Mr.Nattawut  Kathaisong  { D2058-LSV Team } คณะวิศวกรรมศาสตร์ สาขา คอ.บ.วิศวกรรมไฟฟฟ้า มหาวิทยาลัยเทคโนโลยีราชมงคลล้านนา พิษณุโลก
E-mail: Nat.2536@hotmail.com
พบเห็นกระทู้ละเมิดลิขสิทธิ์ กรุณาPMแจ้งทีมงานหรือเมล์ lsv2005@hotmail.com ..ขอขอบคุณ
Dumrong007
member
*

คะแนน 0
ออฟไลน์ ออฟไลน์

กระทู้: 87


« ตอบ #7 เมื่อ: กันยายน 26, 2011, 11:37:39 pm »

รอบทต่อไป Roll Eyes Roll Eyes
บันทึกการเข้า
หน้า: [1]
  พิมพ์  
 
กระโดดไป:  

Theme by webtechnica.com.