البداية وبرمجة السلسلة PIC16 بلغة السى :

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

البداية وبرمجة السلسلة PIC16 بلغة السى :

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

البداية وبرمجة السلسلة PIC16 بلغة السى :
سوف نتناول برمجة الميكروكونترولر PIC بلغة السى باستخدام أبسط برامج ممكنة ، على افتراض أن القارىء ليس لديه خبرة سابقة فى اللغة . المترجم CCS  يستخدم بناء الجملة والهياكل التى تستخدمها لغة السى القياسية ANSI C . مع ذلك ، فإن مترجم أى ميكروكونترولر معين يستخدم الاختلافات الخاصة به من أجل عمليات محددة للمعالج ، ولا سيما عمليات الإدخال والإخراج .

برنامج بسيط :
البرنامج الأول ، هو برنامج الحد الأدنى والذى ببساطة يعين sets بتات منفذ 8 بت فى الميكروكونترولر PIC16F877A لأى مجموعة (توليفة) مطلوبة .  


الكود:


// Outputs an 8-bit code at Port D in the 16F877 MCU
#include <16F877A.h>       // MCU header file

void main()             // Main block start
{
output_D(255);       // Switch on outputs
}



التعرف على مكونات كود المصدر :
• توجيه التضمين #include تخبر المترجم لدمج ملف يسمى ملف الرأس header file لميكروكونترولر معين . هذا الملف يقدم معلومات عن سمات الهاردوير التى يحتاجها المترجم لتكييف البرنامج .
• الكلمات الخاصة void main تشير إلى بداية كتلة دالة البرنامج الرئيسى ، والأقواس الملحقة بها (الأقواس المعرجة {} )  تطوق (تحصر) عبارات البرنامج .
• هذا البرنامج يحتوى على عبارة واحدة ، وهى دالة الخرج output_D(nnn) والتى ترسل (تمرر) بيانات بايت الوسيط nnn=255 إلى المنفذ Port D . النتيجة تعيين جميع أطراف المنفذ بالحالة المرتفعة .  

تحليل البرنامج :
تتضمن دالة البرنامج الرئيسى main عبارة واحدة فقط وهى output_D(255) . هذه العبارة تعنى إخراج (إرسال) العدد 255 (عشرى) كشفرة ثنائية إلى المنفذ Port D للميكروكونترولر ، لتعيين جميع الأطراف للحالة المرتفعة (من الواضح أن أى عدد بين 0 و 255 ينتج خرج مناظر لمجموعة بتات ) .
جميع العبارات يجب أن تنتهى بالفاصلة المنقوطة (Wink . هذه العبارة هى استدعاء دالة ، وهو ما يعنى أن المترجم يحصل على شفرة الآلة لهذه العملية من المجموعة القياسية للدوال المدمجة المتوفرة بالمترجم . هذه الدالة بشكل خاص هى واحدة من مجموعة دوال المكتبة بالشكل output_x(n) ، حيث x هى رقم المنفذ
(A-E) ، و n هى قيمة المخرجات (0-255) .
الشكل العام لدالة لغة السى يكون function_name() . أى معلومات تحتاجها الدالة (تسمى بارامترات الدالة) , يتم إدراجها بين الأقواس ( ) .  
يبدأ البرنامج الرئيسى بالكلمات الخاصة main() ويتم حصره بين أقواس مجعدة . يتم حصر جميع كتل البرنامج بواسطة الأقواس ، مما يسمح بالبناء الهرمى متعدد المستويات .
الدالة main() هى دالة خاصة والتى تحتوى على كتلة البرنامج الرئيسى ، والتى من خلالها يتم احتواء جميع دوال المستوى الأدنى ، وهذه الدوال يمكنها العودة بنتيجة للدالة التى تقوم بعملية الدعوة ، ولكن الكلمة الخاصة void التى تسبق اسم الدالة main تعنى أن هذه الدالة لا تعود بأى نتيجة ، حيث أنها دالة المستوى الأعلى (القمة) .    
العبارة (#include <16F877A>.h") تسمى توجيه المعالج preprocessor directive وهى ترشد المترجم لضم (إدراج) هذا الملف ( وهو ملف الرأس 16F877A.h) لمعالج محدد (وهو الميكروكونترولر PIC16F877A) فى الجزء العلوى من البرنامج . هذا الملف يحتوى على تسميات وعناوين السجلات للميكروكونترولر المختار ، بحيث يعرف المترجم مكان تخزين متغيرات تحكم الميكروكونترولر .
التعليقات Comments يمكن حصرها بين حروف التحكم وهى الشرطة المائلة والنجمة (/*….*/) أو يمكن أن تأتى بعد الشرطة المائلة المزدوجة (//) ، وفى هذه الحالة يتم إنهاء التعليق مع عودة السطر (نهاية السطر). يجب أن يحتوى رأس (مقدمة) البرنامج على أكبر قدر ممكن من المعلومات (فى شكل تعليقات) لمساعدة المستخدم وتسهيل التعديلات فى المستقبل . من الناحية المثالية ، سطر التعليقات ينبغى أن يصف تأثير العبارة فى النظام المستهدف .
معنى برنامج لغة السى لا يعتمد على تخطيط الصفحة ، فقط تتابع (تسلسل) الأحرف هو المهم للمترجم . ومع ذلك ، من الناحية العملية ، ينبغى ترتيب شفرة (كود) المصدر للبرنامج لجعله أسهل فى الفهم قدر الممكن . المسافات الفارغة spaces أو علامات التبويب (الجدولة) tabs يمكن أن تستخدم لمحاذاة أطراف كل كتلة (تبعا لمستوى البرنامج ) ، وينبغى محاذاة أقواس الفتح وأقواس الغلق فى نفس العامود (الوضع الراسى) بحيث يمكن تطابق أزواج الأقواس عند اختبار البرنامج . هذا يجعل تصحيح وتعديل كود المصدر أسهل . فوائد التخطيط الجيد تصبح أكثر وضوحا لاحقا ، عندما يتم تطوير برامج اكثر تعقيدا .
تقليديا ، يتم كتابة كود مصدر لغة السى بالحروف السفلية ، وتستخدم الحروف العلوية من أجل بعض الكلمات الخاصة .
ملاحظة :
حتى نتمكن من رؤية النتيجة ، ينبغى وضع كتلة الدالة الرئيسية داخل حلقة تكرار لانهائى ، لأن تنفيذ هذه الدالة لن يستغرق إلا بضعة ميكرو ثانية ويتم إنهاء البرنامج ، ومن ثم لن تتمكن من رؤيته .
 


الكود:

//Lesson1-EX1
// Outputs an 8-bit code at Port D in the 16F877 MCU
#include <16F877A.h>       // MCU header file

void main()             // Main block start
{
   While(true)
   {
      output_D(255);       // Switch on outputs
   }
}
 

رابط الملف :
mediafire.com download/gkb4e7v95ade3pp/Lesson1-EX1.zip

Admin
Admin

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

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

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

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

- مواضيع مماثلة

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