AVR
인터럽트를 사용해서 PORTA에 LED 깜빡거리게 켜기
이제팔
2023. 3. 17. 11:46
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h> // for interrupt
#include <util/delay.h>
int ms_count=0;
int sec_count=0;
int led_toggle=0;
void init_time0();
int main(void)
{
//testmode;
init_time0();
DDRA=0xff;
while (1)
{
}
}
//TCNT0가 256이 되면 자동으로 이곳 진입(1ms마다)
ISR(TIMER0_OVF_vect)
{
TCNT0=6;
if(++ms_count >= 1000) //1000ms = 1sec
{
ms_count=0;
led_toggle=!led_toggle;
//ledtest;
if (led_toggle)
{
PORTA=0xff;
}
else
{
PORTA=0x00;
}
}
}
void init_time0()
{
TCNT0=6; // TCNT 6~256 : 정확하게 1ms마다 timer 0가 뜬다
TCCR0 |= ( 1<<CS02 | 0<<CS01 | 0<<CS00); //64분주 p296
TIMSK |= (1<<TOIE0); // timer 0 overflow interrupt enable
sei(); //global interrupt enable
}