본문 바로가기
임베디드/Atmega128

8비트 + 16비트 섞어 써보기

by sj0020 2021. 1. 29.
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>

#define LED1   PB7 // 8bit 타이머 카운터 사용할 led
#define LED2  PB6 // 16bit 타이머 카운터 사용할 led

volatile unsigned long timer0;      //오버플로마다 1씩 증가될 변수
volatile unsigned long timer1;

ISR(TIMER0_OVF_vect)
{
	timer0++;                  // 오버플로마다 1씩 증가
	
	if(timer0 % 100 == 0){
		PORTB ^= 1 << LED1;         // PORTB의 LED 위치 비트를 반전시킴
	}
}

ISR(TIMER1_OVF_vect)
{
	timer1++;                  // 오버플로마다 1씩 증가
	
	//if(timer1 % 100 == 0){
		PORTB ^= 1 << LED2;         // PORTB의 LED 위치 비트를 반전시킴
	//}
}

int main(void)
{
	DDRB |= (1 << LED1); 
	DDRB |= (1 << LED2);            // LED 출력 핀으로 설정
	
	TCCR0 |= (1 << CS02) | (1 << CS01);   //256 분주 프리스케일러
	TCCR1B |= (1 << CS12) | (1 << CS10) ;   //1024 분주 프리스케일러 (65536*1024)/16mhz = 4.194304초
	
	TIMSK |= (1 << TOIE0); 
	TIMSK |= (1 << TOIE1);         //타이머/카운터 인터럽트 활성화
	
	timer0 = 0;
	timer1 =0;
	sei();
	
	while (1);
	return 0;
}