قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2013, 11:27 PM المشاركة 1   
افتراضي كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C Twitter FaceBook Google+



كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C





عام :
الميكروكونترولر المدمج هو كومبيوتر دقيق والذى يحتوى على معظم أجهزته المحيطة والذاكرة المطلوبة بداخل دائرة متكاملة واحدة مع وحدة المعالجة المركزية CPU . فهو بالفعل "كومبيوتر دقيق فى شريحة" .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2013, 11:28 PM المشاركة 2   
افتراضي


الفصل الأول :


لغة السى المدمجة Embedded C Language :

1-1 الهدف:




عند نهاية هذا الفصل , يجب أن تكون قادرا على ما يلى :
  • تعريف , ووصف , ووتحديد أنواع المتغير variable والثابت , ومجالها واستخداماتها .
  • بناء إعلانات المتغير والثابت لجميع حجوم البيانات العددية numeric والسلاسل النصية strings.
  • تطبيق قوائم السرد الإحصائية enumeration على إعلانات المتغير .
  • تخصيص assign قيم للمتغيرات والثوابت عن طريق "عامل التخصيص" .
  • تقييم نتائج جميع "العوامل" المستخدمة فى لغة السى .
  • شرح النتائج التى تمتلكها "عبارات التحكم" عند سريان البرنامج .
  • إنشاء "دوال" functions والتى تشتمل على متغيرات , وعوامل , وعبارات تحكم لمهام كاملة .
  • تطبيق "المؤشرات" pointers , و"المصفوفات" arrays و "الهياكل" structures و "الاتحادات" unions كمتغيرات للدالة .
  • إنشاء برامج بلغة السى لمهام كاملة باستخدام مفاهيم هذا الفصل .
1-2 مقدمة :

هذا الفصل يغطى الدورة الأساسية فى البرمجة بلفة السى عند تطبيقها على تطبيقات الميكروكونترولر المدمج. سوف تتقدم من المفاهيم الأولية وحتى كتابة البرامج الكاملة , مع أمثلة يمكن تنفيذها على الميكروكونترولر .




يتم تقديم المعلومات بالترتيب الذى يحتاجه المبرمج :
  • إعلان declaring المتغيرات والثوابت .
  • المداخل / المخارج I/O البسيطة , بحيث يمكن عمل برامج للمنافذ المتوازية للميكروكونترولر .
  • تخصيص قيم إلى المتغيرات والثوابت وعمل عمليات حسابية مع المتغيرات .
  • عبارات البناء والتحكم بلغة السى لتشكيل برامج كاملة بلغة السى .
الأقسام الأخيرة تغطى المواضيع المتقدمة مثل المؤشرات , والمصفوفات , والهياكل , والاتحادات , واستخدامها فى برامج لغة السى . المفاهيم المتقدمة مثل برمجة "الزمن – الحقيقى" real time والمقاطعات تكمل الفصل .

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2013, 11:29 PM المشاركة 3   
افتراضي


1-3 المفاهيم الأساسية :
كتابة برنامج بلغة السى يشبه بناء منزل من الطوب البلوك : يتم وضع الأساس , يستخدم الرمل والأسمنت لعمل الطوب , يتم ترتيب هذا الطوب لعمل صف ( مدماك – طبقة) من البلوكات ثم يتم تكديس الصفوف لإنشاء البناء . فى برامج السى المدمجة , يتم وضع مجموعات من التعليمات معا لتشكيل "دوال" functions , يتم معاملة تلك الدوال كعمليات " مستوى – مرتفع " , والتى بعد ذلك يتم تجميعها لتشكيل البرنامج .
كل برنامج بلغة السى يجب أن يمتلك دالة واحدة على الأقل , هذه الدالة تسمى "الدالة الرئيسية" main() .
الدالة main() هى "الأساس" لبرنامج لغة السى , وهى نقطة البداية عند تنفيذ كود البرنامج . جميع الدوالت يتم إطلاقها عن طريق الدالة الرئيسية main() سواء مباشرة أو غير مباشرة . على الرغم من أن الدوال يمكن أن تكون كاملة وخاصة بذاتها , إلا أن المتغيرات والبارامترات يمكن أن تستخدم لريط تلك الدوال مع بعضعا البعض .
الدالة الرئيسية main() تعتبر مهمة "المستوى – المنخفض" , لأنها الدالة الأولى التى تستدعى من نظام بدء البرنامج . فى الكثير من الحالات , سوف تحتوى الدالة الرئيسية main() على قليل من العبارات فقط والتى لا تعمل شىء سوى أعداد وقيادة عمل البرنامج من أحد الدوال إلى الأخرى .
برنامج لغة السى المدمجة فى أبسط شكل له يبدو كما يلى :

