PIC16f84a를 사용해서 1초 타이머를 만드는 자료를 정리해봤습니다.
반나절 정도 지켜봤는데.. 음.. 오차가 20초 가량 나더군요.
아무래도 계산 공식에서 소수점으로 나오는 부분에 대한 오차인듯 한데요.
초보자인 저로서는 아직 잘 모르겠네요..
하지만 지금 만드는 제품은 시간 타임이 정확하지 않아도 되기 때문에
일단 무시 하고 작업을 진행 했습니다.
/*
* 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
'PIC' 카테고리의 다른 글
PIC 회로작성시 오실레이터는 되는데 수정진동자는 안되는 경우 해결법 (0) | 2012.02.17 |
---|---|
PICSTART Plus - 초기설치 / C 프로젝트 생성 (0) | 2012.02.16 |