พิมพ์หน้านี้ - ช่วยหน่อยครับเขียนโปรแกรมpic

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

► อิเล็กทรอนิกส์ ► => หุ่นยนต์-pcb-เทคโนโลยี่ใหม่ => ข้อความที่เริ่มโดย: kitsada-num ที่ กุมภาพันธ์ 24, 2009, 02:03:50 PM



หัวข้อ: ช่วยหน่อยครับเขียนโปรแกรมpic
เริ่มหัวข้อโดย: kitsada-num ที่ กุมภาพันธ์ 24, 2009, 02:03:50 PM
ผมเริ่มเขียนโปรแกรม ใช้ mikroC กับ
pic16f627a เขียนแล้วรันใด้
แต่ผมอยากใส่ สวิต กด 1 ทีแล้วโปรแกรมรันจนจบ
แล้วหยุด ถ้า กด สวิต ใหม่อีกก็จะรันอีกเหมือนเดิม
ใส่ สวิต ที่ RA0 ขา17 แบบกดติด ปล่อยดับ
จะใช้คำสั่งอะไรครับเพิ่มตรง ใหน ผมเริ่มทำครั่งแรกครับ
ยังไม่มีความรู้ภาษาCเลย ใช้เปิดหนังสือแล้วทดลองเอา
   main()
{
  TRISB = 0x00;
  {
    PORTB = 0x01;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x02;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x04;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x08;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x01;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x08;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x04;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x10;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x02;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x01;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
  }
}
  ขอความช่วยเหลือหน่อยครับ   :D


หัวข้อ: Re: ช่วยหน่อยครับเขียนโปรแกรมpic
เริ่มหัวข้อโดย: kiano♥ ที่ กุมภาพันธ์ 24, 2009, 09:10:07 PM
ผมว่า ไฟของคุณมันวิ่งแปลกๆนะครับ ไม่เรียงกัน แต่ไม่เป็นไรครับ ผมลองทำตามที่คุณต้องการแล้วนะครับ คือ สตาร์ทแล้ว ไฟวิ่ง 1 รอบ แล้วหยุด รอจนกว่าจะมีการกดสวิทช์อีกครั้ง การต่อสวิทช์ ก็ต่อแบบ Active Hight คือ ถ้าไม่กดสวิทช์ จะมี 0 ไปจ่ายที่ไอซี ถ้ากดจะมี 1 ไปจ่าย

ขออนุญาติอธิบายนะครับ ถ้าสำหรับคนเริ่มต้นจริงๆ ถึงขั้นตอนการเขียนโปรแกรม (ตามความคิดแบบลูกทุ่งของผมนะครับ ผมก็เริ่มจากหนังสือที่คุณว่าเหมือนกัน)
เริ่มจาก เราต้องออกแบบโฟว์ชาร์ทการทำงานก่อน ว่าจะให้มันทำงานเป็นลักษณะอย่างไร แล้วเขียนรูปแบบการทำงานออกมาเป็นโฟว์ชาร์ท อย่างที่เห็นในรูป
เสร็จแล้ว ก็เขียนโปรแกรม ตามรูปแบบโฟว์ชาร์ท ที่ออกแบบไว้ ใจเย็นๆค่อยๆไล่ไปแต่ละขั้นตอนตามโฟว์ชาร์ท และคอมเม้นต์โปรแกรมไว้เป็นช่วงๆตามโฟว์ชาร์ท ก็จะสำเหร็จเองครับ ผมก็ไม่ค่อยเก่ง แต่พอทำได้นิดหน่อยครับ จึงอธิบายรูปแบบการทำของผมไว้ให้อ่าน

main()
{
  cmcon=0x07;
  trisA=0x01;
  trisB=0x00;
  while(1)
  {
    PORTB = 0x01;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x02;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x04;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x08;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x01;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x08;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x04;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x10;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x02;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
    PORTB = 0x01;
    Delay_ms(500);
    PORTB = 0x00;
    Delay_ms(300);
  }
  while(portA.F0==0)
  {
    delay_ms(10);
  }
}