كود:
void main( ) { While(1) //do forever…. ; }
البرنامج الموضع بأعلاه سوف يتم ترجمته ويعمل على نحو تام , ولكنك لن تتأكد من ذلك لعدم وجود بيان لنشاط من أى نوع .

كود:
#include <stdio.h> void main( 0 { printf("HELLO WORLD"); /* the classic C test program.. */ while(1) //do forever.. ; }

هذا البرنامج سوف يطبع الكلمات "HELLO WORLD" إلى الخرج القياسى , وهو فى الغالب المنفذ التسلسلى . الميكروكونترولر سوف يجلس وينتظر إلى الأبد أو حتى يتم إعادتة reset . وهذا يعرض واحد من أهم الاختلافات الرئيسية بين برنامج الكومبيوتر الشخصى والبرنامج المصمم للميكروكونترولر المدمج , وهو , أن تطبيقات الميكروكونترولر المدمج تحتوى على حلقة لا نهائية .الكومبيوتر الشخصى يمتلك نظام تشغيل , ونجرد تنفيذ البرنامج , يعود التحكم إلى نظام التشغيل . الميكروكونترولر المدمج لا يمتلك نظام تشغيل لذلك لا يمكن السماح بالخروج من البرنامج فى أى وقت . لذلك فإن كل تطبيق للميكروكونترولر المدمج يمتلك حلقة لا نهائية فى بنائه الداخلى فى مكان ما , مثل while(1) فى المثال أعلاه . هذا يمنع البرنامج من الهروب من الأشياء التى يقوم بفعلها ويفعل أشياء عشوائية والتى قد تكون غير مرغوب فيها . سوف يت شرح بناء while فيما بعد .
يحتوى برنامج المثال أيضا على أول "موجه" شائع الاستخدام للمترجم . الموجه #include يخبر المترجم بضم ملف يسمى stdio.h ليكون كجزء من هذا البرنامج .
الدالة printf() متوفرة من أجل المكتبة الخارجية وتكون متاحة لنا لأن تعريفها يقع بالملف stdio .



هناك بعض العناصر التى يجب تعريفها فى المثال السابق :
  • ; فاصلة بنقطة تستخدم لبيان نهاية التعبير . التعبير فى أبسط أشكاله هو فاصلة بنقطة منفردة .
  • { } تستخم هذه الأقواس لاحتواء (تطويق) بداية ونهاية محتويات الدالة . تستخدم هذه الأقواس أيضا عندما يتم معالجة سلسلة من العبارات كمجموعة (بلوك) واحدة .
  • "text" تستخدم علامات الاقتباس المزدوجة كعلامة على بداية ونهاية سلسلة نصية .
  • // أو /*….*/ تستخدم شرطة – شرطة أو شرطة – نجمة ... نجمة – شرطة للتعليقات . التعليقات هى مجرد ملاحظات المبرمج . التعليقات مهمة للغاية للقدرة على قراءة وفهم البرنامج . هذه حقيقة سواء عند قراءة البرنامج بالمبرمج نفسه فى وقت لاحق أو بشخص آخر . التعليقات المبينة بهذا النص تستخدم لشرح وظيفة كل سطر فى البرنامج .
يستخدم الرمز /*….*/ لإنشاء مجموعة (بلوك) تعليقات . بمجرد أن يجد المترجم (/*) فسوف يتجاهل النص الذى يليه , حتى إذا كانت مجموعة التعليقات فى سطور عديدة , حتى يجد (*/) .

عندما يجد المترجم الرمز (//) فسوف يتجاهل نص التعليق حتى يصل نهاية السطر فقط .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2013, 11:30 PM المشاركة 4   
افتراضي


بعض التعاريف :
  • "معرف أو محدد الهوية" identifier : هو اسم لمتغير أولدالة يتكون من حرف أو الشرطة التحتية ( _ ) , متبوعا بتسلسل من الحروف و /أو الأرقام و / أو الشرط التحتية .
  • معرفات الهوية عامة تكون حساسة للحالة . يستخدم الموجه #case للتحكم فى حساسية الحالة فى المترجم CCS-PICC .
  • يمكن أن تكون معرفات الهوية بأى طول , لكن بعض المترجمات قد يتعرف على عدد محدود من الحروف .
  • الكلمات المحجوزة : يوجد كلمات معينة لها معنى خاص للمترجم وتعتبر "كلمات محجوزة" . هذه الكلمات المحجوزة يجب إدخالها فى الحالة الصغيرة ويجب عدم استخدامها بتاتا كمعرفات للهوية . الجدول التالى يبين قائمة بالكلمات المحجوزة .
  • المسافة البيضاء : لأن لغة السى لغة " حرة الشكل" فإن "المسافة البيضاء spaceيتم تجاهلها ما لم يتم تطويقها بأقواس . وهذ يشمل الفراغات , والتبويبات tab والسطر الجديد .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2013, 11:31 PM المشاركة 5   
افتراضي


1-4 المتغيرات والثوابت :
حان وقت البحث فى البيانات المخزنة فى شكل متغيرات وثوابت . المتغيرات variables , كما فى الجبر, هى "قيم يمكن أن تتغير" . الثوابت constants ثابتة القيمة . تأتى المتغيرات والثوابت فى أشكال وأحجام كثيرة , ويتم تخزينها قى ذاكرة البرنامج فى أشكال مختلفة والتى سوف نتعرف عليها تباعا .
1-4-1 أنواع المتغير variable types :
يتم إعلات (تعريف) المتغير عن طريق "الكلمة المحجوزة الدالة على نوعه وحجمه" يتبعها معرف الهوية (الاسم) :

كود:
unsigned char Peabody; int dogs , cats ; long int total_dogs_and_cats ;
يتم تخزين المتغيرات والثوابت فى الذاكرة المحدودة للميكروكونترولر , ويحتاج المترجم معرفة مقدار الذاكرة التى يحددها لكل متغير دون استهلاك حيز الذاكرة دون داع . وبالتالى يجب على المبرمج إعلان المتغيرات , وتحديد كل من حجم المتغير ونوع المتغير . من المهم فهم حجم كل نوع من البيانات للمترجم الذى تستخدمه لأنه ليست كل المترجمات سواء . الخطأ الرياضى سوف يقل لأدنى حد طالما أنك تفهم حجم وإشارة الذى تعلن عنه . الجدول التالى يبين قائمة بأنواع المتغير القياسية وحجمها المناظر .




الأنواع الافتراضية من أجل المترجم CCS-PICC للأحجام المعطاة , مدونة بالعامود "Size" بالجدول . الأنواع int1,int8,int16,int32 مخصصة للمترجم CCS-PICC .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2013, 11:32 PM المشاركة 6   
افتراضي


1-4-2 مجال المتغير :
لعلك لاحظت أنه يجب إعلان الثوابت والمتغيرات قبل استخدامها . "مجال" المتغير هو مدى القدرة على الوصول إليه داخل البرنامج . يمكن إعلان المتغير بحيث يكون مجاله إما "محلى" local أو "عمومى" global .
المتغيرات المحلية Local Variables :
المتغيرات المحلية هى مواقع بالذاكرة مخصصة عن طريق "دالة" . هذه المتغيرات لا يمكن الوصول إليها من أى دالة أخرى , بمعنى أن مجالها محدد بالدوال التى أعلنتها . يمكن استخدام إعلان متغير محلى فى دوال عديدة بدون تعارض لأن المترجم يرى كل من هذه المتغيرات كما لو كانت جزء من من هذه الدالة فقط .

المتغيرات العمومية Global Variables :
المتغير العمومى أو الخارجى هو موقع بالذاكرة مخصص عن طريق المترجم ويمكن الوصول إليه عن طريق جميع دوال البرنامج ( مجال غير محدود) . يمكن تعديل المتغير العمومى عن طريق أى دالة وسوف يحتفظ بقيمته لكى يستخدمها عن طريق الدوال الأخرى . عادة يتم مسح ( تحديدها بصفر) المتغيرات العمومية عند بدء الدالة الرئيسية main( ) . هذه العملية غالبا يتم تنفيذها عن طريق كود البداية المتولد بواسطة المترجم ولا يراه المبرمج .
قطعة الكود التالية تبين مجال المتغيرات :

كود:
unsigned char globey ; // a global variable void function_z (void) //this is a function called from main( ) { unsigned int tween; //a local variable tween = 12 ; //OK because tween is local globey = 47 ; // OK because globey is global main_loc =12 ; //.This line will generate an error //because main_loc is local to main }
void main( ) { unsigned char main_loc; // a variable local to main( ) globey = 34 ; // OK because globey is global tween = 12 ; // will cause an error – tween is locat to function function_z while(1)//do forever.. { ; } }

عندما يتم استخدام متغيرات داخل دالة , إذا كان متغير محلى يمتلك نفس اسم المتغير العمومى , فإن المتغير المحلى سوف يستخدم عن طريق الدالة . قيمة المتغير العمومى , فى هذه الحالة , سوف لا يسمح بالوصول إليها من الدالة وسوف تظل على ما هى عليه ولن تمس .

1-4-3 الثوابت Constants :


الصورة الرمزية ميكرومان
ميكرومان
:: عضو فضي ::
تاريخ التسجيل: Oct 2012
المشاركات: 373
نشاط [ ميكرومان ]
قوة السمعة:69
قديم 16-02-2013, 11:41 PM المشاركة 7   
افتراضي


اللهم اكثر من امثالك اخي


الصورة الرمزية Semmoor
Semmoor
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
المشاركات: 300
نشاط [ Semmoor ]
قوة السمعة:0
قديم 17-02-2013, 01:56 AM المشاركة 8   
افتراضي


جميل جدا وفقك الله

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 09:25 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025