เขียน Mikro ให้เป็นแบบ Main Program แล้ว เขียน Sub Program ได้หรือเปล่าครับ
LSVคลังสมองออนไลน์ "ปีที่21"
มีนาคม 29, 2024, 11:59:45 AM *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
 
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: เขียน Mikro ให้เป็นแบบ Main Program แล้ว เขียน Sub Program ได้หรือเปล่าครับ  (อ่าน 22171 ครั้ง)
yanyongs
member
*

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

กระทู้: 40


« เมื่อ: กุมภาพันธ์ 01, 2012, 04:54:22 PM »

คือผมเคยเขียน Program ในเครื่อง CNC
จะมีโครงสร้างการทำงานที่ ซ้อนกันอยู่ได้เช่น
- เขียน Program num1 เป็น Main Program
- แล้วเขียน Program num 2 ,3,4... เป็น sub program (โปรแกรมส์ ย่อย)
-แล้วเวลาจะใช้งาน ก็เขียน Program Main ไปดึงมาใช้ ประมาณนี้ครับ
เพราะความต้องการใช้งานผมคือ คำสั่งเดิม ๆ ที่เคยใช้ จะได้ไม่ต้อง Copy มาใน Program ต่อ ๆ ไป
ไม่ทราบว่า MCU สามารถทำอย่างงี้ได้ใหมครับ ท่านอาจารย์ทั้งหลาย Angry
โปรดชี้แนะด้วยครับ


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

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

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

กระทู้: 570


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

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #1 เมื่อ: กุมภาพันธ์ 01, 2012, 05:39:38 PM »

ทำได้ครับ
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #2 เมื่อ: กุมภาพันธ์ 02, 2012, 07:38:23 AM »


ขอตัวอย่างได้ใหมครับ อาจารย์ kiano
หรือ concept อะไรก็ได้แล้วแต่จะกรุณาครับผม lv!
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

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

กระทู้: 570


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

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #3 เมื่อ: กุมภาพันธ์ 02, 2012, 08:51:10 AM »

ยกตัวอย่างง่ายๆ และเห็นภาพชัดเจนเลยก็คือ delay หรือหน่วงเวลา
สร้างฟังก์ชั่นนี้ขึ้นมา แล้วสามารถเรียกใช้ได้ จากฟ้งก์ชั่นเมน หรือทุกๆฟังก์ชั่น

void timer(int milisecond){    // ประกาศฟังก์ชั่นใช้ร่วมกัน ชื่อ timer
    while(milisecond>0){        // ตรวจสอบค่าของตัวแปร milisecond ถ้ามีค่ามากกว่า 0 ให้วนลูป
    milisecond--;                    // ลดค่าตัวแปร milisecond ลง 1 ค่า
    delay_ms(1);                    // หน่วงเวลา 1 มิลลิวินาที
    }
}

จากฟังก์ชั่นเมน หรือฟังก์ชั่นย่อยอื่นๆ เวลาจะเรียกใช้งานฟังก์ชั่น timer ให้ใช้คำสั่งดังนี้
main(void){
    ......
    ......
    timer(ใส่ค่าตัวเลขที่ต้องการหน่วงเวลาหน่วยเป็นมิลลิวินาที);
    ......
    ......
}
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #4 เมื่อ: กุมภาพันธ์ 03, 2012, 08:46:00 AM »

ยกตัวอย่างง่ายๆ และเห็นภาพชัดเจนเลยก็คือ delay หรือหน่วงเวลา
สร้างฟังก์ชั่นนี้ขึ้นมา แล้วสามารถเรียกใช้ได้ จากฟ้งก์ชั่นเมน หรือทุกๆฟังก์ชั่น

void timer(int milisecond){    // ประกาศฟังก์ชั่นใช้ร่วมกัน ชื่อ timer
    while(milisecond>0){        // ตรวจสอบค่าของตัวแปร milisecond ถ้ามีค่ามากกว่า 0 ให้วนลูป
    milisecond--;                    // ลดค่าตัวแปร milisecond ลง 1 ค่า
    delay_ms(1);                    // หน่วงเวลา 1 มิลลิวินาที
    }
}

จากฟังก์ชั่นเมน หรือฟังก์ชั่นย่อยอื่นๆ เวลาจะเรียกใช้งานฟังก์ชั่น timer ให้ใช้คำสั่งดังนี้
main(void){
    ......
    ......
    timer(ใส่ค่าตัวเลขที่ต้องการหน่วงเวลาหน่วยเป็นมิลลิวินาที);
    ......
    ......
}
ขอบคุณ น้า Kiano ที่อื้อเฟื้อครับ
แล้วจำพวก IC Memmory ใช้งานอย่างไรครับ
เช่นถ้าว่าเราเขียน Program งานใว้ 3 Program และเก็บใน IC memmory
ถ้าต้องการ Program ใดๆ มาทำงาน ก็ ให้ MCU เรียกมาใช้ได้เลย อย่างนี้หละครับ
ต้องทำอย่างไรครับ Cheesy
บันทึกการเข้า
JUB
Full Member
member
**

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

กระทู้: 1157



« ตอบ #5 เมื่อ: กุมภาพันธ์ 03, 2012, 04:27:49 PM »

จุดประสงค์ต้องการทำอะไรครับ...?
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #6 เมื่อ: กุมภาพันธ์ 06, 2012, 02:25:53 PM »

จุดประสงค์ต้องการทำอะไรครับ...?
ขอบคุณครับที่น้าให้ความสนใจเข้ามาดู
สิ่งที่ผมต้องการใช้งานคือ
 สมมุติว่า ตอนนี้ผมให้ Program ที่ 1 ทำงานในการคำนวนและปรับแรงดันให้กับ คันเร่งไฟฟ้ารถยนต์ ฯลฯ
แต่อีกวัน ผมไม่ต้องการใช้งาน แต่จะให้วงจรเดิมนี้ใช้ Program ที่ 2 ทำการ ตรวจสอบความร้อนเครื่องยนต์ ฯลฯ แทน
ประมาณนี้ครับผม
บันทึกการเข้า
JUB
Full Member
member
**

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

กระทู้: 1157



« ตอบ #7 เมื่อ: กุมภาพันธ์ 06, 2012, 03:05:49 PM »

เดี๋ยวนี้ microcontroller มี flash มากกว่าเมื่อก่อนเยอะครับราคาโครตถูกเลย 64k นี่อยู่หลักร้อยครับ
คุณไม่จำเป็นต้องใช้ program memory ภายนอกเลย ง่ายๆถ้าจะให้ใช้หลายๆโปรแกรมก็กำกนดจุด
vector ของแต่ล่ะโปรแกรมแล้วตรวจสอบจาก jumper selector ภายนอกหรืออะไรก็แล้วแต่
เมื่อเริ่มการทำงาน mcu จะมาตรวจสอบ jumper ว่าเลือกโปรแกรมอะไรไว้แล้วกระโดดไปทำงานนั้นๆ
ได้ มันมีวิธีที่ง่ายกว่านี้อีกลองไปศึกาดูเองครับ
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #8 เมื่อ: กุมภาพันธ์ 07, 2012, 08:23:24 AM »

ยังไงก็ขอบพระคุณครับสำหรับคำแนะนำ ต้องบอกก่อนครับว่า ผมเพิ่งหัดเล่น MCU
อาจจะถามแปลก ๆ  lv!
ที่จริงผมมีตัวอย่างอยากจะใส่ภาพ แต่ หา Icon ใส่ภาพไม่เจอครับ
เลย Copy มาไม่ครบ แต่อยากใช้งานคล้าย ๆ ตัวอย่างครับ
ต้นฉบับ
http://file2.uploadfile.biz/i/ENEMMEIMEZMMEW


เงื่อนไขการทำงานหรือลักษณะการทำงานของพัดลม
1. เมื่อเสียบปลั๊กหรือจ่ายเพาเวอร์ ให้รอรับการกด KEY ON/Speed (กด KEY อื่นไม่มีผล)
2. เมื่อกด KEY On/Speed แล้ว (RA0 = 0) ให้พัดลมทำงานตาม speed ล่าสุดก่อนปิดเครื่อง
3. เมื่อกด KEY On/Speed อีกครั้งให้เปลี่ยนเป็น Speed ถัดไป
4. การวนของ Speed
Low Med Hi
5. หากกดปุ่ม Swing (RB3 = 0) กำหนดให้พัดลมส่าย โดยการทำงานของปุ่ม Swing จะทำงานคล้ายการ
ทำงานของ Toggle Switch (กดแล้วทำงาน กดอีกครั้งให้หยุดทำงาน)
6. เมื่อกดปุ่ม Timer (RA1 = 0) กำหนดให้ Mode ตั้งเวลาทำงาน
7. การทำงานของการตั้งเวลา
30 min 1 Hr 2 Hr
8. เมื่อครบเวลาตามที่ตั้งไว้ให้พัดลมหยุดทำงาน
9. หากกดปุ่ม OFF (RA2 = 0) ให้พัดลมหยุดทำงาน
10. ทุกครั้งที่มีการกดปุ่มให้มีเสียงดัง ปิ๊บ 1 ครั้ง
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #9 เมื่อ: กุมภาพันธ์ 07, 2012, 08:33:13 AM »

และการเขียน  EEPROM แล้วดึงมาใช้งาน มีขั้นตอนอย่างไรครับ
รบกวนขอตัวอย่างการเขียน และการนำมาใช้ ด้วยนะครับน้า
ขอบพระคุณที่ กรุณาครับ Embarrassed
บันทึกการเข้า
JUB
Full Member
member
**

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

กระทู้: 1157



« ตอบ #10 เมื่อ: กุมภาพันธ์ 07, 2012, 10:40:37 AM »

/*
File name  :eep.c
Program    :pic16 internal eeprom
Author     :Somlak Mangnimit
Date       :17/12/2011
*/

/*
--------------------
Library Call
--------------------
WriteEEP();
ReadEEP();

--------------------
Exp.
--------------------
WriteEEP(address,data);
k = ReadEEP(address);
*/

#ifndef _EEP_C_
#define _EEP_C_

// write internal eeprom //
void WriteEEP(unsigned char addr,unsigned char data){
EEADR = addr;
EEDATA = data;
EECON1bits.EEPGD = 0;          //eep section
EECON1bits.WREN = 1;           //write enable
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1;
while(EECON1bits.WR);
EECON1bits.WREN = 0;           //write disable
}

// read internal eeprom //
unsigned char ReadEEP(unsigned char addr){
unsigned char data;
EEADR = addr;
EECON1bits.EEPGD = 0;          //eep section
EECON1bits.RD = 1;             //read enable
data = EEDATA;
EECON1bits.RD = 0;             //read disable
return data;
}

#endif
บันทึกการเข้า
JUB
Full Member
member
**

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

กระทู้: 1157



« ตอบ #11 เมื่อ: กุมภาพันธ์ 07, 2012, 11:15:03 AM »

ยังไงก็ขอบพระคุณครับสำหรับคำแนะนำ ต้องบอกก่อนครับว่า ผมเพิ่งหัดเล่น MCU
อาจจะถามแปลก ๆ  lv!
ที่จริงผมมีตัวอย่างอยากจะใส่ภาพ แต่ หา Icon ใส่ภาพไม่เจอครับ
เลย Copy มาไม่ครบ แต่อยากใช้งานคล้าย ๆ ตัวอย่างครับ
ต้นฉบับ
http://file2.uploadfile.biz/i/ENEMMEIMEZMMEW


