/*
INT0
timer0 500ms
평상시
LED_OFF 0xFF - PORTF
INT0 입력이 들어오면 500ms후에 불이 켜지게
하나씩 증가시켜서 불이 켜지도록 8개까지 켜지고 종료
*/
#include<avr/io.h>
#include<avr/interrupt.h>
#include<avr/signal.h>
#define CPU_CLOCK 16000000
#define TICKS_PER_SEC 1000
#define Prescaler 64
#define OVERFLOW 256
volatile unsigned int tic_time;
volatile unsigned STATE_FLAG;
void init_port(void);
void init_timer0(void);
int main(void){
init_port();
init_timer0();
sei();
while(1){
if(tic_time>=500&&STATE_FLAG==1){
tic_time=0;
PORTF=(PORTF<<1);
}
}
return 0;
}
void init_port(void){
DDRF=0xFF;
PORTF=0xFF;
cbi(DDRD,INT0);
EIFR=0x00;
EICRA=0x03;
EIMSK=0x01;
}
void init_timer0(void){
TIFR=0x00;
TCNT0=0x00;
TCCR0=0x0C;
OCR0=CPU_CLOCK/TICKS_PER_SEC/Prescaler;
TIMSK=0x02;
}
SIGNAL(SIG_INTERRUPT0){
tic_time=0;
STATE_FLAG=1;
}
SIGNAL(SIG_OUTPUT_COMPARE0){
tic_time++;
}
Posted by rCan

