سلام تو سایت ها دنبال یه مطلب درباره برنامه نویسی برای میکرو ها به شیوه ماژولار میگشتم که ببینم اصلا چی هست و تصمیم گرفتم یکی از اون ها رو هم اینجا بذارم ببینین (مطلب از محمد علی قنبرلو )
ین شیوه قالب کلی برنامه تون رو تعیین میکنه . یعنی شما قبل از اینکه هر بخشی از برنامه تون رو بخواهید بنویسید باید اول قالب و ساختار برنامه نویسی تون رو تعیین کنید که برنامه تون رو چه طوری میخواهید بنویسید ؟
من خودم تا حالا از شیوه ماژولار استفاده کردم و توصیه می کنم شما هم از همین شیوه استفاده کنید .
این توضیحات مربوط به زبان برنامه نویسی C هستش :
وقتی شما تو Codevision تنظیمات آیسی رو انجام میدید در آخر میرسید به مهم ترین بخش برنامه یا همون حلقه اصلی ( While ) . خیلی ها تمام برنامه رو تو همین وایل مینویسند . گاهی اوقات این وایل به حدود 200 یا 300 خط میرسه و دیباگ کردنش خیلی سخت میشه . امکان خطا هم بسیار بالا میره .برای رفع این مشکل شما میتونید قبل از وایل توابعی رو که میخواهید استفاده کنید به طور دستی تعریف کنید . مثلا میخواهید موتور سمت راست شروع به چرخش به سمت چپ بکنه . به جای اینکه تو وایل به درایور دستور بدین میتونید یه تابع به طور دستی خودتون بنویسید که با دادن جهت و سرعت به عنوان دو تا متغیر به تابع خود تابع موتور رو کنترل کنه . توی وایل فقط کافیه تابع رو احضار کنید ! مثلا :
While (1)
{
….
if (&hellip
Motor ( 1,75);
….
}
توی تابع بالا 1 نشونه جهت موتور و 75 درصد سرعت موتوره . دیدین که تو وایل فقط یه خط نوشتین و توضیحات تابع رو قبل از وایل نوشتین .
تو این روش شاید وایل اصلی شما حدود 20 یا 30 خط بشه . مثلا اگه شما خواستید روبات یه جا وایسه و یه چشمک هم با LED بزنه دیگه لازم نیست تمام برنامه رو تو وایل بنویسید بلکه میتونسد قبل از وایل یه تابع به نام ()Cheshmak تعریف کنید . مراحل برنامه رو توش بنویسید . حالا تو وایل فقط با احضار کردن اون تابع میتونید چشمک بزنید .
یه نمونه ساده خط یاب با استفاده از این شیوه :
( لازم به ذکره OCR1A,B همون تایمره که برای تنظیم سرعت استفاده میشه و PWM میده .)
In1-4 هم به in های درایور 0 و 1 میده . )
void strate(void)
{
OCR1A=80;
OCR1B=80;
in1=1;
in2=0;
in3=1;
in4=0;
}
void right1(void)
{
OCR1A=100;
OCR1B=50;
in1=1;
in2=0;
in3=1;
in4=0;
}
void right2(void)
{
OCR1A=110;
OCR1B=0;
in1=1;
in2=0;
in3=1;
in4=0;
}
void right3(void)
{
OCR1A=130;
OCR1B=0;
in1=1;
in2=0;
in3=0;
in4=1;
}
void right4(void)
{
OCR1A=120;
OCR1B=50;
in1=1;
in2=0;
in3=0;
in4=1;
}
void right5(void)
{
OCR1A=120;
OCR1B=100;
in1=1;
in2=0;
in3=0;
in4=1;
}
void left1(void)
{
OCR1A=50;
OCR1B=100;
in1=1;
in2=0;
in3=1;
in4=0;
}
void left2(void)
{
OCR1A=0;
OCR1B=110;
in1=1;
in2=0;
in3=1;
in4=0;
}
void left3(void)
{
OCR1A=0;
OCR1B=130;
in1=0;
in2=1;
in3=1;
in4=0;
}
void left4(void)
{
OCR1A=50;
OCR1B=120;
in1=0;
in2=1;
in3=1;
in4=0;
}
void left5(void)
{
OCR1A=100;
OCR1B=120;
in1=0;
in2=1;
in3=1;
in4=0;
}
…..
void main(void)
{
…....
…....
while (1)
{
if (sen1<min)
left5();
if (sen11<min )
right5();
if (sen2<min )
left4();
if (sen10<min )
right4();
if (sen3<min )
left3();
if (sen9<min )
right3();
if (sen4<min )
left2();
if (sen8<min )
right2();
if (sen5<min )
left1();
if (sen7<min )
right1();
if (sen6<min )
strate();
};
}
ین شیوه قالب کلی برنامه تون رو تعیین میکنه . یعنی شما قبل از اینکه هر بخشی از برنامه تون رو بخواهید بنویسید باید اول قالب و ساختار برنامه نویسی تون رو تعیین کنید که برنامه تون رو چه طوری میخواهید بنویسید ؟
من خودم تا حالا از شیوه ماژولار استفاده کردم و توصیه می کنم شما هم از همین شیوه استفاده کنید .
این توضیحات مربوط به زبان برنامه نویسی C هستش :
وقتی شما تو Codevision تنظیمات آیسی رو انجام میدید در آخر میرسید به مهم ترین بخش برنامه یا همون حلقه اصلی ( While ) . خیلی ها تمام برنامه رو تو همین وایل مینویسند . گاهی اوقات این وایل به حدود 200 یا 300 خط میرسه و دیباگ کردنش خیلی سخت میشه . امکان خطا هم بسیار بالا میره .برای رفع این مشکل شما میتونید قبل از وایل توابعی رو که میخواهید استفاده کنید به طور دستی تعریف کنید . مثلا میخواهید موتور سمت راست شروع به چرخش به سمت چپ بکنه . به جای اینکه تو وایل به درایور دستور بدین میتونید یه تابع به طور دستی خودتون بنویسید که با دادن جهت و سرعت به عنوان دو تا متغیر به تابع خود تابع موتور رو کنترل کنه . توی وایل فقط کافیه تابع رو احضار کنید ! مثلا :
While (1)
{
….
if (&hellip

Motor ( 1,75);
….
}
توی تابع بالا 1 نشونه جهت موتور و 75 درصد سرعت موتوره . دیدین که تو وایل فقط یه خط نوشتین و توضیحات تابع رو قبل از وایل نوشتین .
تو این روش شاید وایل اصلی شما حدود 20 یا 30 خط بشه . مثلا اگه شما خواستید روبات یه جا وایسه و یه چشمک هم با LED بزنه دیگه لازم نیست تمام برنامه رو تو وایل بنویسید بلکه میتونسد قبل از وایل یه تابع به نام ()Cheshmak تعریف کنید . مراحل برنامه رو توش بنویسید . حالا تو وایل فقط با احضار کردن اون تابع میتونید چشمک بزنید .
یه نمونه ساده خط یاب با استفاده از این شیوه :
( لازم به ذکره OCR1A,B همون تایمره که برای تنظیم سرعت استفاده میشه و PWM میده .)
In1-4 هم به in های درایور 0 و 1 میده . )
void strate(void)
{
OCR1A=80;
OCR1B=80;
in1=1;
in2=0;
in3=1;
in4=0;
}
void right1(void)
{
OCR1A=100;
OCR1B=50;
in1=1;
in2=0;
in3=1;
in4=0;
}
void right2(void)
{
OCR1A=110;
OCR1B=0;
in1=1;
in2=0;
in3=1;
in4=0;
}
void right3(void)
{
OCR1A=130;
OCR1B=0;
in1=1;
in2=0;
in3=0;
in4=1;
}
void right4(void)
{
OCR1A=120;
OCR1B=50;
in1=1;
in2=0;
in3=0;
in4=1;
}
void right5(void)
{
OCR1A=120;
OCR1B=100;
in1=1;
in2=0;
in3=0;
in4=1;
}
void left1(void)
{
OCR1A=50;
OCR1B=100;
in1=1;
in2=0;
in3=1;
in4=0;
}
void left2(void)
{
OCR1A=0;
OCR1B=110;
in1=1;
in2=0;
in3=1;
in4=0;
}
void left3(void)
{
OCR1A=0;
OCR1B=130;
in1=0;
in2=1;
in3=1;
in4=0;
}
void left4(void)
{
OCR1A=50;
OCR1B=120;
in1=0;
in2=1;
in3=1;
in4=0;
}
void left5(void)
{
OCR1A=100;
OCR1B=120;
in1=0;
in2=1;
in3=1;
in4=0;
}
…..
void main(void)
{
…....
…....
while (1)
{
if (sen1<min)
left5();
if (sen11<min )
right5();
if (sen2<min )
left4();
if (sen10<min )
right4();
if (sen3<min )
left3();
if (sen9<min )
right3();
if (sen4<min )
left2();
if (sen8<min )
right2();
if (sen5<min )
left1();
if (sen7<min )
right1();
if (sen6<min )
strate();
};
}
دیدگاه