[PIC16F150x EVM]TIMER 인터럽트 테스트
PIC16F1509 에는 3개의 타이머/카운터가 있다.
타이머 입력소스는 시스템클럭의 1/4 또는 T0CKI핀 으로 입력 받을 수 있다.
PIC16F1509 타이머 초기화 함수
void InitTimer0(void)
{
// TMR0 Associate Registers Initial
TMR0CS = 0; // Timer0 CLK Source설정 -> FOSC/4
PSA = 0; //Prescaler 사용여부 설정(사용)
PS0 = 0; // Prescaler 1:4
PS1 = 1; // Prescaler 1:16
PS1 = 0; // Prescaler 1:256
TMR0 = INTERVAL_1mS; // Initial TMR0
//타이머 인터럽트 레지스터 초기화
T0IF = 0; //Clear TMR0 Interrupt Flag
T0IE = 1; //Enable TMR0 Interrupt
GIE = 1; //Enable Global Interrupt
}
MCU_TimerCal 프로그램을 이용해 간단히 1ms에 대한 설정값을 구할 수 있다.
#define INTERVAL_1mS 0x82
volatile unsigned int gTimeTick1_1ms = 0;
//인터럽트 핸들러
interrupt ServiceRoutine()
{
// Timer0 Interrupt 발생하면
if(T0IF)
{
TMR0 = INTERVAL_1mS; // Initial TMR0
T0IF = 0; // Clear Interrupt Flag
gTimeTick1_1ms++;
//Led1Toggle();
}
}