본문 바로가기

[Microchip]/PIC12F_PIC10F

[PIC12F EVM] TIMER0 테스트

[PIC12F EVM] TIMER0 테스트

TIMER0의 기본 구조는 아래와 같이 입력 클럭을 4분주 하고 2클럭 마다 TMR0를 증가 시킨다.
만약  간단히 대략 1ms를 만들려 다음과 같이 계산할 수 있다.
8Mhz 입력 클럭일 경우 8분주 했을때 타이머 오버플로우 인터럽트 시간은 8Mhz/4/8  = 4us => 256클럭마다 한번씩 오버플로 발생하므로 1.024ms 이다.




TIMER0초기화 
OPTION레지스터



void InitTimer0(void)
{
 OPTION = 0;
 OPTION |= BIT1; //prescaler - 1/8

 T0CS = 0;  // Timer increments on instruction clock
 T0IE = 1;  // Enable interrupt on TMR0 overflow
 GIE = 1;   // Global interrupt enable
}


타이머 인터럽트 함수
인터럽트가 발생하면 interrupt preprocess로 정의 한 함수가 수행되고 이 함수 내에서 원하는 플래그를 체크하여 처리 하면 된다. 이런 구조는 AVR(Tinty13)과 비교하면 성능상 문제는 있을것 같다.
void interrupt timer1_isr(void)
{
 if(T0IF)
 {
  //1ms
  //Led1Toggle();
  gTimerTick1_ms++;
  T0IF = 0;   
 }
}



PIC12F683 Timer Interrupt 예제
타이머 인터럽트를 이용하여 1초 마다 LED점등하는 예제

void main(void)
{
 //시스템 초기화
 SystemInit();
 
 //LED초기화
 Led1Init();

 //Timer0 초기화
 InitTimer0();

 while(1)
 {
  //Led1Toggle();
  if(gTimerTick1_ms>1000)
  {
   gTimerTick1_ms = 0;
   //Led1Toggle();
  }
 }
}


 




반응형