เงื่อนไขการทำงานหรือลักษณะการทำงานของพัดลม
1. เมื่อเสียบปลั๊กหรือจ่ายเพาเวอร์ ให้รอรับการกด KEY ON/Speed (กด KEY อื่นไม่มีผล)
2. เมื่อกด KEY On/Speed แล้ว (RA0 = 0) ให้พัดลมทำงานตาม speed ล่าสุดก่อนปิดเครื่อง
3. เมื่อกด KEY On/Speed อีกครั้งให้เปลี่ยนเป็น Speed ถัดไป
4. การวนของ Speed
Low Med Hi
5. หากกดปุ่ม Swing (RB3 = 0) กำหนดให้พัดลมส่าย โดยการทำงานของปุ่ม Swing จะทำงานคล้ายการ
ทำงานของ Toggle Switch (กดแล้วทำงาน กดอีกครั้งให้หยุดทำงาน)
6. เมื่อกดปุ่ม Timer (RA1 = 0) กำหนดให้ Mode ตั้งเวลาทำงาน
7. การทำงานของการตั้งเวลา
30 min 1 Hr 2 Hr
8. เมื่อครบเวลาตามที่ตั้งไว้ให้พัดลมหยุดทำงาน
9. หากกดปุ่ม OFF (RA2 = 0) ให้พัดลมหยุดทำงาน
10. ทุกครั้งที่มีการกดปุ่มให้มีเสียงดัง ปิ๊บ 1 ครั้ง


เขามี source code ให้แล้วนิครับ น่าจะเป็น CCS เอาไปใช้ได้เลย
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #12 เมื่อ: กุมภาพันธ์ 08, 2012, 08:13:29 AM »

ขอบพระคุณ อย่างแรงครับน้า
****
CCS ผมยังไม่อยากไปลองเพราะว่า Mikro C ก็เพิ่งจะเริ่มครับน้า
เดียวสับสนเวลาเขียน  sleep!!
และถ้าจะรบกวนน้าอีกที แปลงตัวอย่าง เป็น  Mikro C พอจะอุปการะ ได้ใหมครับ ขอบคุณ
****
แล้วถ้าผมจะลองใช้ CCS gen, Code แล้วลองกับ Proteus ได้เหมือน Mikro C หรือเปล่าครับ
บันทึกการเข้า
JUB
Full Member
member
**

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

กระทู้: 1157



« ตอบ #13 เมื่อ: กุมภาพันธ์ 08, 2012, 08:34:12 AM »

อ้างถึง
CCS ผมยังไม่อยากไปลองเพราะว่า Mikro C ก็เพิ่งจะเริ่มครับน้าเดียวสับสนเวลาเขียน
บ้านเราเขาใช้ CCS กันเยอะนะจะบอกให้เยอะกว่า Mikro C ด้วยซ้ำ;D


อ้างถึง
และถ้าจะรบกวนน้าอีกที แปลงตัวอย่าง เป็น  Mikro C พอจะอุปการะ ได้ใหมครับ ขอบคุณ
ยังไม่ค่อยว่างเลยครับเดี๋ยวลองดูให้ล่ะกัน

อ้างถึง
แล้วถ้าผมจะลองใช้ CCS gen, Code แล้วลองกับ Proteus ได้เหมือน Mikro C หรือเปล่าครับ
เหมือนกัน
บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #14 เมื่อ: กุมภาพันธ์ 16, 2012, 08:12:28 AM »

ผมต่อวงรทำงานในรถยนต์
ใช้ PORTB.F0 เป็น interrupt เพื่อสลับสถานะการทำงานจาก 1 ไป 2
+มีปํญหาคือ
-เวลาเปลี่ยนเกียร์ Auto จาก // P (จอด)  ไปที่   D (ขับ) interrupt ทำใมถึงทำงาน ทั้งที่ไม่ได้ต่อสัญญานจากเกียร์
-ถ้ากด ลดกระจกไฟฟ้าลง  บางปุ่มของ สวิทย์ จะมีผลกับ interrupt
รบกวนขอคำชี้แนะด้วยครับ เศร้าจัง
**

 //           16F877 ,  PORT ,RB1 ,RB2 ,RB3 ,RB4, RB7   NOT USE
///////    UPDATE 23/11/2011      //////////////
///////    UPDATE 10/12/2011      //////////////
///////    UPDATE 31/12/2011      //////////////
///////    UPDATE 27/01/2012      //////////////
///////    UPDATE 31/01/2012      //////////////
///////    UPDATE 4/02/2012   sat   //////////////
///////    UPDATE 11/02/2012  sat    //////////////
 /*

      SWITCHING VERSION  CONTROL

 */
#define tick1 PORTB.F2 //LM358-1 Tip31-1
#define push_sw PORTB.F4 //LM358-1 Tip31-2 SWITCHING SELECTOR
#define reg2 PORTB.F1 //Tip31-3 750W  GAS
#define beep1 PORTC.F2 //BC548    BUZZER  12V
#define Dis PORTC.F3 //DISPLAY CONTROL
char y=0,t1=1,le,i4=1;
char timming_cut=15,timming_cut2,lled;
char *B="PE  RUN",*G="G RUN-T  OFF",*BG="G RUN-T ON";
////////////////////////////////////////////////////////////////////////////////
void push_sw1()
{
  push_sw=1; delay_ms(200);
  push_sw=0;delay_ms(22);
}

void  beep0()
{
   beep1=1;
   delay_ms(10);
   beep1=0;
   delay_ms(5);
}
void  beep4() //
{
   beep1=1;
   delay_ms(200);
   beep1=0;
   delay_ms(5);
}
////////////////////////////////////////////////////////////////////////////////
void beep()
{   int x=0;
    Dis=0;
    for(x=0;x<3;x++)
  {
   beep1=1;
   delay_ms(80);
   beep1=0;
   delay_ms(80);
   Dis=1;
    }
}
/////////////////////////
void interrupt()
{
    i4++; beep1=1;
    if(i4>2){i4=1;}
    delay_ms(500);
    beep1=0;
    INTCON.INTF= 0;
}
/////////////////////
void delay_1sec()
{
 delay_ms(1000);
}
void led_read()//ตรวจสอบการกระพริบของ LED จากข้างนอก
{    unsigned long int  ls1,ls2,ls3,ls4,
                        ls5,ls6,lsp;
     ls1=Adc_Read(4); // LED ON/OFF
     delay_ms(333);
     ls2=Adc_Read(4); // LED ON/OFF
     delay_ms(333);
     ls3=Adc_Read(4); // LED ON/OFF
     delay_ms(333);
     ls4=Adc_Read(4); // LED ON/OFF
     lsp=ls1+ls2+ls3+ls4;
     if(lsp<=10){ le=0;}
     else if(lsp>=4000){le=1;}
     else {le=2;}
}
void swit_to_pet()
{     led_read();
  if(le==1){ push_sw1();}
  else if(le==2){ push_sw1();  push_sw1();}
  else{beep1=1;delay_ms(50);beep1=0;}
}
void cut_system()
 {
        if(t1>=3&&t1<timming_cut)//15 min
            {
              lled=Adc_Read(4);
              {
              if(lled==0){tick1=1;}
              else{tick1=0;}
              }
            Lcd_Cmd(LCD_Clear);Lcd_Out(2,1,G);
            delay_1sec();
            }
        else if(t1==timming_cut-1){Lcd_Cmd(LCD_Clear);Lcd_Out(2,3,B); tick1=1;beep4();
        }
        else{
             beep0();
             tick1=1;
             Lcd_Cmd(LCD_Clear);
             Lcd_Out(2,5,B);
             delay_1sec();
             }
}
void Engin_check()
        {
           unsigned long int  Engine;
           Engine=Adc_Read(2);

                if (Engine>=511)// 2.5 v
                    {    delay_1sec();
                    Lcd_Cmd(LCD_Clear);
                    Lcd_Out(1,4,"ENGINE HEAT");
                    tick1=1;    delay_1sec();  delay_1sec();
                    beep();
                    t1=1;
                    }
                 else{beep1=0;}
         }
void power_on()
{
       tick1=1;
       Dis=1;
       Lcd_Init(&PORTD);
       Lcd_Cmd(LCD_Clear);
       Lcd_Cmd(lcd_cursor_off);
       Lcd_Out(2,5,"POWER ON");
           beep();
           delay_ms(500);
           beep1=1;
           delay_ms(400);
           beep1=0;
}
void main()
{////block Main
     TRISA=0XFF;
     TRISB=0x01;
     TRISC=0X00;
     TRISD=0X00;
     TRISE=0X07;
     PORTB=0X00;
     PORTC=0X00;
     PORTD=0X00;
     PORTE=0X00;
     power_on();
     swit_to_pet();
     Lcd_Out(1,4,"AUTO READY");
     delay_1sec();
     INTCON.INTF=0; // Clear Interrupt flag before use
     INTCON.INTE=1; // Enable interrupt from INT/RB0 Pin
//     INTCON.T0IF=0;// Clear Interrupt flag before use
//     INTCON.T0IE=1;// Enable interrupt from TMR0 Pin
     INTCON.GIE=1; // Enable Global interrupt
while(1)
{
 {
  while(i4==2)
  {
             tick1=1; Lcd_Cmd(LCD_Clear);
             Lcd_Out(1,1,"AUTO SWITCH RUN");
             Lcd_Out(2,3,"T ON"); delay_1sec();
             Engin_check();
  }
            timming_cut2=timming_cut+1;
             y++;
             Engin_check();
             cut_system();// LOOP 3 SEC
            if(y==60){t1++;}
            { if(y<=50) { reg2=1;} // if Y < 50 SEC ON Supply Voltege
            else if(y>60){y=0;} // Wait for Y > 60 SEC OFF Supply Voltege
            else{reg2=0;}
            }
            if(t1==timming_cut) {t1++; tick1=1;beep4(); push_sw1();   }
            if(t1==2)  {t1++; beep4(); push_sw1(); beep4(); push_sw1(); }
            if(t1==timming_cut2) {t1=1; }
}
}
}


บันทึกการเข้า
yanyongs
member
*

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

กระทู้: 40


« ตอบ #15 เมื่อ: กุมภาพันธ์ 16, 2012, 09:59:22 AM »

/////////////////////////
void interrupt()
{
    i4++; beep1=1;
    if(i4>2){i4=1;}
    delay_ms(500);
    beep1=0;
    INTCON.INTF= 0;
}
/////////////////////
ถ้าต้องการเขียนเพื่อตรวจสอบว่า การ interrupt
แบบ กดสวิทย์แช่ 3 sec จึงจะทำงาน เขียนอย่างไรครับ
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

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

กระทู้: 570


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

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #16 เมื่อ: กุมภาพันธ์ 16, 2012, 11:59:07 AM »

กดสวิทช์แช่ไว้ 3 วินาทีแล้วจึงไปทำงานโปรเซสที่ต้องการ

if (กดสวิทช์){
     i=0;
     while(กดสวิทช์){
     i++;
     delay_ms(100);   // หรือใช้การนับจาก Timer Module แล้ว Interrupt ก็ได้
     if(i>=30) goto โปรเซสที่ต้องการให้ทำงาน;  // 30 = 3000/100
     }
}
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2006, Lewis Media

lsv2555Please follow the new website at https://www.pohchae.com

Valid CSS!