ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AVR]타이머/카운터 - LED패턴 변화
    AVR study 2013. 1. 26. 00:42
    반응형

     

    LED패턴 8가지를 배열로 지정하고 switch 구문을 이용해서 LED 패턴의 변화를 주었습니다.

     


     

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

    volatile unsigned int cnt=0; // 타이머 발생 횟수
    volatile unsigned int i=0; // pattern 배열 변수
    unsigned char pattern[8] = {0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff}; // pattern 8가지 종류 선언

    ISR(TIMER0_OVF_vect) // 타이머0 오버플로 언터럽트 서비스루틴
    {
     TCNT0=0x06; // 타이머/카운터 레지스터 6부터 시작
     cnt++; //타이머 발생 횟수 1증가
    //-------------------------------------------------------------> switch구문 시작
     switch (cnt/(int)1000) // 1초 간격으로 LED 패턴 변화
     {
     case 0:
      PORTA = pattern[0]; // 1번 LED ON
      break;
     case 1:
      PORTA = pattern[1]; // 1,2번 LED ON
      break;
     case 2:
      PORTA = pattern[2]; // 1,2,3번 LED ON
      break;
     case 3:
      PORTA = pattern[3]; // 1,2,3,4번 LED ON
      break;
     case 4:
      PORTA = pattern[4]; // 1,2,3,4,5번 LED ON
      break;
     case 5:
      PORTA = pattern[5]; // 1,2,3,4,5,6번 LED ON
      break;
     case 6:
      PORTA = pattern[6]; // 1,2,3,4,5,6,7번 LED ON
      break;
     case 7:
      PORTA = pattern[7]; // 모든 LED ON
      break;
     case 8:
      cnt=0; // 타이머 발생 횟수 초기화
      break;
     }
    //-------------------------------------------------------------> switch구문 끝
     
    }

    int main(void) {

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

     }
     
    }


     

    반응형
Designed by Tistory.