타이머
#include <ddr.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define CPU_CLOCK 16000000 // cpu clodk = 16,000,000 Hz
#define TICKS_PER_SEC 1000 // Ticks per sec = 1,000
#define PRESCALER 64 // 클럭의 배수 (크기,오버헤드)
#define DDR_LED DDRF
#define DATA_TO_LED PORTF
#define DDR_SENSOR DDRD
#define DATA_FROM_SENSOR PIND
volatile unsigned int g_elapsed_time; // 시간 변수
initLED(); // LED 초기화
setTCCR0();
initTCNT0();
setTIMSK();
sleep(unsigned int elapsed_time); // 1초대기
SIGNAL(SIG_OVERFLOW0);
int main()
{
initLED();
setTCCR0();
initTCNT0();
setTIMSK();
sei(); // 인터럽트 활성화
while(1)
{
sleep(1000);
DDR_LED=DDR_LED+1
}
return 1;
}
initLED() //LED 초기화 함수
{
DDR_LED=0xFF;
DATA_TO_LED=0xFF; // 전부켜져있음
}
setTCCR0() //분주비 64로 설정
{
TCCR0=0b00000100;
}
initTCNT0() // 카운터 6으로 초기화
{
TCNT0=0b00000110;
}
setTIMSK() // 오버플로우 사용하겠다.
{
TIMSK=0b00000001;
}
sleep(unsigned int elapsed_time) // elapsed_time = 1000
{
int a=0;
g_elapsed_time=0;
while(1)
{
if(elapsed_time==g_elapsed_time)
{
break;
}
DDR_LED=~a;
a++;
}
}
SIGNAL(SIG_OVERFLOW0)
{
initTCNT0() ;
g_elapsed_time=g_elapsed_time+1;
}