#include <stdio.h>
#include <iom128.h>
#include <ina90.h> unsigned char led = 0xfe;
unsigned int cnt; #pragma vector=TIMER2_COMP_vect
__interrupt void TIMER2_COMP_interrrupt(void) // Interrupt Overflow
{
if(cnt++ >= 49999) // 50000*10 = 500 msec
{
cnt = 0;
if(led!=0x7f) led = (led << 1) | 0x01; // 비트7을 안켰으면 1비트씩 좌로 시프트하고 빈자리에는 1을 채운다.
else led = 0xfe;
} // 비트7을 켰으면 다시 처음으로 와서 비트 0을 켠다.
PORTC = led;
}
void main(void)
{
DDRC = 0xff; // 포트C를 출력으로
PORTC = led;
SREG |= 0x80; //인터럽트 전체 허용
TIMSK |= 0x80; // 타이머2 출력비교 인터럽트 개별허용
TCCR2 |= 1; // 분주비를 1로 설정
TCCR2 |= 0x20; // CTC mode
OCR2 = 159; // 10usec = 1*(1+159)/16 16MHz와 분주비 1사용시
for(;;);
}
이소스를 실행하면 500ms가 나와야 하나 800ms가 나옵니다. 기본개념익히는중인데요. 무엇이 문제일까요. 컴파일러 설정이 잘못되어도 시간에 문제가 나오나요.
#include <iom128.h>
#include <ina90.h> unsigned char led = 0xfe;
unsigned int cnt; #pragma vector=TIMER2_COMP_vect
__interrupt void TIMER2_COMP_interrrupt(void) // Interrupt Overflow
{
if(cnt++ >= 49999) // 50000*10 = 500 msec
{
cnt = 0;
if(led!=0x7f) led = (led << 1) | 0x01; // 비트7을 안켰으면 1비트씩 좌로 시프트하고 빈자리에는 1을 채운다.
else led = 0xfe;
} // 비트7을 켰으면 다시 처음으로 와서 비트 0을 켠다.
PORTC = led;
}
void main(void)
{
DDRC = 0xff; // 포트C를 출력으로
PORTC = led;
SREG |= 0x80; //인터럽트 전체 허용
TIMSK |= 0x80; // 타이머2 출력비교 인터럽트 개별허용
TCCR2 |= 1; // 분주비를 1로 설정
TCCR2 |= 0x20; // CTC mode
OCR2 = 159; // 10usec = 1*(1+159)/16 16MHz와 분주비 1사용시
for(;;);
}
이소스를 실행하면 500ms가 나와야 하나 800ms가 나옵니다. 기본개념익히는중인데요. 무엇이 문제일까요. 컴파일러 설정이 잘못되어도 시간에 문제가 나오나요.