Показать сообщение отдельно

  #5  
Старый 07.09.2009, 17:20
kot_polosatik
Новичок
Регистрация: 25.08.2009
Сообщений: 10
Провел на форуме:
52659

Репутация: 1
По умолчанию

для начала надо знать частоту кварца - при 16MHz ATMega надо сделать так
Код:
// здесь пишем время в часах
#define YOU_HOUR_VALUE 18 
// расчетное значение будет 61,274509803921568627450980392157 прерываний в секунду =)) округляем до 61, без часового кварца точности не будет.
#define TIMER_COUNTER 61
#define MAX_COUNTER  TIMER_COUNTER*60*60*YOU_HOUR_VALUE

int counter = 0;

void timer0_interrupt(void)
{
  counter++;
  if (counter > MAX_COUNTER) 
  {
     counter = 0;
     _moya_funkcia_01();
  }
}

void _moya_funkcia_01(void)
{
  // your code here
}

void main(void)
{
  TCCR0 = 0b00000101; // (16 000 000 / 1024)
  TCNT0 = 0x00;
  OCR0  = 0xFF; // ((16 000 000 / 1024) / 255) = 61 Hz
  TIMSK = 0b00000011;

  while(1)
  {
    // your code here
  }
};
регистры могут быть неточно указаны, лень ща копать ДШ =)