PIC16f84a를 사용해서 1초 타이머를 만드는 자료를 정리해봤습니다.

반나절 정도 지켜봤는데.. 음.. 오차가 20초 가량 나더군요.

아무래도 계산 공식에서 소수점으로 나오는 부분에 대한 오차인듯 한데요.

초보자인 저로서는 아직 잘 모르겠네요..

하지만 지금 만드는 제품은 시간 타임이 정확하지 않아도 되기 때문에

일단 무시 하고 작업을 진행 했습니다.

 

 

#include <htc.h>

/*
 * Example code for using timer0 on a 16F84
 * Just sets up a 1 second interrupt and increments a variable
 */

/*
 * Calculate preload value for one second timer
 */

#define _XTAL_FREQ 4000000L

 

near char reload = 0;

/* service routine for timer 0 interrupt */
void interrupt
timer0_isr(void)
{
 reload++;
 
 if( reload == 18 )
 {
  RB4 = ~RB4;  
  reload = 0;
 }

 TMR0 = 39;
 T0IF = 0;
}

 

main()
{
 // initialize timer 0;
 OPTION_REG = 0b0111; // prescale by 256
 T0CS = 0;   // select internal clock
 T0IE = 1;   // enable timer interrupt
 GIE = 1;   // enable global interrupts
 TRISB = 0;   // output changes on LED 
 TMR0 = 39;

 while(1)
 {
 }
}

 

위의 코드대로 작성하면 RB4번 포트에 High/Low가 각 1초 간격으로 나오게 됩니다.

 

이 자료의 본문은 아래와 같습니다.

http://embedded-lab.com/blog/?p=1042

 

+ Recent posts