หัวข้อ: Re: ช่วยหน่อยครับเขียนโปรแกรมpic
เริ่มหัวข้อโดย: kiano♥ ที่ กุมภาพันธ์ 24, 2009, 09:32:42 PM
ต้องขอโทษครับ ผมรีบร้อนตอบโพสไป อ่านไม่ค่อยละเอียด ที่จริงแล้วที่คุณต้องการคือ กดสวิทช์ ไฟวิ่ง 1 รอบ รอการกดใหม่ แล้วไฟจึงวิ่งอีกรอบ แต่ผมก็ได้แก้ไขให้แล้ว และโค๊ดข้างบน ที่จริงผมไม่ได้ตั้งใจให้มันผิด แต่มันมีที่ผิดอยู่ คือผมลืมใส่ตัว { } ไปหนึ่งคู่ มันจึงจะทำงานได้ตามโฟว์ชาร์ท งั้นถือว่าเป็นโจทย์ให้ลองฝึกหาเองนะครับ :> ถ้าลองดูโค๊ดตัวใหม่ที่ผมเขียนให้ละเอียด ก็จะรู้ ว่ามันขาดไปช่วงไหน ขอให้สนุกกับการทดลองนะครับ

main()
{
  cmcon=0x07;
  trisA=0x01;
  trisB=0x00;
  portB=0x00;
  while(1)
  {
    while(portA.F0==0)
    {
      delay_ms(10);
    }
    {
      PORTB = 0x01;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x02;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x04;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x08;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x01;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x08;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x04;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x10;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x02;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
      PORTB = 0x01;
      Delay_ms(500);
      PORTB = 0x00;
      Delay_ms(300);
    }
  }
}


หัวข้อ: Re: ช่วยหน่อยครับเขียนโปรแกรมpic
เริ่มหัวข้อโดย: kitsada-num ที่ กุมภาพันธ์ 25, 2009, 09:04:02 AM
ขอขอบพระคุณมากๆครับ คือผมจะใช้ โปรแกรมไปช่วยกดปุ่มโทรศัทพ์และช่วยกดสวิตระหัสมันเลยวิ่งแปลกๆครับ

 THANK!! :D


หัวข้อ: Re: ช่วยหน่อยครับเขียนโปรแกรมpic
เริ่มหัวข้อโดย: kitsada-num ที่ กุมภาพันธ์ 25, 2009, 10:32:57 AM
ใด้แล้วครับ เขียนตามคุณ kiano แล้วใด้เลยครับ เยี่ยมมากเลย ขอบพระคุณเป็นอยางสูงครับ
 thank2
ผมขอรวบกวน นิดหนึงครับ คือผมอยากจะทำ อีกแต่คราวนี้ต้องใช้ port ทาง output ประมาน 20 ไปควบคุมรีเลย์
 port input 15 จากคียแม็ดทริก จะใช้ Microcontroller ตัวใหนดีครับ ใช้อะไรเขียนดี
 แต่ผมคงต้องใช้เวลาเรียนรู้อีกนานแนนๆเลยครับ ในการเขียนภาษาc  ยากจังครับ
    ขอบคุณครับ


หัวข้อ: Re: ช่วยหน่อยครับเขียนโปรแกรมpic
เริ่มหัวข้อโดย: kiano♥ ที่ กุมภาพันธ์ 26, 2009, 08:07:57 AM
ผมไม่ค่อยเข้าใจที่คุณต้องการนะครับ ผมเข้าใจว่า คุณต้องการ คีย์แมทริก ขนาด 15 ปุ่ม แล้วมีเอาพุตสำหรับคุมรีเลย์อีก 20 เอาพุตใช่หรือไม่ครับ แต่ถ้าเป็นแบบนี้ผมคิดว่าใช้ตามวงจรที่ผมแนบมาคงจะได้นะครับ เป็นแนวทาง หรือไม่งั้นก็คงรอความคิดเห็นจากท่านผู้รู้ท่านอื่นเพิ่มเติมนะครับ สำหรับรายละเอียดไอซีดูได้ที่นี่นะครับ

http://www.es.co.th/search.asp?Word=pic16f877&PC=034016&Mode=1&tb=034016&stk=&pb=&view=&pic=checked