السلام عليكم
اولا شرح سريع للكود
نبدأ بأول سطر للكود وهوا اعلان عن وجود متغير لكي يتم حجز مساحه من ذاكرة الوصول العشوائي للمتحكم وهنا نوع المتغير هوا " short: عدد صحيح حجمه 2 بايت.
كود:
unsigned short current_duty;
اللون الأزرق اعلان عن متغير
اللون الأحمر نوع المتغير
اللون الأخضر اسم المتغيرر
وهنا قائمه بأنواع المتغيرات
أنواع االمتغيرات
int: عدد صحيح حجمه 4 بايت.
short: عدد صحيح حجمه 2 بايت.
long: عدد صحيح حجمه 4 بايت.
bool: منطقي حجمه 1 بايت.
float: عدد عشري حجمه 4 بايت.
double:عدد مضاعف حجمه 4 بايت.
char: حرفي من جدول الأسكي
wchar_t: حرفي واسع يضم جدول اليونيكود أوسع من الأسكي.
وهنا دور هذا المتغير هوا اللذي سوف نستخدمه في ضبط عرض النبضه و سوف اوضح ذالك بعد قليل
-------------------------------------------------------------------------------------------------------
وهنا الداله الأساسيه وهي من يبدأ البرنامج منها نزولا لأسفل
واسم هذه الداله هوا شرطي ولا يمكن تغيير اسمها علي عكس الدوال الفرعيه وسيأتي شرحها في مواضيع اخري لأنها ليست موجوده في هذا البرنامج .. وللعلم يمكنك تسمية الدوال الفرعيه كما تشاء بشرط أن لا تأخذ اسم متغير أو تكرر اسم الداله ووجود مسافه في اسمها لا يقبل المترجم وجود مسافه في اسم الداله
..---------------------------------------------------------------------------------------------------------
وهنا تم اخبار المتحكم اننا نريد استخدام المنفذ C بالكامل ك خرج وهنا يحتوي المنفذ علي 8 بيت أي 8 ارجل
وها هوا امر تهيئه المنفذ Cك خرج
وهنا اخبرنا الميكرو ان يخرج صفر فولت علي جميع ارجل المنفذ C
وهنا لاحظ الصفر الموجود أخر الأمر بالون الأزرق C
هنا نكتب الأرقام بالنظام
DECIMAL
وهنا اخبرنا المتحكم اننا نريد استخدام المنفذ B بالكامل ك دخل لكي نشبك عليه المفاتيح
سيتم شرح الرقم 255 هذا ولماذاا 255 وايضااا لماذا صفر
وهنا اخبرنا المتحكم بجعل كل اطراف المنفذ B = صفر فولت
-------------------------------------------------------------------------------------------------------
وهذا الأمر نستطيع من خلاله ان نظبط التردد اللذي نحتاجه للموجه الخارجه
والرقم 1000 يدل علي قيمة التردد ويمكننا تغيره كما نشاء
-----------------------------------------------------------------------------------------------------
وهذا الأمر يتحكم في عرض الموجه
والرقم 255 يدل علي اقصي عرض للموجه يمكننا استخدامه
------------------------------------------------------------------------------------------------------
وهذا الأمر يجعل المتحكم يكرر تنفيذ الأكواد الي ما لا نهايه
-------------------------------------------------------------------------------------------------------
نأتي الأن الي بدأ المتحكم في تنفيذ الأوامر بعد ان تم تهيئة الأطراف وتحديد وظائفها
كود:
if(PORTB.f0==1){current_duty++; delay_ms(50);};
الأن نقطع هذا الأمر
كود:
if(PORTB.f0==1){current_duty++; delay_ms(50);};
وهوا أمر شرطي
اولا جملة
ومعناها في الشروط المنطقيه ( لو )
وهنا نأتي لتكمله شرح باقي امر الشرط
وهنا كما هوا واضح ان المنفذ B البن رقم صفر
لو تساوي واحد أي تم الضغط علي المفتاح المربوط مع البن رقم صفر في المنفذ B لو = 1 ايذا تم الضغط علي المفتاح ويتم تنفيذ هذه العباره داخل القوسين
كود:
{current_duty++; delay_ms(50);};
وهنا يتم ذيادة قيمة المتغير
بواحد بستمرار حيث مزال المفتاح مضغوط عليه وهنا كان لازم ان نجعل المتحكم أن ينتظر 50 ميلي سانيه قبل ان يعيد ذيادة المتغير بواحد اخر من خلال هذا الأمر
ولأن المتحكم ينفذ الأوامر بسرعة كبيره كان لازم نضع أمر تأخير لكي نلاحظ التغيرر اللذي يحدث في عرض الموجه
-----------------------------------------------------------------------------------------------------
وهنا
كود:
if(PORTB.f1==1){current_duty--; delay_ms(50);};
نفس شرح الأمر السابق مع اختلاف ان هذا الأمر ينقص المتغير
بواحد عند كل ضغطه للمفتاح الثاني
-------------------------------------------------------------------------------------------------------
وهنا تأتي اهمية المتغير
من خلال هذا الأمر
كود:
PWM1_Set_Duty(current_duty);
كان من الممكن ان نكتب أمر التحكم في عرض النبضه هكذا
ولكن لو فعلا ذالك لا يمكننا التحكم في عرض النبضه الا عند كتابة البرنامج فقط بمعني نظبط عرض الموجه وعند تنزيل البرنامج علي المتحكم ستكون عرض الموجه كما كتبناها في البرنامج ولا يمكننا التحكم فيها
----------------------