1분 카운터 & LED switching
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 |
댓글
이 글 공유하기
다른 글
-
외부 인터럽트실험2
외부 인터럽트실험2
2012.03.09 -
폴링방식과 인터럽트 방식의 차이점
폴링방식과 인터럽트 방식의 차이점
2012.03.09 -
USART 통신 기본
USART 통신 기본
2012.03.09 -
ATmega8 OSCCAL 레지스터 사용하기
ATmega8 OSCCAL 레지스터 사용하기
2012.03.09