พิมพ์หน้านี้ - ขอคำชี้แนะหน่อยครับ CCS pic16f627a

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

► อิเล็กทรอนิกส์ ► => หุ่นยนต์-pcb-เทคโนโลยี่ใหม่ => ข้อความที่เริ่มโดย: beeking ที่ เมษายน 25, 2015, 11:12:55 AM



หัวข้อ: ขอคำชี้แนะหน่อยครับ CCS pic16f627a
เริ่มหัวข้อโดย: beeking ที่ เมษายน 25, 2015, 11:12:55 AM
คือผมอยากทราบว่าจะเพิ่มให้ถ้ากดสวิตพร้อมกัน 3 ปุ่มจะให้หยุดการทำงานครับ มือใหม่ครับ  เงื่อนไขมีอยู่ว่า
1. กดสวิต 1 ดีเลย์ตัวที่ 1 ทำงาน
2. กดสวิต 2 ดีเลย์ตัวที่ 1และตัวที่ 2  ทำงานพร้อมกัน
3. กดสวิต 3 ดีเลย์ตัวที่ 2 ทำงาน
4. กดสวิต พร้อมกัน 3 ตัว ดีเลย์หยุดการทำงานทั้ง 2 ตัว

โค๊ดที่เขียนครับ
#include <16F627A.h>
#fuses HS,NOWDT,NOWDT,NOPROTECT,NOLVP
#use delay (clock=40000000)
void main(void)
{
      set_tris_b(0x00);
      set_tris_a(0xFF);
     
      while(TRUE){
            if (!input(PIN_A0))
           
                  {
                  output_high(PIN_B0);
                  delay_ms(500);
                  }
                if (input(PIN_A0))
                  {
                  output_low(PIN_B0);
                  }
            if (!input(PIN_A1))
                  {
                  output_high(PIN_B0);
                  output_high(PIN_B3);
                  delay_ms(500);
                  }
                if (input(PIN_A1))
                  {
                  output_low(PIN_B0);
                  output_low(PIN_B3);
                  }
            if (!input(PIN_A2))
                  {
                  output_high(PIN_B3);
                  delay_ms(500);
                  }
                if (input(PIN_A2))
                  {
                  output_low(PIN_B3);
                  }
           
      }
}
(http://upic.me/i/dx/hr351.jpg) (http://upic.me/show/55322070)
(http://upic.me/i/vn/324t2.jpg) (http://upic.me/show/55322071)
(http://upic.me/i/j7/peb-16f62x.png) (http://upic.me/show/55322072)


หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a
เริ่มหัวข้อโดย: tu2522-LSVteam♥ ที่ เมษายน 25, 2015, 05:46:58 PM
ใช้คำสั่ง  &&   คือ เงื่อนไข AND       
ตัวอย่างนะครับ

   if (input(PIN_A0) && input(PIN_A1) && input(PIN_A2))
        {
                  output_low(PIN_B0);
                  output_low(PIN_B3);
         }

คงจะพอไปต่อได้นะครับ


หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a
เริ่มหัวข้อโดย: beeking ที่ เมษายน 26, 2015, 10:07:32 AM
ขอบคุณครับเดียวขอลองแปป


หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a
เริ่มหัวข้อโดย: beeking ที่ เมษายน 26, 2015, 12:35:52 PM
#include <28a.h>
#fuses HS,NOWDT,NOWDT,NOPROTECT,NOLVP
#use delay (clock=40000000)
void main(void)
{
      BOOLEAN sw1=0,sw2=0,sw3=0;
      set_tris_b(0x00);
      set_tris_a(0xFF);
     
      while(TRUE)
               {
            if (!input(PIN_A0))
                  {
                  SW1 = 1;
                  delay_us(200);
                  }
            if (!input(PIN_A1))
                  {
                  SW2 =1;
                  delay_us(200);
                  }
            if (!input(PIN_A2))
                  {
                  sw3 = 1;
                  delay_us(200);
                  }
           
           if (sw1)
                   {
                  output_high(PIN_B0);
                  delay_ms(500);
                  output_low(PIN_B0);
                  sw1=0;
                  sw2=0;
                  sw3=0;
                 
                  }
            if (sw2)
                   {
                  output_high(PIN_B0);
                  output_high(PIN_B3);
                  delay_ms(500);
                  output_low(PIN_B0);
                  output_low(PIN_B3);
                  sw1=0;
                  sw2=0;
                  sw3=0;
                   }
                 
            if (sw3)
                   {
                  output_high(PIN_B3);
                  delay_ms(500);
                  output_low(PIN_B3);
                  sw1=0;
                  sw2=0;
                  sw3=0;
                  }
            if (sw1 && sw2 && sw3)
                   {
                  output_low(PIN_B0);
                  output_low(PIN_B3);
                  sw1=0;
                  sw2=0;
                  sw3=0;
                  }
               
      }
}

เขียนมาใหม่ก็เหมือนจะชนกับเขื่อนไข อื่น
1. กดสวิต 1 ดีเลย์ตัวที่ 1 ทำงาน
2. กดสวิต 2 ดีเลย์ตัวที่ 1และตัวที่ 2  ทำงานพร้อมกัน
3. กดสวิต 3 ดีเลย์ตัวที่ 2 ทำงาน
4. กดสวิต พร้อมกัน 3 ตัว ดีเลย์หยุดการทำงานทั้ง 2 ตัว (สมมุติว่ากดสวิตช์ไม่ทันกัน โดนสวิตไหนก่อน เงื่อนไขในสวิตนั้นก็จะทำงานก่อนเลย เลยเป็นว่าไม่ดับ  งงอีกแระ 555


หัวข้อ: Re: ขอคำชี้แนะหน่อยครับ CCS pic16f627a
เริ่มหัวข้อโดย: tu2522-LSVteam♥ ที่ เมษายน 26, 2015, 09:46:59 PM
การประกาศตัวแปร   SW1  SW2   SW3   ควรเอาไว้ด้านบน ของ void main(void)
ไม่ใช่เอามาไว้ข้างล่าง
แถมเอามา ใส่ใน while   และยังใส่  delay  เข้าไปอีก    ยังไงมันก็รวนครับ   เพราะคำสั่งซ้อนคำสั่ง