Results 1 to 1 of 1
Hybrid View
-
10th December 2012 14:56 #1
Èäåÿ çà ïðîñò scheduler çà AVR íà C
Çäðàâåéòå! Ñåãà ïèøà êîä çà ÷àñò îò êóðñîâà ðàáîòà ("ñúñòåçàòåëåí" ñëåäà÷ íà ëèíèÿ), â êîéòî èìà äîñòà interrupts, âñè÷êè îò êîèòî âàæíè. Çà äà èçáåãíà ìàñêèðàíå, èäåÿòà ìè å äà íàïðàâÿ ïîâå÷åòî, àêî íå è âñè÷êè íà ñîôòóåðíè òàêèâà. Ò.å:
Òîçè êîä ðàáîòè è ïîíå çà ìåí å íåðàçëè÷èì îò òîçè ñ interrupts. Ãëàâíî çàùîòî çàñåãà å ñàìî åäèí ïðîñò òàéìåð. Îáà÷å, ñêîðî ùå èìà äîñòà ïî- ñëîæåí êîä- ùå ñe ïîëçâàò âñè÷êèòå ADC, âúíøåí àíàëîãîâ ìóëòèïëåêñîð, îáîðîòè â ñåêóíäà ïî ñìÿíà íà ïèíîâåòå è ÷àñîâíèê, áóòîíè è ìîæå áè äðóãè âúíøíè âõîäîâå. Òà ñå ÷óäåõ êàêúâ ïðîñò àëãîðèòúì íà scheduler-à áè áèë ïîäõîäÿù çà òàêàâà ñèñòåìà. Íàé- âàæíèòå õàðàêòåðèñòèêè ñà îïðåäåëåíè interrupts äà ñå èçïúëíÿâàò âåäíàãà è â ðàìêèòå íà 10-20ms äà ñå ìèíå ïîíå ïî âåäíúæ ïðåç âñåêè îò òÿõ.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 } } }D80; 50/1.8D; Tamron 70-300; 18-55 VR;




Reply With Quote
Lenovo ThinkPad 15 èëè IdeaPad 15
5th May 2023, 22:16 in Ìîáèëíè êîìïþòðè