- 使用 delay 副程式。
 
quit=0;
while(!quit){
  Delay(500);     // 等待 0.5 秒,無法做其他事。
  LedToggle();    // 切換 led 的狀態。
  ... // 這個時候當然可以做其他事,但是對 0.5 秒的計時是直接的影響。
}
- 使用 timer 。
 
quit=0;
start=TimerReadValue();
while(!quit){
  if(TimerReadValue()-start >=500) {
     start=TimerReadValue();  // 0.5 秒到了,重新記下開始時間。
     LedToggle();             // 切換 led 的狀態。
  }
  ... // 這個時候還可以做其他事,只要不花太多時間的話,對 0.5 秒的計時影響不大。
}
      - 使用 stopwatch 。
 
quit=0;
StopWatchStart(0);  // use channel 0
while(!quit){
  StopWatchReadValue(0,&time);
  if(time >=500) {       // 數到 500 就是 0.5 秒到了。
     StopWatchStart(0);  // 0.5 秒到了就重新計時。
     LedToggle();        // 切換 led 的狀態。
  }
  ... // 這個時候還可以做其他事,只要不花太多時間的話,對 0.5 秒的計時影響不大。
}
      - 使用 countdowntimer 。
 
quit=0;
CountDownTimerStart(0,500);  // use channel 0
while(!quit){
  CountDownTimerReadValue(0,&time);
  if(time ==0) {                  // 倒數到 0 就是 0.5 秒到了。 
     CountDownTimerStart(0,500);  // 0.5 秒到了就重新倒數計時。
     LedToggle();                 // 切換 led 的狀態。
  }
  ... // 這個時候還可以做其他事,只要不花太多時間的話,對 0.5 秒的計時影響不大。
}
      - 寫 user 自己的timer 副程式。使用 InstallUserTimer(); 來安裝自己的計時副程式。
 
void MyTimerFun(void)
{ static unsigned count=0;
  count++;
  if(count>=500){
     count=0;
     LedToggle();
  }
}
main()
{
  quit=0;
  TimerOpen();
  InstallUserTimer(MyTimerFun); // 安裝自己的計時副程式 "MyTimerFun"
  while(!quit){
    ... // 這個時候可以做其他事,只要不把timer 中斷關掉的話就對 0.5 秒的計時沒有影響。
  }
  TimerClose();
}
這個方法應該是計時最準的,但是要注意一點:所做的工作不可花太多時間。
因為每隔 1 ms 就會被呼叫一次,如果花太多時間,超過 1 ms 將會影響下一次的 timer 中斷的進入。
所以比較適合做一些簡單的事情。