이 영역을 누르면 첫 페이지로 이동
#include < ResetDy.com > 블로그의 첫 페이지로 이동

#include < ResetDy.com >

페이지 맨 위로 올라가기

#include < ResetDy.com >

1분 카운터 & LED switching

  • 2012.03.09 00:46
  • MicroProcessor/AVR
반응형

http://blog.naver.com/MultimediaFLVPlayer.nhn?blogId=freegree&logNo=134336554&vid=4227E2EB95AA15C8771696F0844199B3C451&width=500&height=408&ispublic=false

Timer/Counter0 을 이용한 타이머와 LED 스위칭을 하는 프로그램
///////////////////////////////////////////////////////////////////////////////////////////

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

#define F_CPU 8000000
#define REPEAT_CNT 131
#define MSEC 100 // 1msec = 1000

volatile unsigned int phy_sec;
volatile unsigned int segsec=0;
volatile unsigned int segmin=0;

int sec(int segcnt) // '초' 함수
{
     // int sec[]={ 0xC0, 0xF9, 0xA4, 0xb0, 0x99, 0x92, 0x82, 0xd8, 0x80, 0x98 }; // 1부터 시작
     int sec[]={ 0x98, 0x80, 0xd8, 0x82, 0x92, 0x99, 0xb0, 0xa4, 0xf9, 0xc0 }; // 9부터 시작
     return sec[segcnt];
}
int min(int segcnt2) // '분' 함수
{
     // int min[]={ 0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92 }; // 1부터 시작
     int min[]={ 0x92, 0x99, 0xb0, 0xa4, 0xf9, 0xc0 }; // 5부터 시작
     return min[segcnt2];
}

SIGNAL(SIG_OVERFLOW0) // 인터럽트 발생시 처리문
{
     TCNT0 = REPEAT_CNT;
     phy_sec++;
     if(phy_sec >= MSEC)
     {
          phy_sec = 0;
          segsec++;
         
          if(segsec > 9)
          {
               segsec = 0;
               segmin++;

               if(segmin > 5)
               { 
                    segmin = 0;
                    PORTC = PORTC ^ 0x30; // XOR을 사용하여 LED스위칭
               }
          }
          PORTD = sec(segsec);
          PORTB = min(segmin);
     }
}

void init_port(void) // PORT 초기화 함수
{
     DDRD = 0xff;
     DDRB = 0xff;
     DDRC = 0xff;

     PORTD = 0x98;
     PORTB = 0x92;
     PORTC = 0x20;
}

void init_timer(void) // TIMER 초기화 함수
{
     phy_sec=0;
     TCCR0 = 0x03;
     TCNT0 = REPEAT_CNT;
     TIMSK = 0x01;
}

int main(void) // main 함수
{
     init_port();
     init_timer();
     sei();
     while(1);

     return 0;
}

반응형

'MicroProcessor > AVR' 카테고리의 다른 글

[AVR] Step1. 개발환경 구축하기 (AVR Studio 4.19)  (0) 2017.03.12
cmd에서 avrdude를 이용하여 퓨즈비트 쓰기  (0) 2012.05.23
USBasp - avrdude 명령어  (0) 2012.05.22
외부 인터럽트실험2  (0) 2012.03.09
폴링방식과 인터럽트 방식의 차이점  (0) 2012.03.09
USART 통신 기본  (0) 2012.03.09
ATmega8 OSCCAL 레지스터 사용하기  (0) 2012.03.09

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 외부 인터럽트실험2

    외부 인터럽트실험2

    2012.03.09
  • 폴링방식과 인터럽트 방식의 차이점

    폴링방식과 인터럽트 방식의 차이점

    2012.03.09
  • USART 통신 기본

    USART 통신 기본

    2012.03.09
  • ATmega8 OSCCAL 레지스터 사용하기

    ATmega8 OSCCAL 레지스터 사용하기

    2012.03.09
다른 글 더 둘러보기

정보

#include < ResetDy.com > 블로그의 첫 페이지로 이동

#include < ResetDy.com >

  • #include < ResetDy.com >의 첫 페이지로 이동

검색

메뉴

  • Home
  • Tag
  • Guest Book
  • Write
  • Admin

카테고리

  • 분류 전체보기 (129)
    • VR (3)
    • 내 이야기 (37)
    • Trade (13)
      • 주린이 HTS (0)
      • 주린이 일기 (2)
      • 주린이 공부 (0)
      • 주린이 매매일지 (11)
    • Hardware (2)
      • Tip (1)
      • Schematic (1)
    • Programming (24)
      • C++ (1)
      • C# (5)
      • Python (9)
      • Android (9)
    • MicroProcessor (17)
      • AVR (8)
      • STM32 (6)
      • RaspberryPi (1)
      • Smart Car (2)
    • Computer (23)
      • Tip (6)
      • Linux (5)
      • MacOS (11)
    • Car D.I.Y (10)
      • XMAX300 (1)
      • All New Carnival (5)
      • SM3 (4)

공지사항

블로그 구독하기

  • 구독하기
  • RSS 피드

정보

ResetDy의 #include < ResetDy.com >

#include < ResetDy.com >

ResetDy

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © ResetDy. Designed by Fraccino.

티스토리툴바