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
}