منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

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

اذهب الى الأسفل

اتخاذ القرار Decision Making  Empty اتخاذ القرار 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 . يحتاج المفتاح أن يكون مغلقا قبل التشغيل لرؤية هذا التأثير . لا يمكن لليد أن يتم فصلها مرة أخرى حتى يتم إعادة بدء البرنامج.  


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


الكود:

//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

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

https://fathallaabdelaziz.forumarabia.com

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

الرجوع الى أعلى الصفحة


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