==================================================================================================
타이머 카운터... ㅋ
==================================================================================================
[보드 세팅]
==================================================================================================
[소스코드]
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define CPU_CLOCK 16000000 // CPU Clock = 16000000Hz = 1600MHz
#define TICKS_PER_SEC 1000 // Tick per sec = 1000 (1초에 100번 체크)
#define PRESCALER 64 // 8bit 이기 때문에 255 이하의 값이 나오도록
#define on_OFF_INPUT DDRF // LED 입력
#define on_OFF_OUTPUT PORTF // LED 출력
volatile unsigned int g_elapsed_time; // 시간 변수
void initLED(void); // LED 초기화
void setTCCR0(void); // TCCR0 설정
void initTCNT0(void); // TCNT0 초기화
void setTIMSK(void); // TIMSK 설정
void toggleLED(char *state); // LED를 키고 끄는(반전) 토글 함수
void sleep(unsigned int elapsed_time); // 지연 함수
SIGNAL(SIG_OVERFLOW0) // time0의 오버 플로우 인터럽트에 대한 인터럽트 서비스 루틴
{
g_elapsed_time++; // 오버 플로우 발생시 증가
TCNT0 = 256 - (CPU_CLOCK / TICKS_PER_SEC / PRESCALER);
}
int main(void)
{
char state = 0; // LED on/Off 용도로 사용되는 변수
initLED();
setTCCR0();
initTCNT0();
setTIMSK();
sei();
while(1)
{
toggleLED(&state);
sleep(1000);
}
return 1;
}
void initLED(void) // LED 초기화
{
ON_OFF_INPUT = 0xFF;
ON_OFF_OUTPUT = 0xFF;
}
void setTCCR0(void) // TCCR0 설정
{
TCCR0 = (1 << CS02) | (0 << CS01) | (0 << CS00);
}
void initTCNT0(void) // TCNT0 초기화
{
TCNT0 = 256 - (CPU_CLOCK / TICKS_PER_SEC / PRESCALER);
}
void setTIMSK(void) // TIMSK 설정
{
TIMSK = (0 << OCIE0) | (1 << TOIE0);
}
void toggleLED(char *state) // LED를 키고 끄는(반전) 토글 함수
{
*state = ~(*state);
ON_OFF_OUTPUT = *state;
}
void sleep(unsigned int elapsed_time) // 지연 함수
{
g_elapsed_time = 0;
while(elapsed_time > g_elapsed_time);
}
==================================================================================================
'IT_etc > dk-128 (ATmega128)' 카테고리의 다른 글
[스크랩] 7-1. 윈도우 기반 직렬 단방향 통신 (0) | 2009.08.25 |
---|---|
[스크랩] 6. 외부 EEPROM (0) | 2009.08.25 |
[dk-128] 내부 EEPROM 사용하기 (타이머 카운터 사용) (0) | 2009.07.06 |
적외선 센서 문제 풀기 (0) | 2009.06.25 |
[Atmega128] FND 문제 풀기 (0) | 2009.06.24 |