Çäðàâåéòå! Ñåãà ïèøà êîä çà ÷àñò îò êóðñîâà ðàáîòà ("ñúñòåçàòåëåí" ñëåäà÷ íà ëèíèÿ), â êîéòî èìà äîñòà interrupts, âñè÷êè îò êîèòî âàæíè. Çà äà èçáåãíà ìàñêèðàíå, èäåÿòà ìè å äà íàïðàâÿ ïîâå÷åòî, àêî íå è âñè÷êè íà ñîôòóåðíè òàêèâà. Ò.å:

Code:
int main(void){	
	init();
	
	static unsigned char i;
	while(1)
	{
		if(TIFR1&(1<<TOV1))//Timer1 Overflow
		{
			reg.power=ADC_read();
			if(reg.pause){//paused
				if(i%32==0){PORTD^=1<<HEART;}//blink slowly
				reg.servo=(angle_max-angle_min)/2+angle_min;//set servo to midposition
			}
			else{//unpaused
				if(i%16==0){PORTD^=1<<HEART;}//blink quickly	
			}
			
			OCR1A=reg.servo;
			OCR2A=reg.power;
			i++;
			TIFR1|=1<<TOV1;//reset the interrupt flag
		}
	}
}
Òîçè êîä ðàáîòè è ïîíå çà ìåí å íåðàçëè÷èì îò òîçè ñ interrupts. Ãëàâíî çàùîòî çàñåãà å ñàìî åäèí ïðîñò òàéìåð. Îáà÷å, ñêîðî ùå èìà äîñòà ïî- ñëîæåí êîä- ùå ñe ïîëçâàò âñè÷êèòå ADC, âúíøåí àíàëîãîâ ìóëòèïëåêñîð, îáîðîòè â ñåêóíäà ïî ñìÿíà íà ïèíîâåòå è ÷àñîâíèê, áóòîíè è ìîæå áè äðóãè âúíøíè âõîäîâå. Òà ñå ÷óäåõ êàêúâ ïðîñò àëãîðèòúì íà scheduler-à áè áèë ïîäõîäÿù çà òàêàâà ñèñòåìà. Íàé- âàæíèòå õàðàêòåðèñòèêè ñà îïðåäåëåíè interrupts äà ñå èçïúëíÿâàò âåäíàãà è â ðàìêèòå íà 10-20ms äà ñå ìèíå ïîíå ïî âåäíúæ ïðåç âñåêè îò òÿõ.