TIMSK & = ~ 0x02;// Забороняємо переривання від TMR0
if (TIFR & 0x02)
wTimerOvfCnt + +;// Враховуємо можливість переповнення
lTmp = (62500L * 60L * (long) wFlashCnt) ;/ = ((wTimerOvfCnt <<8) + TCNT0) ;/ = byBladeCnt; = lTmp;
// Перезапускаємо вимірювання = TRUE; = 0; = 0; B = 0x03;// FCK/64 (62.5 KHz) 0 = 0;
TIFR = 0x02;
TIMSK | = 0x02;// Дозволяємо переривання від TMR0
// GIFR = 0x40;
}
} = 0x40; | = 0x40;
}
/***************************************** *********************************
Обробка переповнень TMR0 (додаємо до лічильника ще 8 розрядів)
Вхід: -
Вихід: -
{
wTimerOvfCnt + +;
// Якщо імпульсів не було дуже довго, то показуємо
// 0 оборотів і запускаємо вимір заново
if (wTimerOvfCnt> NO_PULSES_INTERVAL)
{
wRpm = 0;
btFirstLowRateFlash = TRUE;
wTimerOvfCnt = 0;
}
}
/***************************************** *********************************
Головний функція. Ініціалізація всіх модулів. Цикл виклику робочих
підпрограм.
Вхід: -
Вихід: -
***************************************** *********************************/
void main (void)
{
// Crystal Oscillator division factor:
# pragma optsize-= 0x80; = Prescaler;// 0x00 - для кварцу 4MHz, 0x01 - для кварцу 8MHz ...
# ifdef _OPTIMIZE_SIZE_
# pragma optsize +
# endif
# asm ("cli");
MCUCR = 0x00;// Забороняємо SLEEP, режими переривання поки не важливі.
// У принципі, цього можна і не робити.
GIMSK = 0x00;// Забороняємо зовнішні переривання
EIFR = 0xFF;// Очищаємо прапори переривань
TIMSK = 0x00;// Забороняємо переривання від таймерів
TIFR = 0xFF;// Очищаємо прапори переривань
// Розряд DDRx - визначає напрямок передачі даних (0 - вхід, 1 - вихід).
// Розряд PORTx - якщо висновок визначений виходом (DDRx = 1), то:
// якщо встановлена ​​1 - то на виведенні встановлюється лог. 1