1. 개발환경 : avr128
2. 동작목표 : 타이머 이해
3. 문제점 :
안녕하세요. avr128 을 이제 막 시작해서 모르는 부분이 너무 많네요. 원래는 8051을 사용하다가 avr128쪽으로 오니 프로그램 순서가
햇갈려서 이렇게 올리게 되었습니다. 먼저 소스는 다음과 같습니다.
#include <avr/io.h>
#include<avr/interrupt.h>
char count=0;
SIGNAL(SIG_OVERFLOW0)
{
count++;
if(count==125)
{ if(PINA==0xff){PORTA=0xff;}
else if(PINA==0x00){PORTA=0x00;}
count=0;
}
TCNT0=131;
}
void Main_init(void);
int main(void)
{
Main_init();
while(1);
}
void Main_init(void)
{ PORTA=0xff;
DDRA=0xff;
TCCR0=0x07;
TCNT0=131;
TIMSK=0x01;
SREG=0x80;
}
소스는 다음과 같습니다. 위에 SIGNAL부분이 맞는지는 모르겠지만. 제가 궁금한것은
프로그램이 while문에서 무한 반복하다가 오버플로워가 나면 SIGNAL부분으로 가서
실행하고 다시 while부분으로 오는지 아님 어떤식의 순서로 진행되는지가 궁금합니다.
그리고 OCR0의 용도?
TCNT0과 비교를해서 OC0으로 출력을 한다고 하는데 어떤식으로 비교를해서 하는지
너무 초보적인 질문입니다만 답변 꼭 부탁합니다.
output compare resiser 입니다 ...즉 OC0 값이 TCNT0값이 같아지는 순간 출력을합니다
초기화 과정을 거치고 인터럽트가 while()문에서 인터럽트 발생하구요
그즉시 인터럽트 서비스 루틴으로 이동하여 인터럽트 서비스를 실행하고 빠져나옵니다
SIGNAL(SIG_OVERFLOW0) 이부분이 인터럽트 벡터 주소입니다....
일단 답변 감사합니다. 그런데 여기서 의문점이 OCR0 과 TCNT0 을 비교해서 출력하는건데 그럼 시간은 어떤식으로
맞춰주어야 하는건가요.;;;; 아~ 타이머 부분 왜이렇게 힘든지.ㅠㅠ