ช่วยหน่อยครับเขียนโปรแกรมpic
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ช่วยหน่อยครับเขียนโปรแกรมpic  (อ่าน 5220 ครั้ง)
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]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: