เขียนภาษา C ด้วยคอมไพเลอร์ CCS โดยให้ฟังก์ชั่นกลับไปเรียกฟังก์ชั่นซ้ำเมื่อทำงานเสร็จแล้วไม่ได้ครับ

ผมต้องการให้โปรแกรมวนลูปทำงานตลอดเมื่อ RTC.sec=5 แต่นี่พอ RTC.sec=5 แล้วโปรแกรมเรียกฟังก์ชั่น Delay แค่ครั้งเดียวแล้วก็ไม่เรียกฟังก์ชั่นนี้อีกเลยครับ และเมื่อรันโปรแกรมแล้วโปรแกรมก็ยังไม่ได้เรียกฟังก์ชั่น delay จนกว่าเราจะเซตค่าก่อนครับ โดยต้องไปเซตค่าในฟังก์ชั่น  sec_feed() เพื่อกำหนดค่าที่ต้องการจะ delay ครับ ทั้งที่ผมกำหนดค่าเริ่มต้นไว้ให้ตัวแปรแล้วคือ unsigned int sec=10;

/* ฟังก์ชันนี้ใช้กำหนดค่าเวลาที่จะ delay ถ้ารันโปรแกรมเลยโดยไม่เรียกฟังก์ชันนี้โปรแกรมจะไม่เรียกฟังก์ชัน Delay ครับ */

void sec_feed(){

unsigned int sec=10;                // ค่า sec เริ่มต้นคือ 10

while(input(PIN_B3)){

if(input(PIN_B1)==0){
delay_ms(100);
sec++;
if(sec>=1000){sec=1000;}        //ตรวจสอบไม่ให้ sec มีค่าเกิน 1,000
    delay_ms(100);
    printf("\r\n sec= %d ",sec);
    delay_ms(50);

}

if(input(PIN_B2)==0){
delay_ms(100);
sec--;
if(sec<=1){sec=1;}                   // กำหนดค่า sec ต่ำสุดคือ 1
    delay_ms(100);
    printf("\r\n sec= %d ",sec);
    delay_ms(50);
}
}  // while sec

sec_delay = sec;

}



/* ฟังก์ชั่น Delay สำหรับหน่วงเวลา */

void delay(){

  for(sec_delay=sec_delay;sec_delay>0;sec_delay--){
  lcd_gotoxy(1,2);
  delay_ms(1000);
  printf("\r\n  Delay = %d  " sec_delay);
  }

}




/************* ฟังก์ชั่น main *************/
void main(){

enable_interrupts(GLOBAL);

    enable_interrupts(INT_EXT);  // Set external interrupt              
    ext_int_edge(H_TO_L);        // External interrupt high to low edge  

while(TRUE){

   DS1307_ReadTime();

/* ใช้ while วนลูปแล้วแต่เรียกฟังก์ชั่นแค่รอบเดียวแล้วพอ RTC.sec = 5 อีกครั้งก็ไม่ delay อีกเลย */
if(bcd2bin(RTC.sec)==5){                  
      delay();
   }

}
}



ไม่ทราบว่าทำยังไงถึงจะวนลูปเรียกฟังก์ชั่น delay() ไปตลอดเมื่อ bcd2bin(RTC.sec)==5 ครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่