ช่วยหน่อยครับเขียนโปรแกรมpic
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ช่วยหน่อยครับเขียนโปรแกรมpic  (อ่าน 5548 ครั้ง)
kitsada-num
member
*

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

กระทู้: 4


อีเมล์
« เมื่อ: กุมภาพันธ์ 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);
  }
}
  ขอความช่วยเหลือหน่อยครับ   Cheesy


บันทึกการเข้า

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

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

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #1 เมื่อ: กุมภาพันธ์ 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);
  }
}
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

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

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #2 เมื่อ: กุมภาพันธ์ 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);
    }
  }
}
บันทึกการเข้า
kitsada-num
member
*

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

กระทู้: 4


อีเมล์
« ตอบ #3 เมื่อ: กุมภาพันธ์ 25, 2009, 09:04:02 am »

ขอขอบพระคุณมากๆครับ คือผมจะใช้ โปรแกรมไปช่วยกดปุ่มโทรศัทพ์และช่วยกดสวิตระหัสมันเลยวิ่งแปลกๆครับ

 THANK!! Cheesy
บันทึกการเข้า
kitsada-num
member
*

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

กระทู้: 4


อีเมล์
« ตอบ #4 เมื่อ: กุมภาพันธ์ 25, 2009, 10:32:57 am »

ใด้แล้วครับ เขียนตามคุณ kiano แล้วใด้เลยครับ เยี่ยมมากเลย ขอบพระคุณเป็นอยางสูงครับ
 
ผมขอรวบกวน นิดหนึงครับ คือผมอยากจะทำ อีกแต่คราวนี้ต้องใช้ port ทาง output ประมาน 20 ไปควบคุมรีเลย์
 port input 15 จากคียแม็ดทริก จะใช้ Microcontroller ตัวใหนดีครับ ใช้อะไรเขียนดี
 แต่ผมคงต้องใช้เวลาเรียนรู้อีกนานแนนๆเลยครับ ในการเขียนภาษาc  ยากจังครับ
    ขอบคุณครับ
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

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

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #5 เมื่อ: กุมภาพันธ์ 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
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: