พิมพ์หน้านี้ - เกี่ยวกับPIC16f627a

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

► อิเล็กทรอนิกส์ ► => หุ่นยนต์-pcb-เทคโนโลยี่ใหม่ => ข้อความที่เริ่มโดย: got_extra ที่ กรกฎาคม 28, 2010, 07:52:49 PM



หัวข้อ: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กรกฎาคม 28, 2010, 07:52:49 PM
PIC16f627a มันสามารถเขียนโปรแกรมให้เป็นไฟวิ่งรูปแบบต่างๆหลายรูปแบบได้เปล่าครับ.....

คือว่าผมอยากทำแบบไฟวิ่งซัก8ดวง มี5รูปแบบ มีสวิสหนึ่งตัวกดหนึ่งครั้งเป็นไฟวิ่งรูปแบบ1  กดอีกครั้งเป็นไฟวิ่งรูปแบบ2  .............กดแล้วเปลียนไปเรื่อยๆ.จนวนกลับมาทึี่รูปแบบ1....แบบนี้อ่ะครับ...จะต้องเขียนโค้ดโปรแกรมยังไงอ่ะครับ...

 shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: JUB ที่ กรกฎาคม 29, 2010, 11:46:09 AM
ทำได้ครับ แล้วจะเขียนภาษาอะไรล่ะ....


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กรกฎาคม 29, 2010, 05:33:34 PM
เขียนเป็นภาษาซีครับ.....


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กรกฎาคม 30, 2010, 07:29:00 PM
ใครเขียนเป็นช่วยบอกทีครับ........... shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ กรกฎาคม 30, 2010, 09:25:16 PM
เขียนเป็นครับ ใจเย็นๆหน่อย สิฟ้าวไปไส


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กรกฎาคม 30, 2010, 10:40:04 PM
ผมลองเขียนไว้แล้ว คอมไฟล์ผ่านแล้วเบรินลงicต่อวงจรไม่มีอะไรเกิดขึ้น.งง...ปกติถ้าคอมไฟล์ผ่านเบรินผ่านก็น่าจะไม่มีปัญหา...ตอนแรกนึกว่าเครื่องโปรแกรมเสียแต่ลองเขียนโค้ดอื่นมันก็ทำงานได้อยู่เลยตัดปัญหาตรงนี้ไป...

โค้ดตามนี้ครับ
main()
{
  char i=0;
  cmcon=0x07;
  portA=0xFF;
  portB=0x00;
  while(1)
  {
  for(i=0;i<2;i++)
   {
   PORTB=(i);
    while(PORTA.F0==1)
   {
   }
     Delay_ms(500);
    }
if(i==0)
    {
      portB=0b11111111;
      Delay_ms(500);
      portB=0b00000000;
      Delay_ms(500);
    }
    else
    if(i==1)
    {
      portB=0b11110000;
      Delay_ms(500);
      portB=0b00001111;
      Delay_ms(500);
    }
    else
    {
      portB=0b11000000;
      Delay_ms(500);
      portB=0b00110000;
      Delay_ms(500);
      portB=0b00001100;
      Delay_ms(500);
      portB=0b00000011;
      Delay_ms(500);
    }
}
}


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ กรกฎาคม 30, 2010, 10:51:36 PM
ผมว่าผมเคยตอบไปแล้วนะปัญหาข้อนี้

1. โค๊ดผ่าน แต่ไม่ใช่ว่าถูก เช่นเลือกค่า configuration ของ pic ถูกแล้วหรือยัง ตรงด้านล่าง While จะมี for() อยู่ใส่ไว้ทำไม เท่าที่ดูโค๊ดมีผิดหลายที่นะ ใส่วงเล็บไว้ก็ไม่ครบ
2. ต่อวงจรถูกแล้วหรือยัง สวิทช์ต่อถูกไหม มีอาร์พูลอัพหรือเป่า ต่อแบบใช้คริสตอลไหม หรือว่าใช้ system osc ภายใน

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

ลองเอาโค๊ดนี่ไปทดสอบดู วงจรก็ให้ต่อแบบที่แนบมา รับรองทำงานได้เลย วิ่งปรู๊ดๆ เลือกได้ 5 แบบ จริงๆแล้วปรับเลือกความเร็วได้ด้วย แต่ยังไม่ได้เขียนใส่ ให้เขียนต่อเอง

//----------------------------------------------------------------------------
void timer(void){
  char p=0;
  for(p=0;p<20;p++){
    delay_ms(10);
    if(portA.F0==1){
      goto point_out;
    }
  }
  point_out:
}

main(){
char i=0;
cmcon=0x07;
trisA=0xFF;
trisB=0x00;
  while(1){
check_sw:
    if(portA.F0==1){
      i=i+1;
      while(portA.F0==1){;}
    }
    if(i>=6){i=0;}
   
if(i==0){
  portB=0b00000000;
  timer();
  portB=0b11111111;
  timer();
  goto check_sw;
}

if(i==1){
  portB=0b00000011;
  timer();
  portB=0b00001100;
  timer();
  portB=0b00110000;
  timer();
  portB=0b11000000;
  timer();
  goto check_sw;
}

if(i==2){
  portB=0b11000000;
  timer();
  portB=0b00110000;
  timer();
  portB=0b00001100;
  timer();
  portB=0b00000011;
  timer();
  goto check_sw;
}

if(i==3){
  portB=0b10000001;
  timer();
  portB=0b01000010;
  timer();
  portB=0b00100100;
  timer();
  portB=0b00011000;
  timer();
  goto check_sw;
}

if(i==4){
  portB=0b00011000;
  timer();
  portB=0b00100100;
  timer();
  portB=0b01000010;
  timer();
  portB=0b10000001;
  timer();
  goto check_sw;
}
   
if(i==5){
  portB=0b11110000;
  timer();
  portB=0b00001111;
  timer();
  goto check_sw;
}
   
  } // end while-1
} // end main
//-------------------------------------------------------------------


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กรกฎาคม 31, 2010, 06:03:01 PM
ยังอยู่ให้ขั้นเริ่มต้นครับพึ่งเล่นได้3อาทิตย์(มือใหม่ข้ามขั้นอยากเป็นเร็วๆ...อิอิ) เขียนให้ledกระพริบเป็นจังหวะตามที่ต้องการได้ ทำไฟวิ่งได้ เขียนให้กดสวิสinput ไฟติดกดสวิสไฟดับได้หนึ่งดวง...และแบบง่ายๆประมาณนี้ครับ.......

