main() 함수에서 LED 관련함수를 계속 호출하고, LED 관련함수에서는 일정 시간이 되면 일을 하게 하는 방법은 어떨까요?
일단 몇가지 변수를 추가하고요. byte g_byteLEDOperMode; // 0 : LED off // 1: LED ON // 2: LED BLINK UINT16 g_uiOperatingOutLEDTimer; UINT16 g_uiOperatingOutLEDStatus;
void OperatingOutLED(){ // 일정시간이 되지 않았으면 리턴 if(g_uiOperatingOutLEDTimer >0) return;
// 일정시간이 되면 실행하겠다. if(2==g_byteLEDOperMode){ // blink 모드이다. g_uiOperatingOutLEDTimer=1000; // 다음에 1000이 경과된 후에 OperatingOutLED() 들어와라 if(0==g_uiOperatingOutLEDStatus){ // LED OFF g_uiOperatingOutLEDStatus = 1; } }else if(1==g_uiOperatingOutLEDStatus){
// LED ON g_uiOperatingOutLEDStatus = 0; } }
}
타이머인터럽트 에서 if(g_uiOperatingOutLEDTimer >0) g_uiOperatingOutLEDTimer--; // 감소시켜 주고.
LED 관련함수에서는 일정 시간이 되면 일을 하게 하는 방법은 어떨까요?
일단 몇가지 변수를 추가하고요.
byte g_byteLEDOperMode; // 0 : LED off
// 1: LED ON
// 2: LED BLINK
UINT16 g_uiOperatingOutLEDTimer;
UINT16 g_uiOperatingOutLEDStatus;
메인에서
OperatingOutLED() 함수를 루프로 호출하고
main(){
while(1) {
OperatingOutLED();
}
}
void OperatingOutLED(){
// 일정시간이 되지 않았으면 리턴
if(g_uiOperatingOutLEDTimer >0) return;
// 일정시간이 되면 실행하겠다.
if(2==g_byteLEDOperMode){
// blink 모드이다.
g_uiOperatingOutLEDTimer=1000; // 다음에 1000이 경과된 후에 OperatingOutLED() 들어와라
if(0==g_uiOperatingOutLEDStatus){
// LED OFF
g_uiOperatingOutLEDStatus = 1;
}
}else if(1==g_uiOperatingOutLEDStatus){
// LED ON
g_uiOperatingOutLEDStatus = 0;
}
}
}
타이머인터럽트 에서
if(g_uiOperatingOutLEDTimer >0) g_uiOperatingOutLEDTimer--; // 감소시켜 주고.
이 방법이 처음에는 어려워 보일수 있으나 확장성이 좋고, 프로그램이해가 쉬운 방법입니다.
제가 사용한 소스를 보여드릴테니 참고하세요.^^