- 使用 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 中斷的進入。
所以比較適合做一些簡單的事情。