ขอบคุณมากครับทำได้แล้ว......เดี๋ยวผมจะลองทำให้มันปรับความเร็วได้ดู......แนะแนวทางซักนิดก็ดีครับมือใหม่จริงๆ... lv!


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 01, 2010, 10:41:41 AM
ขอเสริมหน่อยครับ ผมต่อแบบใช้คริสตอลมาโดยตลอด  แล้วถ้าจะต่อแบบใช้ system osc ภายใน(คือต่อแบบไม่ใช้คริสตอล) ต้องตั้งค่าอย่างไรครับ...... แล้วการต่อแบบใช้คริสตอลกับต่อแบบใช้ system osc ภายในมันแตกต่างการอย่างไร(ข้อดีข้อเสีย)การทำงานเหมือนกันเปล่า.... :(


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ สิงหาคม 02, 2010, 10:06:10 AM
- osc ภายใน ความเร็วสูงสุดได้แค่ 4 Mhz แต่ใช้คริสตอลได้สูงสุด 20Mhz
- osc ภายใน ความเสถียรต่ำ เปลี่ยนแปลงได้ตามภาวะอุณภูมิ เพราะเป็นแบบ RC ไม่เหมาะกับวงจรที่ต้องการความแม่นยำสูง แต่ใช้คริสตอล จะเสถียรมากกว่า
- osc ภายใน ไม่ต้องต่ออุปกรณ์เพิ่มเติมเพียงแค่เลือกตั้งค่าใน configuration bit ก็ใช้งานได้แล้ว ใช้คริสตอลต้องต่อคริสตอล ต่อซีคัพปลิ้ง

เท่าที่รู้มาก็แบบนี้นะครับ
การใช้งาน osc ภายในให้เปิดดาต้าชีทในหัวข้อ Configuration Bits หรือ CONFIGURATION WORD
เพราะแต่ละโปรแกรมการตั้งค่าจะไม่อยู่ที่เดียวกันแต่จุดประสงค์ก็คือตั้งค่าบิตพวกนี้นั่นเอง อย่าง MikroC ก็จะมีการตั้งค่าโดยเลือกตอนสร้างโปรเจค
หรือเลือกแถบเมนู Project --->Edit Project แล้วเลือกติ๊กถูกตรงหน้าช่องที่ต้องการกำหนด โดยดูอ้างอิงจากดาต้าชีท ว่าตัวไหนกำหนดอย่างไร


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 04, 2010, 07:17:44 PM
ขอบคุณครับ............ thank2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 08, 2010, 07:57:11 PM
เพิ่มเติมครับ ..โดยปกติเราจ่ายไฟให้วงจร วงจรจะเริ่มทำงานให้แบบที่1ก่อนพอเรากดสวิสก็จะเป็นแบบที่2  แบบที่3.......เป็นอย่างนี้ไปเรื่อยๆ  สมมุติว่่าวงจรทำงานอยู่ที่แบบที่3แล้วเอาแบตออก พอต่อแบตใหม่วงจรก็จะเริ่มต้นทำงานใหม่ในแบบที่1 แต่ผมอยากให้ต่อแบตใหม่วงจรก็จะทำงานแบบที่3เหมือนเดิม (แบบให้มันจำค่าครั้งสุดท้ายที่เอาแบตออก) จนกว่าจะกดสวิสจึงจะเปลี่ยนรูปแบบ  จะทำได้เปล่าครับ... shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ สิงหาคม 08, 2010, 09:26:24 PM
ได้ เก็บค่าตัวแปรที่ควบคุมรูปแบบไว้ใน EE-Prom เวลาเปิดขึ้นมาใหม่ ก็ให้อ่านค่าตัวแปรนั้นจาก EE-Prom ที่เราเก็บไว้มาใช้งาน
PIC16F627A ที่ใช้อยู่ก็มี EE-Prom อยู่ภายในด้วย การใช้งานถ้าโปรแกรม MikroC ก็ให้อ่านจาก Help


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 09, 2010, 12:23:16 PM
ได้ เก็บค่าตัวแปรที่ควบคุมรูปแบบไว้ใน EE-Prom เวลาเปิดขึ้นมาใหม่ ก็ให้อ่านค่าตัวแปรนั้นจาก EE-Prom ที่เราเก็บไว้มาใช้งาน
PIC16F627A ที่ใช้อยู่ก็มี EE-Prom อยู่ภายในด้วย การใช้งานถ้าโปรแกรม MikroC ก็ให้อ่านจาก Help

ลองอ่านดูแล้วครับ และลองอ่านกระทู้จากในgoogleแล้ว แต่ผมไม่เข้าใจจริงๆ.....มันต้องกำหนดค่าในโปรแกรม MikroC  หรือมันต้องเขียนโค้ดเพิ่มครับ...ถ้ามันต้องเขียนโค้ดเพิ่มช่วยยกตัวอย่างให้ดูหน่อยครับจากโค้ดข้างบนก็ได้อธิบายให้ผมด้วยก็ดีครับผมจะได้เข้าใจง่ายๆ......  ***ปล. ขอบคุณมากครับที่สอนผมมาโดยตลอดตอนนี้ผมเริ่มเข้าใจในหลายๆเรื่องแล้วครับ..... lv!**


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ สิงหาคม 09, 2010, 01:38:40 PM
ยกตัวอย่างโค๊ดบางส่วนมาจากด้านบนครับ

main(){
char i=0;            // ประกาศตัวแปร i เพื่อใช้เป็นตัวเลือกรูปแบบไฟวิ่ง
cmcon=0x07;     // ให้พอตทำงานแบบดิจิตอล
trisA=0xFF;        // ให้พอตเอ ทั้งหมดเป็น อินพุต
trisB=0x00;       // ให้พอตบี ทั้งหมดเป็น เอาพุต
i=eeprom_read(0x00);  // อ่านค่าจาก EE-Prom ในตำแหน่ง 0x00 แล้วเก็บค่าที่อ่านได้ในตัวแปร i
  while(1){
check_sw:
    if(portA.F0==1){   // ถ้ามีการกดสวิทช์ให้ทำงานภายในวงเล็บ
      i=i+1;                  // ตัวแปร i เพิ่มค่าขึ้นทีละ 1 ค่า
      while(portA.F0==1){;}  // ถ้ายังกดสวิทช์ค้างอยู่ ให้วนในลูป จนกว่าจะปล่อยสวิทช์
      if(i>=6){i=0;}               // กำหนดให้ i มีค่าไม่เกิน 6
      eeprom_write(0x00,i);  // เก็บค่า i ไว้ใน EE-Prom ในตำแหน่ง 0x00
    }
   
      ...
      ...
      ...

EE-Prom ในแต่ละตำแหน่งจะอ่านและเขียนได้ 1,000,000 ครั้งเท่านั้น ถ้าเกินกว่านี้จะทำให้อีพรอมตำแหน่งนั้นเสีย ดังนั้นในโปรแกรมของเราต้องดูให้ดี อย่าให้มีการวนลูปเขียนข้อมูลซ้ำๆเข้าในอีพรอม ตัวอย่างโปรแกรมที่เขียนให้ดู จะอ่านอีพรอมเฉพาะตอนที่เริ่มจ่ายไฟเข้าเครื่องเท่านั้น และจะเขียนอีพรอมเฉพาะตอนที่กดสวิทช์เท่านั้น

ถ้าวงจรของท่านกำหนดความถี่ที่ 4Mhz มันจะทำงานที่ความเร็ว 1 ล้านครั้งต่อ 1 คำสั่ง ดังนั้น ถ้าโปรแกรมมีการวนลูปในการอ่านและเีขียนอีพรอม อีพรอมตำแหน่งนั้นๆจะพังภายใน 1-2 วินาที


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 09, 2010, 02:15:25 PM
ผมใช้osc ภายในครับ ถ้าผมเขียนEE-Promในโค้ดด้านบนที่เป็นไฟวิ่ง5แบบจะได้เปล่าครับpicมันจะพังเปล่า

และที่ว่าEE-Prom ในแต่ละตำแหน่งจะอ่านและเขียนได้ 1,000,000 ครั้งเท่านั้น และตัวอย่างที่บอกจะเขียนอีพรอมเฉพาะตอนที่กดสวิทช์เท่านั้นหมายถึงถ้าผมกดสวิสเปลี่ยนรูปแบบใช้ไป 1,000,000 ครั้ง pic มันจะเสียเหรอครับผมเข้าใจถูกเปล่า .... shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: oley02 ที่ สิงหาคม 10, 2010, 02:04:34 PM
ไม่เสีย...ครับ  มันจะด้าน...  :)


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 10, 2010, 06:46:41 PM
แล้วผมอ่านในหนังสือเขาบอกว่า 'มีระบบป้องกันการคักลอกข้อมูล'  มันหมายถึงตั้งพาสเวอดให้picเปล่าครับ.. ถ้าผมจะตั้งมันต้องไปเซตค่ายังไงอ่ะครับในหนังสือเขาไม่บอกว่าต้องทำยังไง..... :(


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 10, 2010, 06:57:01 PM
ไม่เสีย...ครับ  มันจะด้าน...  :)

มันด้านนี่หมายถึง ผมกดสวิสเปลี่ยนรูปแบบไป1,000,000ครั้ง จากนั้นมันจะไม่จำข้อมูลไว้ในEE-Promแล้ว แต่ระบบที่เขียนไว้อย่างอื่นสามารถใช้ได้ปกติ  กดสวิสเปลี่ยนรูปแบบได้ปกติ  ไฟวิ่งที่เขียนไว้ติดตามปกติ  ขาดแต่พอถอดไฟออก แล้วจ่ายไฟใหม่มันจะเริ่มรูปแบบ 1 มันจะไม่เก็บค่าตัวแปรที่ควบคุมรูปแบบไว้ ประมาณนี้เปล่าครับ.....


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 11, 2010, 05:36:10 PM
เงียบเลย... shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ สิงหาคม 11, 2010, 08:56:41 PM
เวบบอร์ดก็คือเวบบอร์ดครับ ต้องทำใจ บางทีคำตอบมันก็ไม่ไ่ด้มาง่ายๆ ได้่มาแต่ก็ไม่ตรงคำถามเป๊ะๆ แต่ก็ต้องเอาไปเป็นแนวทาง
ไม่ได้กั๊ก แต่บอกไปง่ายๆเด่วก็ลืม
ต้องพยามช่วยตัวเองบ้าง
คำถามเรื่องป้องกันการก๊อปข้อมูลนั้น คำตอบอยู่ในหัวข้อที่ 9 กลับไปอ่าน แล้วทำตามหลายๆรอบ อ่านรายละเอียดให้เยอะๆ ว่าที่มันให้ติ๊กตรงช่องต่างๆ นั้นมันหมายความว่าอะไร
เรื่อง EE-Prom ด้านนั้นผมก็ยังไม่แน่ใจ ว่ามันด้านแล้ว มันจะอ่านข้อมูลออกมาไม่ได้ หรือว่ามันเป็นอย่างไร ยังไม่เคยได้ลองถึงขั้นนั้น

(http://i962.photobucket.com/albums/ae101/kiano555/leksound-IR/untitled.png)


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 11, 2010, 10:05:48 PM
ขอบคุณครับทำได้แล้วตอนนี้.......... thank2

ส่วนเรื่องเรื่อง EE-Prom ด้าน มันจะอ่านข้อมูลได้เปล่าใครลองแล้วเป็นยังไงเอาข้อมูลมาแชร์ด้วยกันหน่อยนะครับ....... ping!


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ สิงหาคม 11, 2010, 10:30:05 PM
ถ้าไฟวิ่งของท่าน กดเปลี่ยนค่าวันละ 100 ครั้ง
อีพรอมตำแหน่งนั้นจะมีอายุการใช้งาน 1000000/100=10000 วัน หรือ 10000/365=27 ปี!!
ถ้าใช้ตำแหน่งที่ 0x00 ผ่านไปแล้ว 27 ปีกลัวว่ามันจะพัง ก็ให้เปลี่ยนไปใช้ตำแหน่งอื่นอีก เพราะมันยังเหลือให้ท่านใช้งานอีก 127 ตำแหน่ง
สรุปได้ว่า ไฟวิ่งของท่านต้องเอามาอัพข้อมูลเพื่อเปลี่ยนตำแหน่งอีพรอมทุกๆ 27 ปี
รวมอายุการใช้งานไฟวิ่งและของอีพรอมในปิคตัวนี้เป็น 128x27=3465 ปีครับผม


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ สิงหาคม 12, 2010, 11:08:34 AM
ขอบคุณครับเข้าใจกระจ่างเลย....... thank2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: JUB ที่ สิงหาคม 15, 2010, 11:29:24 PM
ถ้า lock data แล้ว จะทำใ้ห้อายุการใช้งานของ flash สั้นลงมากนะครับควร lock เมื่อทำเป็น product ที่สมบูรณ์แล้วเท่านั้น
เวลา programs pic ไม่จำเป็นต้องลบก่อนครับเขียนทับได้เลย
ยืดอายุ flash ได้อีก (mcs-51 ต้องลบก่อนไม่งั้นเขียนไม่ได้....เวงเอ้ย) ซึ่งถ้าเราใช้ bootloader ก็จะเป็นลักษณะนี้....
ส่วนที่ว่า eeprom มันด้าน มันก็เหมือนเอาปากกาหมึกหมดไปเขียนหนังสือ ถามว่าเขียนได้มั๊ย ตอบ...เขียนได้ แต่รู้มั๊ยว่าเขียนอะไรไปบ้าง ตอบ...???
ซึ่งมันจะไปมีปัญหาตอน verify ครับ ว่าข้อมูลที่อ่านกับเขียนไม่ตรงกัน แล้วก็ error ... จบ :D


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กันยายน 08, 2010, 09:35:44 PM
ขอบคุณครับ......................... thank2


แล้วจากโค้ดด้านบนคำสั่ง  asm{}  เป็นคำสั่งอะไรหรอครับ....มันมีหลักการใช้ยังไงช่วยอธิบายให้หน่อยนึงครับ...... shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ กันยายน 09, 2010, 06:22:55 AM
ที่โปรแกรม MikroC กดปุ่ม F1 ที่คีย์บอร์ดเพื่อเปิด Help ในช่องค้นหาพิมพ์คำที่สงสัยลงไป เช่น asm

(http://i962.photobucket.com/albums/ae101/kiano555/leksound-IR/lek-so-001.png)


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กันยายน 10, 2010, 09:03:54 AM
ผมลองเข้าไปอ่านดูแล้วครับแต่ยังไม่ค่อยเข้าใจ..ภาษาอังกฤษไม่แข็งแรง.... shocked2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: JUB ที่ กันยายน 10, 2010, 08:24:26 PM
ขอบคุณครับ......................... thank2


แล้วจากโค้ดด้านบนคำสั่ง  asm{}  เป็นคำสั่งอะไรหรอครับ....มันมีหลักการใช้ยังไงช่วยอธิบายให้หน่อยนึงครับ...... shocked2

ใช้แทรกคำสั่งภาษา asm ครับ...


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: kiano♥ ที่ กันยายน 13, 2010, 08:38:51 AM
การเขียนโปรแกรมควบคุม Microcontroller มีหลายโปรแกรม หลายภาษา
อย่างที่ท่านกำลังศึกษาอยู่นี้คือภาษาซี ซึ่งจัดว่าเป็นภาษาชั้นสูง คนสามารถอ่าน
และทำความเข้าใจได้ง่าย เพราะคำสั่งบางอย่างก็เหมือนคนพูดกัน

asm ก็เป็นอีกภาษาซึ่งจัดว่าภาษาชั้นต่ำ คือไม่ใช่ภาษาคนพูดกันเลย
แต่สำหรับ Microcontroller เข้าใจภาษานี้ได้โดยตรง

asm{
....
....}

เป็นการแทรกภาษา asm เข้าในโค๊ดภาษาซีของเรา
สำหรับผมจะเลือกใช้ในกรณีดังนี้
1. ต้องการเข้าถึงระดับบิตของ mcu บางคำสั่งของภาษาซีก็ทำได้ แต่อาจจะเป็นคำสั่งที่ซับซ้อนสำหรับ mcu
2. มีเวลาน้อยให้ mcu คำนวน เช่นตัวอย่างที่ผมแนบมาคืออ่านค่าจากรีโมท ซึ่งมีเวลาน้อยมากที่จะให้ mcu คำนวนคำสั่งต่างๆ
ถ้าเขียนด้วยภาษาซีก็จะไม่มีเวลามากพอ ทำให้อ่านค่าจากรีโมทมีการผิดพลาดได้
3. ต้องการให้โค๊ดมีขนาดเล็กลง เพราะเขียนด้วยภาษาซีบางคำสั่งจะทำให้โค๊ดใหญ่มาก ทำให้เบิร์นลง MCU ไม่ได้ในกรณีใช้ MCU เบอร์เล็กความจำน้อย
4. คิดไม่ออก


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: got_extra ที่ กันยายน 13, 2010, 09:00:39 PM
ขอบคุณครับ............. thank2 thank2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: Tanaitp926 ที่ ตุลาคม 11, 2010, 04:05:36 AM
แนะนำสำหรับผู้ที่สนใจ ภาษาไหนก็ได้น่ะ ขอให้มี  ตัวคอมไฟล์เลอร์ที่สนับสนุนแล้วกัน เช่น MPASM  เพระว่าจริงๆแล้วภาษาเครื่องจริงๆมันเป็น Logic 0 กับ 1 เท่านั้น  ซึ่งจะได้ Logic 0 กับ 1 มาได้  ต้องวานพี่ คอมไฟล์เลอร์สำหรับอุปกรณ์ตัวนั้นแปรจริงๆ แค่ข้าม ตะกูล บิต กันไปแล้ว  ตัวคอมไฟล์เลอร์  ก็คนละตัวแล้ว   cry2!!  รูปแบบการแปรภาษาเครื่อง Logig 0 1ก็ไม่เหมือนกัน  เพราะฉะนั้นเล่นตัวไหน ศึกษาให้เก่ง และช่ำชองในตัวนั้นไปเลย  หรือ  ว่าง่ายๆ ไอซีเบอร์นั้นไปเลย ถ้าเล่นหลายตัว ก็ได้ตัวละนิด  พยายามหาภาษาชั้นสูงๆเข้าไว  แล้วให้มอง พี่คอมไฟล์เลอร์ ควบคู่ไปด้วยน่ะว่ามันแปลรูปแบบภาษาที่เราเขียนได้จริงๆ ไม่งันจะคอมไฟล์ไม่ผ่าน thank2
 


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: game5 ที่ ตุลาคม 22, 2010, 10:16:38 AM
รบกวนหน่อยคับ อยากทราบว่าถ้าเราต้องการให้มีสวิตซ์ในการเลือกรูปแบบการวิ่งเป็น3ตัว(ของเดิม1ตัว)จะเขียนอย่างไรโดยมีเงื่อนไขว่าถ้าเรากดสวิตซ์1(กดค้าง)แล้วมากดสวิตซ์ที่2เอาท์จะแสดงการวิ่งในแบบที่2เลยทันที มันจะต้องเขียนอย่างไรคับ ปล.ผมพึ่งหัดเขียนเองไม่มีอาจาร์ย undecided2


หัวข้อ: Re: เกี่ยวกับPIC16f627a
เริ่มหัวข้อโดย: Tanaitp926 ที่ ธันวาคม 14, 2010, 10:47:59 AM
  hungry2 :(