본문 바로가기

ATMEGA

타이머 카운터 응용실습2

1. 난수를 발생하여 해당값을 LED에 표시.
ON/OFF를 각각 0.5초간 유지

#include <test.h>
#include <stdlib.h>

#define CPU_CLOCK    16000000
#define TICK_PER_SEC  1000
#define PRESCALER    64

#define LED_DDR DDRE
#define LED_OUT PORTE


volatile unsigned int g_elapsed_time;

void sleep(unsigned int elapsed_time);

void init_LED(void);

void init_TC0(void);


int main()
{
  
  init_LED();
  
  init_TC0();
  
  SREG=SREG|(1<<7);
   
  while(1)
  {
    LED_OUT=rand();
    sleep(500);
    LED_OUT=0xFF;
    sleep(500);
  }
}





void sleep(unsigned int elapsed_time) 
{
  
  for(g_elapsed_time=0;g_elapsed_time<elapsed_time;);
}

void __vector_16 (void
{
  TCNT0=256-(CPU_CLOCK/TICK_PER_SEC/PRESCALER);
  ++g_elapsed_time;
}


void init_LED(void)
{
    LED_DDR=0xFF; 
  LED_OUT=0xFF; 
}


void init_TC0(void)
{
  
  TCCR0=1<<CS02|0<<CS01|0<<CS00;
  
  
  

  TCNT0=256-(CPU_CLOCK/TICK_PER_SEC/PRESCALER);
  
  
  TIMSK=TIMSK|1<<TOIE0;
}


2.위의 소스를 수정하여 각각의 LED 하나에만 랜덤으로 ON/OFF 하도록 하시오.

#include <test.h>
#include <stdlib.h>

#define CPU_CLOCK    16000000
#define TICK_PER_SEC  1000
#define PRESCALER    64

#define LED_DDR DDRE
#define LED_OUT PORTE

volatile unsigned int i;

volatile unsigned int g_elapsed_time;

void sleep(unsigned int elapsed_time);

void init_LED(void);

void init_TC0(void);


int main()
{
  
  init_LED();
  
  init_TC0();
  
  SREG=SREG|(1<<7);
  
  while(1)
  {
    
    i=rand();
    LED_OUT=~(0x01<<i%8);
    sleep(500);
    LED_OUT=0xFF;
    sleep(500);
    
      
  
  }
}





void sleep(unsigned int elapsed_time) 
{
  
  for(g_elapsed_time=0;g_elapsed_time<elapsed_time;);
}

void __vector_16 (void
{
  TCNT0=256-(CPU_CLOCK/TICK_PER_SEC/PRESCALER);
  ++g_elapsed_time;
}


void init_LED(void)
{
    LED_DDR=0xFF; 
  LED_OUT=0xFF; 
}


void init_TC0(void)
{
  
  TCCR0=1<<CS02|0<<CS01|0<<CS00;
  
  
  

  TCNT0=256-(CPU_CLOCK/TICK_PER_SEC/PRESCALER);
  
  
  TIMSK=TIMSK|1<<TOIE0;
}

'ATMEGA' 카테고리의 다른 글

EEPROM 실습문제  (0) 2010.10.28
10월 26일 ATMEGA  (0) 2010.10.26
10월 25일 ATMEGA  (0) 2010.10.25
10월 22일 ATMEGA  (0) 2010.10.22
타이머 카운터 응용실습  (0) 2010.10.21