프로그래밍/ATmega128

ATmega128 타이머로 1초 만들기

min0628 2015. 4. 4. 22:58


예전에 해서 기억은 잘...안나지만 정리용 포스팅 이다.


ATmega128에 타이머는 8비트 2개(Timer0, 2), 16비트 타이머 2개(Timer 1, 3)


#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU  		16000000

unsigned int  timer0Cnt = 0;
unsigned char timer1Cnt = 0;

unsigned char timer0Sec = 0;
unsigned char timer1Sec = 0;

SIGNAL(SIG_OVERFLOW0);
SIGNAL(SIG_OVERFLOW1);

void Timer_Init(void) {
	TCCR0 = 0x05;
	TCNT0 = 0x83;
	TIMSK |=1<<TOIE0;
	TIFR  |=1<<TOIE0;

	TCCR1B = (1<<CS12);
	TCNT1  = 59286;
	TIMSK |= 1<<TOIE1;
}

void Device_Init(void) {
	sei();
	Timer_Init();
	cli();
}

int main(void) {
	Device_Init();

	sei();

	while(1);

	return 0;
}

SIGNAL(SIG_OVERFLOW0) {
	cli();

	TCNT0 = 0x83;
	timer0Cnt++;
	
	if(timer0Cnt == 1000){
		timer0Sec++;			// 1초 변수
		timer0Cnt = 0;
	}
	sei();
}

SIGNAL(SIG_OVERFLOW1) {
	cli();

	TCNT1=59286;
	timer1Cnt++;
	
	if(timer1Cnt == 10){
		timer1Sec++;			// 1초 변수
		timer1Cnt = 0;
	}
	sei();
}


대충 이런식으로 쓴듯...

반응형