'3개의 타이머'에 해당되는 글 2건

  1. 2010.12.02 [Tiny os] 타이머 3개를 이용한 5진 카운터.
  2. 2010.12.02 [Tiny os] 타이머 3개를 이용한 8진 카운터. 1
posted by nsakura 2010. 12. 2. 10:52

컴포넌트와 와이어링은 타이머3개를 이용한 8진 카운터와 같습니다.

module BlinkTimerM {
  uses {
 interface Boot;
 interface Timer<TMilli> as Timer0;
 interface Timer<TMilli> as Timer1;
 interface Timer<TMilli> as Timer2;
 interface Leds;
  }
}
implementation {

  int ncnt=0;

  void timerallstop(){
 call Timer0.stop();
 call Timer1.stop();
 call Timer2.stop();
  }

  void timerallstart(){
 call Timer0.startPeriodic(1000);
 call Timer1.startPeriodic(2000);
 call Timer2.startPeriodic(4000);
  }

  void ledinit(){
  call Leds.led0Off();
  call Leds.led1Off();
  call Leds.led2Off();
  }

  event void Boot.booted() {
  timerallstart();
  }

  event void Timer0.fired()  {
    call Leds.led2Toggle();
 
 ncnt++;

 if(ncnt==5){
  ncnt=0;
  timerallstop();
  ledinit();
  timerallstart();
 }

 
  }
 
  event void Timer1.fired()  {
    call Leds.led1Toggle();
  }

  event void Timer2.fired()  {
    call Leds.led0Toggle(); 
  }

}


 R  sec  G  sec  Y  sec  ncnt
 0  1  0  1  0  0  0
 0  2  0  2  1  1  1
 0  3  1  1  0  0  2
 0  4  1  2  1  1  3
 1  1  0  1  0  0  4
           5->0

ncnt가 5가 되면 타이머를 멈추고 led를 초기화 그다음에 다시 타이머를 실행한다.



posted by nsakura 2010. 12. 2. 10:08


타이머 3개를 사용한 8진 카운터 입니다.

컴포넌트 및 와이어링.

configuration BlinkTimer {
}

implementation {

  components MainC, BlinkTimerM, LedsC, new TimerMilliC() as Timer0, new TimerMilliC() as Timer1, new TimerMilliC() as Timer2;
 
  BlinkTimerM.Boot -> MainC;
  BlinkTimerM.Leds -> LedsC;
  BlinkTimerM.Timer0->Timer0;
  BlinkTimerM.Timer1->Timer1;
  BlinkTimerM.Timer2->Timer2;
}

메인 프로그래.

module BlinkTimerM {
  uses {
 interface Boot;
 interface Timer<TMilli> as Timer0;
 interface Timer<TMilli> as Timer1;
 interface Timer<TMilli> as Timer2;
 interface Leds;
  }
}
implementation {

  event void Boot.booted() {
 call Timer0.startPeriodic(1000);
 call Timer1.startPeriodic(2000);
 call Timer2.startPeriodic(4000);
  }
  
  event void Timer0.fired()  {
    call Leds.led2Toggle();  
  }
 
  event void Timer1.fired()  {
    call Leds.led1Toggle();
  }

  event void Timer2.fired()  {
    call Leds.led0Toggle();    
  }

}

 R  sec  G  sec  Y   sec
 0  1  0  1  0   0 
 0  2  0  2  1  1
 0  3  1  1  0  0
 0  4  1  2  1  1
 1  1  0  1  0  0
 1  2  0  2  1  1
 1  3  1  1  0  0
 1  4  1  2  1  1