4. ما فائدة هذه المتغيرات وهل اذا لغيتهم هيحصل مشكلة
كود:
temp_flag1=2;
temp_flag2=0;
first_start=255;
|
أخي هذه متغيرات مهمه
1- temp_flag1 هو يسمح لك بأن تعرض رساله مره واحده على سبيل مثال
كود:
if (act_temp < 24 && (temp_flag1.b0==0||first_start==0) )
{
temp_flag1=1;
temp_flag2=0;
first_start=255;
portc.f0 = 0; //signal to motor forward direction
PWM1_Stop();
Lcd_out( 2, 1,stop);
}
فهذا temp_flag1 عباره عن 8 بت وانا في كل اختبار كالكود اعلاه لكي اسمح للبيك بأن ينفذ الامر مره واحده فقط وعليه كتبت temp_flag1=1 هذا ماذا يعني يعني لو تلاحظ الاختبار temp_flag1.b0==0 انا جعلت هذا flag =1
وهكذا كل كود انفذه اجعل flag خاص به =1 وصفر البقيه
ملاحظه سبب أختياري ل متغيرين أثنين
temp_flag1
temp_flag2
هو لان أختبارات او شروط الي وضعتها لمقارنه درجات حراره بحدود 9 شروط وكل flag هو 8 بت وبتالي لكي اسمح لكل شرط يتنفذ مره واحده احتاج الى متغيرين اثنان الاول يغطي 8 شروط الاولى والثاني لشروط اخرى
طبعا هو انت تسأل ليش ما أستخدمت لكل شرط متغير الجواب لكي اوفر بحجم الذاكره وانا بحقيقه لست محتاج لمتغير سعته 8بت وانما يكفي flag يعني بت واحد وبتالي اختاري ل متغير 1 بايت اي 8 بت اكدر استفاد منه بأني حصل منه 8 flags
مثلا بت رقم 6 يكتب هكذا temp_flag1.b5 طبعا حساب يبدأ من 0 لذا وضعت b5
طبعا بدون هذه flags راح اخلي البيك يعرض نفس الرساله مرات متكرره وهذا يسبب تهنج البيك وعلاوه على ذلك ماهو داعي من تكرار نفس الرساله عده مرات
===============================
5. ممكن تشرحلى انت عملت ايه هنا
كود:
else{
if(i==1)PWM1_Start();
duty_man =duty+ ((i*255)/8) ;
if(duty_man>255)
{
duty_man=0;
duty=0;
}
display_message(duty_man , 0);
}
delay_ms(250);
|
هذا الكود في حاله منول وهو بسيط
انت بالبدايه i=0 ومن يتم ضغط سويج مره الاولى راح يصبح i=1 عندها راح اشغل PWM وبعد ماكو حاجه اني اشغل PWM مره اخرى يعني يجب عليك اخي عدم جعل البيك يكرر الامر عده مرات لانه قد يسبب لك مشاكل
وهذه معادله
duty_man =duty+ ((i*255)/8
مهمتها تحسب duty ولكن لازم ماأبدا من البدايه اي لازم اكمل من duty الي انا مضبط عليها محرك لهذا وضعت duty+
طبعا انه لازم أختبر duty يجب ان لاتتجاوز قيمتها اكبر من 255 لانه سوف يسبب لك مشاكل منها هو PWM1_Set_Duty يأخذ char اي قيمه لاتتجاوز 255 فأذا انطيت مثلا 256 فأنه اتوماتيكا راح يساوي 1 لانه متغير حجمه 255 وبتالي راح يعيد نفسه من 0 الى 255 وهكذا لهذا يجب عليه اضع شرط اذا كان duty اكبر من 255 خلي duty =0 لكي يعيد من جديد وهكذا
===================================
if (kk==0)
{
PWM1_Stop();
Lcd_out( 2,1,stop);
}
|
أخي هذا الكود ضروري جدا لايقاف المحرك