اتخاذ القرار Decision Making

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

اتخاذ القرار Decision Making

مُساهمة من طرف Admin في الأربعاء أبريل 22, 2015 6:00 pm

اتخاذ القرار Decision Making

أبسط طريقة لتوضيح مبدأ اتخاذ القرار هى تغيير الخرج اعتمادا على حالة الدخل ، الدائرة الكهربية أدناه تبين ذلك ، حيث يولد المفتاح دخل على الطرف RC0 ، بينما الطرف RD0 يوفر الخرج .
الكلمة الخاصة الشائعة للاختيار فى الكثير من لغات المستوى المرتفع هى "IF" .
البرنامج أدناه به حلقة while  اللا نهائية المعتادة ، لكن البرنامج يحتوى قبلها على عبارة لفصل المنفذ Port D فى الحالة الابتدائية باستخدام دالة الإخراج  output_D(0); .
داخل الحلقة ، يتم قراءة حالة الدخل باستخدام دالة قراءة حالة طرف محدد input(PIN_C0) . وهذه الدالة  تعين قيمة الدخل ، إما بواحد أو بصفر ، إلى المتغير "x" . ثم يتم اختبار هذه القيمة فى عبارة "if" ويتم تحديد الخرج وفقا لذلك .
لاحظ أن الاختبار يستخدم عامل تساوى مزدوج (==) لتمييزه عن عامل التخصيص (=) المستخدم فى عبارة التخصيص السابقة .
تأثير هذا البرنامج هو توصيل (تشغيل) on الخرج إذا كان الدخل فى الحالة المرتفعة high . يحتاج المفتاح أن يكون مغلقا قبل التشغيل لرؤية هذا التأثير . لا يمكن لليد أن يتم فصلها مرة أخرى حتى يتم إعادة بدء البرنامج.  





الكود:

//Lesson1-EX4 Tests an input
#include <16F877A.h>
void main()
{
   int x;                // Declare variable
   output_D(0);             // Clear all outputs

  while(1)                // Loop always
    {
         x = input(PIN_C0);          // Get input state
        if(x == 1)output_high(PIN_D0);    // Change output
   }
}




هذا البرنامج يمكن تبسيطه عن طريق تجميع دالة الدخل مع عبارة الشرط كما يلى :

if(input(PIN_C0))output_high(PIN_D0);


يمكن أيضا اختيار التسلسل المشروط بواسطة عبارة شرط while . فى البرنامج أدناه ، يتم اختبار الدخل فى حلقة عبارة شرط والخرج يومض ، توصيل وفصل ، طالما أن المفتاح يكون مفتوحا ( الدخل مرتفعا) . إذا تم غلق المفتاح ، لا يتم تنفيذ الحلقة ويتوقف وميض الليد .

الكود:


// Lesson1-5 Input switch controls output flashing
#include <16F877A.h>
#use delay (clock = 4000000)       // MCU clock = 4 MHz

void main()
{
   while(true)
     {
        while(input(PIN_C0))          // Repeat while switch open
         {
             output_high(PIN_D0);
            delay_ms(500);          // Delay 0.5s
            output_low(PIN_D0);
           delay_ms(500);          // Delay 0.5s
        }

      output_low(PIN_D0);          // Switch off LED
    }
}


يوضح البرنامج أيضا دالة التأخير delay_ms(500); . إذا غابت هذه الدالة ، فإن الحلقة يتم تنفيذها فى بضعة ميكروثوانى فقط ، لأن كل تعليمة كود الآلة يأخذ واحد ميكروثانية عند معدل ساعة أربعة ميجا هرتز . وبالتالى فإن وميض الخرج سيكون غير مرئى . التأخير المطلوب (بالملى ثانية) يعطى كبارامتر للدالة ، يتم توفير مرجع لمكتبة الدالة عند بداية البرنامج بالتوجيه (#use) . وهذا يسمح للمترجم لإيجاد الروتين delay_ms() . يجب أن تعطى سرعة الساعة للمعالج المستهدف فى التوجيه #use ، بحيث يتم حساب التأخير الصحيح داخل الدالة .

مقارنة بناء الجملة لعبارات الدخل/الخرج :
الدالة output_high(PIN_nn) هى عملية أخراج لتحديد طرف منفذ بالحالة المرتفعة . الدالة input(PIN_nn) هى دالة إدخال والتى تعيد واحد أو صفر من طرف دخل ، والتى يمكن اختبارها بواسطة عبارة IF أو WHILE . يتم تهيئة المنافذ تلقائيا ضمن هذه الدوال .
رابط الملفات :
http://www.mediafire.com/download/gvjcqpgqq2bgsg7/Lesson1-EX4-EX5.zip


Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى