
#<함수형>*********************************************
void _Timer_단위주기_(unsigned short  p1초나누기값);

#<인수>
'p1초나누기값'
타이머 전체의 [단위주기] 값.
{ [단위주기] = 1초/p1초나누기값 } 으로 설정.
0 인 경우는 무효.

#<반환값>

#****************************************************

#<적용구분>

"맷돌 전용"

#<선언문서>

"_Timer_단위주기_.h"

#<설명>

타이머 전체의 [단위주기] 를 설정합니다.

{ [단위주기] = 1초/p1초나누기값 } 으로 설정됩니다.
즉, p1초나누기값:100 인 경우는 10ms 가 [단위주기] 가 됩니다.
맷돌 내부적으로는 이 10ms 가 기본 [단위주기] 로 설정돼 있으므로 이 API 로 재설정 하지 않는한
10ms [단위주기] 가 적용됩니다.

이 API 는 타이머를 만드는 장치 자체를 설정하는 것으로 타이머가 하나도 생성돼 있지 않은 상태에서도
사용가능 합니다.

[참고!!!]{----------------------------------------------------------------------------
정확하게 정수로 떨어지는 계산값의 최소값은 1/400 = 2.5ms 까지이며, 이 이하의 작은 시간은 정확하게
정수로 떨어지지 않습니다. 

"1초(11059200/128)" 의 내부 계산값을 가지므로 실제 계산은 { (11059200/128)/p1초나누기값 } 이 되어
이 값이 정확하게 정수값이 되면 정확한 시간이 보장받게 되나, 소숫점이 발생하는 경우는 대략적인 [단위주기]
가 됩니다.
즉, 1/1000 은 1ms 이지만 소숫점이 발생하므로 대략적인 1ms 가 됩니다.
}------------------------------------------------------------------------------------

[주의!!!]{---------------------------------------------------------------------
인수값이 [분모] 가되므로 0 을 사용하면 안되며 이 경우는 맷돌 내무적으로 [무효값] 이 되어 반영되지
않으며, 너무 [단위주기] 를 작게 설정하면 타이머가 여러개인 경우는 맷돌에 상당한 무리를 주게 되므로
너무 작게 설정하지 않는 것이 좋습니다.
대부분의 사용자는 일반적으로 내부 설정된 10ms [단위주기] 만으로도 충분합니다.
}-----------------------------------------------------------------------------

#<예제>

// ...

//[내부정의]
//{
    #define  bool     unsigned char

    #define  true     1
    #define  false    0
    
//}

//[VAR]
//{
    //<알리문저장소> 를 제공합니다(크기는 사용자 조정가능).
    unsigned char  알림문저장소[256];
    
    //타이머0 생성자(이름은 사용자 마음대로).
    unsigned char  타이머0[6];
    
//} 

void event(void)
{
  //[이벤트] 발생시 여기서 처리합니다.

  //[VAR]
  //{
      unsigned char  알림문;
  
  //}
  
  //[<알림문> 한개 꺼내기]
  //{
      //<알림문저장소> 에서 가장 처음의 <알림문> 을 하나 꺼낸다.
      알림문 = _MsgQ_읽기_();        
  
  //}
  
  //<알림문> 에 따른 처리를 수행한다.
  switch(알림문)
  {
    case  d_EvtMsg_Timer0 :
    {
      //타이머0 발생이벤트는 여기서 직접처리하거나 처리 함수를 호출하여 처리합니다.
     
      // ...  
     
                   
    } break;
    
    //다른 [이벤트] 는 여기서 처리합니다.
    
  }  
  
}

void main(void) 
{
  //[<알림문저장소> 설정]
  //{
      //<알림문저장소> 공간을 사용자 정의 크기로 생성합니다(선언된 공간크기와 같은 크기로 지정).
      //저장소선언된크기와동일----v
      _MsgQ_생성_(알림문저장소, 256);
      
  //}
  
  //[타이머 단위주기 설정]
  //{
      //1초/400 = 2.5ms 가 [단위주기] 가 됩니다.
      _Timer_단위주기_(400); 
  
  //}
  
  //[타이머 설정]
  //{
      //타이머를 0번 타이머, 25ms 주기로 생성합니다. 
  
      //타이머0 를 생성합니다.
      //타이머 시간주기는 25ms--v //2.5*10 = 25ms
      //타이머 번호---------v
      _Timer_생성_(타이머0, 0, 10); 
      
      //타이머0 를 동작 시킵니다.
      _Timer_동작_(타이머0, true); 
     
  //}
  
  //[전체 이벤트 허용]
  //{    
      //전체이벤트를 허용합니다.
      _Event_전체_(true);
      
  //}    
  
  //여기서부터 타이머0 이벤트가 정해진 시간 주기로 발생하게 됩니다.
  
  
  //사용자 다른 처리.
  

}  

