byDisplay [2]]; .0 = 0; _us (LED_delay); .0 = 1; = byCharacter [byDisplay [3]]; .4 = 0; _us (LED_delay ); .4 = 1;
# endif
# ifdef Anode = ~ byCharacter [byDisplay [0]]; .5 = 1; _us (LED_delay); .5 = 0; = ~ byCharacter [byDisplay [1]]; .1 = 1 ; _us (LED_delay); .1 = 0;
= ~ byCharacter [byDisplay [2]]; .0 = 1; _us (LED_delay); .0 = 0; = ~ byCharacter [byDisplay [3]]; .4 = 1; _us ( LED_delay); .4 = 0;
# endif (! PIND.6)
{_us (Light_delay);
}
}
/***************************************** *********************************
Обробка переривань від OC1 (для відліку імпульсів 0.1 сек)
Вхід: -
Вихід: -
{
// Обчислюємо оммент наступного спрацьовування таймера
OCR1A + = CNT_100_MS;
// 3 рази на секунду перемальовували дисплей,
// незалежно від обставин.
if (+ + byDisplayRefreshCnt == UpCount)
{
byDisplayRefreshCnt = 0;
btDisplayUpdate = TRUE;
}
// Якщо секундомір запущений - інкрементіруем його свідчення
if (btTimerOn)
{(+ + byTcnt == 10)
{= 0; (+ + wTime == 60000)
wTime = 0;
}
}
}
/***************************************** *********************************
Обробка переривань від керуючих імпульсів
Вхід: -
Вихід: -
{lTmp; & = ~ 0x40; (btFirstLowRateFlash)
{
// Перший імпульс, скидаємо лічильник періоду і
// лічильник імпульсів
wTimerOvfCnt = 0;
wFlashCnt = 0;
TCNT0 = 0;
TIFR = 0x02; B = 0x03;// FCK/64 (62.5 KHz) 0 = 0;
TIMSK | = 0x02;// Дозволяємо переривання від TMR0
btFirstLowRateFlash = FALSE;
}
else
{
wFlashCnt + +;
// Перевіряємо, чи не час закінчити вимірювання
if (wTimerOvfCnt> TIMER_OVF_ENOUGHT)
{
TCCR0B = 0;// Зупиняємо TMR0
GIMSK & = 0x40;// Забороняємо переривання від INT0
...