اتخاذ القرار Decision Making
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
اتخاذ القرار Decision Making
اتخاذ القرار Decision Making
أبسط طريقة لتوضيح مبدأ اتخاذ القرار هى تغيير الخرج اعتمادا على حالة الدخل ، الدائرة الكهربية أدناه تبين ذلك ، حيث يولد المفتاح دخل على الطرف RC0 ، بينما الطرف RD0 يوفر الخرج .
الكلمة الخاصة الشائعة للاختيار فى الكثير من لغات المستوى المرتفع هى "IF" .
البرنامج أدناه به حلقة while اللا نهائية المعتادة ، لكن البرنامج يحتوى قبلها على عبارة لفصل المنفذ Port D فى الحالة الابتدائية باستخدام دالة الإخراج output_D(0); .
داخل الحلقة ، يتم قراءة حالة الدخل باستخدام دالة قراءة حالة طرف محدد input(PIN_C0) . وهذه الدالة تعين قيمة الدخل ، إما بواحد أو بصفر ، إلى المتغير "x" . ثم يتم اختبار هذه القيمة فى عبارة "if" ويتم تحديد الخرج وفقا لذلك .
لاحظ أن الاختبار يستخدم عامل تساوى مزدوج (==) لتمييزه عن عامل التخصيص (=) المستخدم فى عبارة التخصيص السابقة .
تأثير هذا البرنامج هو توصيل (تشغيل) on الخرج إذا كان الدخل فى الحالة المرتفعة high . يحتاج المفتاح أن يكون مغلقا قبل التشغيل لرؤية هذا التأثير . لا يمكن لليد أن يتم فصلها مرة أخرى حتى يتم إعادة بدء البرنامج.
هذا البرنامج يمكن تبسيطه عن طريق تجميع دالة الدخل مع عبارة الشرط كما يلى :
if(input(PIN_C0))output_high(PIN_D0);
يمكن أيضا اختيار التسلسل المشروط بواسطة عبارة شرط while . فى البرنامج أدناه ، يتم اختبار الدخل فى حلقة عبارة شرط والخرج يومض ، توصيل وفصل ، طالما أن المفتاح يكون مفتوحا ( الدخل مرتفعا) . إذا تم غلق المفتاح ، لا يتم تنفيذ الحلقة ويتوقف وميض الليد .
يوضح البرنامج أيضا دالة التأخير 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
أبسط طريقة لتوضيح مبدأ اتخاذ القرار هى تغيير الخرج اعتمادا على حالة الدخل ، الدائرة الكهربية أدناه تبين ذلك ، حيث يولد المفتاح دخل على الطرف 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
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى