본문 바로가기

프로테우스/타이머 / 카운터

타이머를 이용한 LED


#include 

unsigned char led = 0xfe;
unsigned int cnt;

interrupt [17] void timerint0(void)
{ 
    if(cnt++ >= 9999){ // 10000*1 = 10000 usec
    cnt = 0;
    if(led!=0x7f) led = (led << 1) | 0x01; // 비트7을 안켰으면 1비트씩 좌로 시프트하고 빈자리에는 1을 채운다.
    else led = 0xfe; } // 비트7을 켰으면 다시 처음으로 와서 비트 0을 켠다.
    TCNT0 = 240; // 재정의 1usec = 1*(256-240)/16 16MHz와 분주비 1사용시
    PORTC = led;
}

void main(void)
{
    DDRC = 0xff; // 포트C를 출력으로
    PORTC = led;
    SREG |= 0x80; //인터럽트 전체 허용
    TIMSK |= 1; // 타이머0 오버플로 인터럽트 개별허용
    TCCR0 |= 1; // 분주비를 1로 설정
    TCNT0 = 240;
    while(1);
}

'프로테우스 > 타이머 / 카운터' 카테고리의 다른 글

PWM을 이용한 LED 밝기제어  (0) 2011.10.04
500msec 간격이로 LED 이동  (0) 2011.10.04
타이머 LED 점멸 2번째  (0) 2011.10.04