AVR study

[AVR] 오버플로우 인터럽트를 이용한 카운터 - LED 제어

techbro 2013. 1. 20. 00:41
반응형

 

 

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

volatile unsigned int cnt=0; // 타이머 발생 횟수
volatile unsigned int flag=0;


ISR(TIMER0_OVF_vect) // 타이머0 오버플로 언터럽트 서비스루틴
{
 TCNT0=0x83; // 타이머/카운터 레지스터 131부터 시작
 cnt++; //타이머 발생 횟수 1증가

 if(cnt<1000)
  PORTA = 0X11; // 타이머 발생 1000번째에 LED 켜기
 else if ((cnt>1000)&&(cnt<2000)) {
  PORTA=0X00; // 타이머 발생 1000번 이후에 1000번 동안 LED 끄기
 }

 else if(cnt>2000)
 cnt=0; // 타이머 발생 2000번 이후에 발생 횟수 초기화
}

int main(void) {

 TCNT0 = 0x06; // ---------------------> 1ms 만들기 위한 시스템 타이머 레지스터 설정
 TCCR0 = 0x04; // ----------------> freescale 64배수
 TIMSK = 0x01; // --------------> 오버플로우 인터럽트 사용
 SREG = 0x80; // --------------> 인터럽트 허용 레지스터
 
 DDRA = 0xff; // ---------> PORTA 출력 방향 설정 레지스터
 while(1) {

 }
 
}

 

 

반응형