ترجمة وإعداد كتاب البرمجة بلغة السى المدمجة وتطبيقات لغة السى والميكروكونترولر PIC مع المترجم CCS C : Embedded C Programming Techniques and Applications of C and PIC® MCUS
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
ترجمة وإعداد كتاب البرمجة بلغة السى المدمجة وتطبيقات لغة السى والميكروكونترولر PIC مع المترجم CCS C : Embedded C Programming Techniques and Applications of C and PIC® MCUS
ترجمة وإعداد كتاب البرمجة بلغة السى المدمجة وتطبيقات لغة السى والميكروكونترولر PIC مع المترجم CCS C :
Embedded C Programming Techniques and Applications of C and PIC® MCUS
مقدمة Introduction :
ماهو الميكروكونترولر ؟ وفيما يستخدم ؟
الميكروكونترولر هو كمبيوتر صغير مدمج على شريحة مغلفة على شكل دائرة متكاملة لها أطراف للتوصيل بالأجهزة الخارجية . عندما يتم توصيله بالقدرة فإنه يبدأ فى تشغيل برنامج من ذاكرة البرنامج الداخلية ، والتى تسمى أيضا ذاكرة القراءة فقط ROM ، أو ذاكرة الفلاش Flash .
يوجد الميكروكونترولر فى الأجهزة المنزلية ، ولعب الأطفال ، والسيارات ، وملحقات الكمبيوتر مثل لوحة المفاتيح أو الماوس ، كما أنه يأخذ طريقه كإلكترونيات تدعم تقريبا كل شىء إلكترونى من شاحن البطارية إلى أنظمة الرادار .
لماذا الميكروكونترولر PIC ؟
أصبح الميكروكونترولر PIC الخيار الأكثر شعبية (انتشارا) للتصاميم الجديدة المعتمدة على السرعة العالية ، حتى 70 مليون تعليمة كل ثانية ، حتى كتابة هذه السطور ، فهو منخفض التكلفة ، البعض منه يصل إلى ما دون الدولار ، كما أنه يتضمن عدد كبير من الواجهات مثل اليو إس بى USB و الإثرنت Ethernet ، والإشارات التناظرية .
لماذا لغة السى ؟
لغة السى هى اللغة الأكثر استخدما لبرمجة الميكروكونترولر ، السبب أنها الأقرب إلى لغة الإنسان ، فلغة السى هى فئة من لغات برمجة الكمبيوتر والتى تسمى لغات البرمجة مرتفعة المستوى. هذه اللغات تستخدم أداة تسمى مترجم (كومبيلر) compiler لتحويل ملفات نصوص لغة السى إلى ملف قابل للقراءة بمعرفة الآلة ، وهى هنا معالج الميكروكونترولر . والمترجم CCS C يستخدم لغة هى الأقرب إلى لغة الإنسان ، لذلك فهو واسع الانتشار ، ومدعوم من قبل شركة ميكروشيب المصنعة للميكروكونترولر PIC ، ومن قبل شركة لاب سنتر المصدرة لبرنامج بروتيس Proteus .
القسم الأول من هذا الكتاب يؤكد على لغة السى . الخبرة السابقة بلغة برمجة سوف يساعد ولكنها ليست مطلبا ، فسوف يتم البدء باستخدام التعاريف الأولية لعناصر اللغة ، كما يتم تغطية جميع مجالات اللغة التى تطبق على الميكروكونترولر بالتفصيل .
القسم الثانى من هذا الكتاب ، بدءا من الفصل الخامس عشر ، يغطى الميكروكونترولر PIC ، وملحقاته ، وكيفية استخدام تلك الملحقات مع لغة السى بالتفصيل . المعرفة المسبقة للإلكترونيات الأساسية سوف تساعد ، لكنها ليست مطلبا لفهم هذا الكتاب .
الفصل الأول نظرة عامة على لغة السى وبناء (هيكل) البرنامج C Overview and Program Structure:
Embedded C Programming Techniques and Applications of C and PIC® MCUS
مقدمة Introduction :
ماهو الميكروكونترولر ؟ وفيما يستخدم ؟
الميكروكونترولر هو كمبيوتر صغير مدمج على شريحة مغلفة على شكل دائرة متكاملة لها أطراف للتوصيل بالأجهزة الخارجية . عندما يتم توصيله بالقدرة فإنه يبدأ فى تشغيل برنامج من ذاكرة البرنامج الداخلية ، والتى تسمى أيضا ذاكرة القراءة فقط ROM ، أو ذاكرة الفلاش Flash .
يوجد الميكروكونترولر فى الأجهزة المنزلية ، ولعب الأطفال ، والسيارات ، وملحقات الكمبيوتر مثل لوحة المفاتيح أو الماوس ، كما أنه يأخذ طريقه كإلكترونيات تدعم تقريبا كل شىء إلكترونى من شاحن البطارية إلى أنظمة الرادار .
لماذا الميكروكونترولر PIC ؟
أصبح الميكروكونترولر PIC الخيار الأكثر شعبية (انتشارا) للتصاميم الجديدة المعتمدة على السرعة العالية ، حتى 70 مليون تعليمة كل ثانية ، حتى كتابة هذه السطور ، فهو منخفض التكلفة ، البعض منه يصل إلى ما دون الدولار ، كما أنه يتضمن عدد كبير من الواجهات مثل اليو إس بى USB و الإثرنت Ethernet ، والإشارات التناظرية .
لماذا لغة السى ؟
لغة السى هى اللغة الأكثر استخدما لبرمجة الميكروكونترولر ، السبب أنها الأقرب إلى لغة الإنسان ، فلغة السى هى فئة من لغات برمجة الكمبيوتر والتى تسمى لغات البرمجة مرتفعة المستوى. هذه اللغات تستخدم أداة تسمى مترجم (كومبيلر) compiler لتحويل ملفات نصوص لغة السى إلى ملف قابل للقراءة بمعرفة الآلة ، وهى هنا معالج الميكروكونترولر . والمترجم CCS C يستخدم لغة هى الأقرب إلى لغة الإنسان ، لذلك فهو واسع الانتشار ، ومدعوم من قبل شركة ميكروشيب المصنعة للميكروكونترولر PIC ، ومن قبل شركة لاب سنتر المصدرة لبرنامج بروتيس Proteus .
القسم الأول من هذا الكتاب يؤكد على لغة السى . الخبرة السابقة بلغة برمجة سوف يساعد ولكنها ليست مطلبا ، فسوف يتم البدء باستخدام التعاريف الأولية لعناصر اللغة ، كما يتم تغطية جميع مجالات اللغة التى تطبق على الميكروكونترولر بالتفصيل .
القسم الثانى من هذا الكتاب ، بدءا من الفصل الخامس عشر ، يغطى الميكروكونترولر PIC ، وملحقاته ، وكيفية استخدام تلك الملحقات مع لغة السى بالتفصيل . المعرفة المسبقة للإلكترونيات الأساسية سوف تساعد ، لكنها ليست مطلبا لفهم هذا الكتاب .
الفصل الأول نظرة عامة على لغة السى وبناء (هيكل) البرنامج C Overview and Program Structure:
الفصل الأول نظرة عامة على لغة السى وبناء (هيكل) البرنامج C Overview and Program Structure:
الفصل الأول نظرة عامة على لغة السى وبناء (هيكل) البرنامج C Overview and Program Structure:
"كود المصدر" للغة السى C Source Code :
فيما يلى ما يبدو عليه "كود المصدر" للغة السى :
هذا البرنامج قد يبدو مبهما جدا بالنسبة لك الآن . عند الانتهاء من قراءة هذا الكتاب والقيام بعمل التجارب ، فإن هذا البرنامج بل والبرامج الأكثر تعقيدا سوف لن تبدو مبهمة على الإطلاق . كلما قرأت الفصول القليلة القادمة ، يمكنك الرجوع إلى هذا البرنامج للتعرف على كيفية ربط الموضوعات لهذا البرنامج . الآن ، دعونا نرصد بعض الملاحظات حول المظهر العام للبرنامج .
التعليقات Comments :
تساعد التعليقات أى شخص (بما فيهم المبرمج نفسه) يقراء الكود الخاص بك على أن يفهم ما يقوم به البرنامج . هناك نوعان من أساليب التعليق :
الإسلوب الأول : “/* put your comments here */” ، يمكن أن تمتد التعليقات لعدة أسطر ، لكنها لا تكون متداخلة.
الإسلوب الثانى : “//put your comments here…… end of line” ، يمكن أن يمتد التعليق على سطر واحد فقط .
يتجاهل المترجم جميع التعليقات . يمكن أن يتم استخدم كل من الإسلوبين فى نفس البرنامج .
بناء (هيكل) البرنامج Program Structure :
تتكون برامج لغة السى من :
1- توجيهات ما قبل معالج لغة السى C Preprocessor Directives
الميزة الجديرة بالاهتمام فى لغة السى هى أن لديها ما يسمى توجيهات "قبل المعالج" preprocessor ويمكن تسميتها اختصارا توجيهات المعالج ، وهى جزء لا يتجزأ من برنامج الترجمة . يمكنك التفكير فى توجيهات المعالج باعتبارها أداة برمجية ، والتى تمر خلال الكود أولا (قبل الترجمة) وتقوم بعمل بعض التعديلات على ما يتم ترجمته فى الواقع .
يبدأ توجيه المعالج بالرمز "هاش" “#” ويحتل السطر بكامله . وسوف يتم تغطيتها لاحقا بالتفصيل فى الفصل الثالث .
فى المثال أعلاه ، يبدأ البرنامج بتوجيه التضمين (#include) ، وهو أمر (توجيه) للمعالج بالقيام بوضع (تضمين) جميع السطور التى يحتوى عليها الملف (e3.h) لكى تظهر فى هذا المكان ضمن الكود عند بدء الترجمة الفعلية .
على سبيل المثال ، إذا قمت بإنشاء ملف يسمة delay.inc ووضعت فى هذا الملف السطر الوحيد التالى :
عندئذ يمكنك استبدال سطرى التأخير delay_ms(500); فى البرنامج أعلاه بالتوجيه #include <delay.inc> ، وسوف يقوم البرنامج بالترجمة الصحيحة تماما . ففى الخطوة الأولى للترجمة ، يقوم معالج المترجم بقراءة البرنامج وعندما يصل إلى كل سطر مكتوب فيه التوجيه #include<delay.inc> يقوم بقراءة الملف المذكور وهو delay.inc واستبدال #include بالعبارة delay_ms(500); ، وهى السطر الوحيد داخل الملف ، حيث مكان التوجيه #include تماما .
يمكن أن يكون المعالج ميزة قوية فى لغة السى والتى تزيد من قابلية (سهولة) القراءة للبرنامج ، وتعظيم تقنية إعادة استخدام الكود ، وتساعد بشكل كبير على المحافظة على البرنامج .
إذا تفحصت نموذج البرنامج المبين أعلاه ، سوف ترى أن السطر الأول هو توجيه للمعالج لتضمين الملف My_PIC.H. من الشائع جدا (بل قد يجب) أن يكون أول سطر أوامر (وليس تعليقات) فى البرنامج هو توجيه بتضمين ملف به تعريفات محددة للهاردوير الخاص بالميكروكونترولر المستخدم . كثيرا ما يستخدم الامتداد (.h) (اختصار لكلمة header) لهذا النوع من الملفات . فى حالتنا ، جميع الإعلانات (التعريفات) اللازمة للميكروكونترولر المستخدم سوف تكون موجودة فى ملف الرأس المسمى My_PIC.H .
2- الدوال Functions:
الدالة هى مجموعة من التعليمات البرمجية القابلة للاستدعاء ، والتى تعرف فى بعض اللغات الأخرى بالاجراء أو بالبرنامج الفرعى . تتكون الدوال من بيانات محلية ، بمعنى أنه يمكن الوصول إليها فقط للدالة وللعبارات الموجودة ضمن هذه الدالة .
فى البرنامج أعلاه ، نجد أن السطر التالى يحتوى على تعريف لدالة تسمى الدالة الرئيسية main . جميع البرامج يجب أن يكون لديها دالة واحدة فقط تسمى الدالة الرئيسية main() . هذه الدالة هى المكان الذى يبدأ من عنده تنفيذ البرنامج . عند الإشارة إلى اسم دالة ، فإنه يكون متبوعا بالقوسين () ، حتى يكون من الواضح أن هذا اسم لدالة .
كلمة void (بمعنى فارغ أو خاوى) ، الموجودة قبل اسم الدالة تشير إلى أن هذه الدالة لا تعيد (تعطى) شىء نتيجة لتنفيذها ، وكلمة void الموجودة بين القوسين (void) تشير إلى أن هذه الدالة لا تأخذ شىء من القائم بالاستدعاء . القوسين {…} هى رموز لاحتواء مجموعة بينها . جميع الدوال تبدأ وتنتهى بهذه الرموز .
سوف يتم تناول الدوال بالتفصيل فى الفصل السابع ، ومع ذلك ، لوضع أساس لما تكون عليه الدوال ، إليك بعض الأمثلة على استخدام الدوال :
الدالة المسماة sin هى دالة بدليل أو وسيط أو بارامتر واحد ، وتعود بقيمة نتيجة لتنفيذها .
الوسيط قد يكون تعبير .
يمكن استخدام قيمة العودة فى تعبير.
3- الإعلانات Declarations :
السطر “int i" هى إعلان (تعريف) بيانات لمتغير يسمى بالمعرف “i" ، و “int” تشير إلى أن هذا المتغير هو عدد صحيح integer . فى هذه الحالة فإن المتغير “i" لا يجوز استخدامه إلا داخل الدالة الرئيسية main . إذا كان هذا السطر فوق (قبل) بداية الدالة الرئيسية (خارج الدالة الرئيسية) ، عندئذ ، يمكن الوصول إلى المتغير “i" بواسطة الدوال الأخرى . النطاق الذى يمكن الوصول خلاله إلى المتغير يسمى "نطاق المتغير" variable scope . سوف يتم تغطية النطاق بمزيد من التفصيل فى الفصل الرابع .
4- العبارات Statements والتعبيرات Expressions :
سطر “for” هو عبارة statement . يتم تنفيذ العبارات فى وقت الشغيل . هذه العبارة بشكل خاص تتضمن ثلاث تعبيرات expressions هى i=1; i<=10; i=i+1 يفصل بين التعبير والآخر الفاصلة المنقوطة “;” . سوف يتم تغطية التعبيلاات فى الفصل الخامس ، وتغطية العبارات فى الفصل السادس .
لمحة سريعة على عبارة “for” :
يتم تنفيذ التعبير الأول “i=1” لمرة واحدة . بعد ذلك يتم تكرار ما يلى :
• اختبار التعبير الثانى “i<=10” ، والخروج من الحلقة فى حالة ما إذا لم يكون صواب false .
• تنفيذ العبارة التى تلى القوس “)” .
• يتم تنفيذ التعبير الثالث “i=i+1” .
فى هذا المثال يتم تنفيذ الأربعة أسطر لعشر مرات ، حيث يذهب المتغير “i" من القيم 1 إلى القيمة 10 ، وبعد ذلك ، عندما تكون قيمته 11 ، تتوقف الحلقة لأن التعبير “11<=10” يكون غير صواب .
التعبيرات expressions هى مزيج من الثوابت ، والمتغيرات ، والعوامل ، واستدعاء الدوال . التعبيرات دائما يكون لها قيمة ناتج . من أمثلة العوامل “+ , - , * , / “ والعمل الخاص جدا “=” .
فى حالتنا ، حيث أن لدينا أربعة عبارات للتنفيذ فى عبارة “for” فإننا نحتاج لضمها (تجميعها) معا بالأقواس المعرجة {…} . هذه العبارة تسمى عبارة مركبة . وقد لا تحتوى الأقواس على أى عبارات أو قد تحتوى على المزيد من العبارات . بدون هذه الأقواس ، سوف يتم استدعاء الدالة output_high() فقط لعشر مرات . بعد ذلك يتم تنفيذ السطور الثلاثة الأخرى واحد تلو الآخر .
كل من السطور الأربعة فى الحلقة هو استدعاء لدالة . هذه الدوال لم يتم تعريفها عن طريق المبرمج لكنها دوال من صلب المترجم . التعبير أو التعبيرات الموجودة داخل الأقواس () للدالة المستدعاة هى بيانات يتم تمريرها إلى الدالة . هذه البيانات تسمى وسائط arguments فى الاستدعاء وتسمى بارامترات parameters فى الدالة .
فى لغة السى ، الحالة الخاصة للعبارة الصحيحة (شرط صحة العبارة) هى أن أى تعبير يكون متبوعا بالفاصلة المنقوطة “;” . لاحظ أنه ليس لمجرد أن تكون العبارة صحيحة أن يعنى ذلك أنها منطقية . على سبيل المثال ، فيما يلى عبارة لغة سى صحيحة :
كتابة الفاصلة المنقوطة “;” مع عدم وجود تعبير قبلها ، هو حالة خاصة لاستدعاء عبارة فارغة تسمى null statement ، وهى لا تفعل شىء .
فى لغة السى ليس هناك عبارة تعيين (تخصيص) كما هو الحال فى بعض اللغات الأخرى ، بدلا من ذلك هناك "عامل التعيين" وهو علامة التساوى “=” ، على سبيل المثال :
هذا السطر عبارة عن التعبير “x=3” والذى يتكون من متغير ، وعامل ، وثابت . هذا التعبير expression مع الفاصلة المنقوطة “;” يصنع عبارة statement . دائما يتم تعيين (تخصيص) القيمة الموجودة على الجانب الأيمن إلى المتغير الموجود على الجانب الأيسر .
5- الزمن (الوقت) Time :
الحروف “ms” فى كلمة delay_ms تعنى ملى ثانية . وحدات الزمن التى يكثر استخدامها فى البرامج هى :
• النانو ثانية 0.000,000,001 seconds .
• الميكروثانية 0.000,001 seconds .
• الملى ثانية 0.001 seconds .
على سبيل المثال ، هناك مليون ميكروثانية فى الثانية الواحدة .
6- دقة الكتابة Typing Accuracy :
دقة الكتابة تكون مهمة جدا عند إنشاء كود لغة السى . علامات الترقيم ، والتى إما أن تكتب بشكل خاطىء أو يتم حذفها ، يمكن أن تتسبب فى الكثير من الصداع بسبب عدم ترجمة البرنامج . المترجم يرى ما تكتبه بالضبط .
على سبيل المثال ، إذا نسيت قوس البداية “{“ فى سطرة عبارة for ، عندئذ فإن المترجم سوف يطلق رسالة بوجود خطأ عندما يصل إلى قوس النهاية “}” بعد أربع أسطر أسفل من مكان الخطأ الفعلى .
الفاصلة المنقوطة “;” التى تلى العديد من العبارات والإعلانات تكون مهمة لمساعدة المترجم لمعرفة متى ينتهى الإعلان أو العبارة . فهى لا تستخدم أبدا عند نهاية توجيه المعالج الذى يبدأ بالرمز “#” . فقد أو زيادة الفاصلة المنقوطة “;” أو القوس “{“ يمكن أن ينشىء رسائل خطأ مربكة . محرر لغة السى الجيد يسلط الضوء على مجموعة الأقواس المتوائمة
“{ }” و “()” علاوة على على العناصر النحوية لمنع الأخطاء أثناء الكتابة ، وذلك بتمييزها بألوان مختلفة .
7- تنسيق النص Text Formatting :
تنسيق المسافات الفارغة (البيضاء) مثل المسافات spaces و التبويبات tabs و مكان الرجوع من أول السطر ، وغيرها يتم تجاهله من قبل المترجم .
التنسيق يجعل الكود قابل للقراءة . المسافة البيضاء ،الناتجة من تخطيط البرنامج بحيث يبدو أكثر تنظيما ، تعتبر شىء جيد . وهى تأتى من استخدام المسافات والتبويبات والأسطر الفارغة . تستخدم التبويبات من أجل عمل تدرجات بدلا من استخدام عدد من المسافات . عدد المسافات لكل تبويب عادة يكون قابل للضبط . ثلاثة مسافات لكل تبويب تعمل بشكل جيد . لاحظ أن الأسطر الموجودة داخل الدالة إعلاه تكون متدرجة والخطوط داخل الحلقة تكون أكثر تدرجا . التدرج ، والمسافات البيضاء الأخرى اختيارية ، ولكن ينصح بها بشدة .
8- ملاحظات التوافق Compatibility Notes :
التعليق “//” هو بناء للغة C++ ، ومعتمد فقط من قبل بعض برامج الترجمة وليس كلها .
معظم برامج الترجمة تكون حساسة لحالة الحروف . على سبيل المثال ، Output_High() لن يتم التعرف عليها ولكن output_high() سوف يتم التعرف عليها . فى الوضع الافتراضى المترجم CCS C يكون غير حساس لحالة الحروف . لجعله حساسا ، يجب عليك استخدام توجيه المعالج “#case” .
الدوال الموجودة ضمن المترجم مثل output_high() و delay_ms() ليست من لفة السى القياسية ، حيث ينفرد بها المترجم CCS C .
"كود المصدر" للغة السى C Source Code :
فيما يلى ما يبدو عليه "كود المصدر" للغة السى :
- الكود:
/* Chapter one sample C program for
The CCS C compiler */
#include <My_PIC.H>
void main (void) {
int i ;
for( i=1; i<=10; i=i+1 ) {
output_high(PIN_C6); //Turn green LED on .
delay_ms(500);
output_low(PIN_C6); //Turn green LED off .
delay_ms(500);
}
}
هذا البرنامج قد يبدو مبهما جدا بالنسبة لك الآن . عند الانتهاء من قراءة هذا الكتاب والقيام بعمل التجارب ، فإن هذا البرنامج بل والبرامج الأكثر تعقيدا سوف لن تبدو مبهمة على الإطلاق . كلما قرأت الفصول القليلة القادمة ، يمكنك الرجوع إلى هذا البرنامج للتعرف على كيفية ربط الموضوعات لهذا البرنامج . الآن ، دعونا نرصد بعض الملاحظات حول المظهر العام للبرنامج .
التعليقات Comments :
تساعد التعليقات أى شخص (بما فيهم المبرمج نفسه) يقراء الكود الخاص بك على أن يفهم ما يقوم به البرنامج . هناك نوعان من أساليب التعليق :
الإسلوب الأول : “/* put your comments here */” ، يمكن أن تمتد التعليقات لعدة أسطر ، لكنها لا تكون متداخلة.
الإسلوب الثانى : “//put your comments here…… end of line” ، يمكن أن يمتد التعليق على سطر واحد فقط .
يتجاهل المترجم جميع التعليقات . يمكن أن يتم استخدم كل من الإسلوبين فى نفس البرنامج .
بناء (هيكل) البرنامج Program Structure :
تتكون برامج لغة السى من :
1- توجيهات ما قبل معالج لغة السى C Preprocessor Directives
الميزة الجديرة بالاهتمام فى لغة السى هى أن لديها ما يسمى توجيهات "قبل المعالج" preprocessor ويمكن تسميتها اختصارا توجيهات المعالج ، وهى جزء لا يتجزأ من برنامج الترجمة . يمكنك التفكير فى توجيهات المعالج باعتبارها أداة برمجية ، والتى تمر خلال الكود أولا (قبل الترجمة) وتقوم بعمل بعض التعديلات على ما يتم ترجمته فى الواقع .
يبدأ توجيه المعالج بالرمز "هاش" “#” ويحتل السطر بكامله . وسوف يتم تغطيتها لاحقا بالتفصيل فى الفصل الثالث .
فى المثال أعلاه ، يبدأ البرنامج بتوجيه التضمين (#include) ، وهو أمر (توجيه) للمعالج بالقيام بوضع (تضمين) جميع السطور التى يحتوى عليها الملف (e3.h) لكى تظهر فى هذا المكان ضمن الكود عند بدء الترجمة الفعلية .
على سبيل المثال ، إذا قمت بإنشاء ملف يسمة delay.inc ووضعت فى هذا الملف السطر الوحيد التالى :
- الكود:
delay_ms(500);
عندئذ يمكنك استبدال سطرى التأخير delay_ms(500); فى البرنامج أعلاه بالتوجيه #include <delay.inc> ، وسوف يقوم البرنامج بالترجمة الصحيحة تماما . ففى الخطوة الأولى للترجمة ، يقوم معالج المترجم بقراءة البرنامج وعندما يصل إلى كل سطر مكتوب فيه التوجيه #include<delay.inc> يقوم بقراءة الملف المذكور وهو delay.inc واستبدال #include بالعبارة delay_ms(500); ، وهى السطر الوحيد داخل الملف ، حيث مكان التوجيه #include تماما .
يمكن أن يكون المعالج ميزة قوية فى لغة السى والتى تزيد من قابلية (سهولة) القراءة للبرنامج ، وتعظيم تقنية إعادة استخدام الكود ، وتساعد بشكل كبير على المحافظة على البرنامج .
إذا تفحصت نموذج البرنامج المبين أعلاه ، سوف ترى أن السطر الأول هو توجيه للمعالج لتضمين الملف My_PIC.H. من الشائع جدا (بل قد يجب) أن يكون أول سطر أوامر (وليس تعليقات) فى البرنامج هو توجيه بتضمين ملف به تعريفات محددة للهاردوير الخاص بالميكروكونترولر المستخدم . كثيرا ما يستخدم الامتداد (.h) (اختصار لكلمة header) لهذا النوع من الملفات . فى حالتنا ، جميع الإعلانات (التعريفات) اللازمة للميكروكونترولر المستخدم سوف تكون موجودة فى ملف الرأس المسمى My_PIC.H .
2- الدوال Functions:
الدالة هى مجموعة من التعليمات البرمجية القابلة للاستدعاء ، والتى تعرف فى بعض اللغات الأخرى بالاجراء أو بالبرنامج الفرعى . تتكون الدوال من بيانات محلية ، بمعنى أنه يمكن الوصول إليها فقط للدالة وللعبارات الموجودة ضمن هذه الدالة .
فى البرنامج أعلاه ، نجد أن السطر التالى يحتوى على تعريف لدالة تسمى الدالة الرئيسية main . جميع البرامج يجب أن يكون لديها دالة واحدة فقط تسمى الدالة الرئيسية main() . هذه الدالة هى المكان الذى يبدأ من عنده تنفيذ البرنامج . عند الإشارة إلى اسم دالة ، فإنه يكون متبوعا بالقوسين () ، حتى يكون من الواضح أن هذا اسم لدالة .
كلمة void (بمعنى فارغ أو خاوى) ، الموجودة قبل اسم الدالة تشير إلى أن هذه الدالة لا تعيد (تعطى) شىء نتيجة لتنفيذها ، وكلمة void الموجودة بين القوسين (void) تشير إلى أن هذه الدالة لا تأخذ شىء من القائم بالاستدعاء . القوسين {…} هى رموز لاحتواء مجموعة بينها . جميع الدوال تبدأ وتنتهى بهذه الرموز .
سوف يتم تناول الدوال بالتفصيل فى الفصل السابع ، ومع ذلك ، لوضع أساس لما تكون عليه الدوال ، إليك بعض الأمثلة على استخدام الدوال :
- الكود:
x=sin(y); //sin is a function with one argument and a return value
الدالة المسماة sin هى دالة بدليل أو وسيط أو بارامتر واحد ، وتعود بقيمة نتيجة لتنفيذها .
- الكود:
x=sin(y*3.1415/180); //the argument may be any expression
الوسيط قد يكون تعبير .
- الكود:
x=180*sin(y)/3.1415;// the return value may be used in an expression.
يمكن استخدام قيمة العودة فى تعبير.
3- الإعلانات Declarations :
السطر “int i" هى إعلان (تعريف) بيانات لمتغير يسمى بالمعرف “i" ، و “int” تشير إلى أن هذا المتغير هو عدد صحيح integer . فى هذه الحالة فإن المتغير “i" لا يجوز استخدامه إلا داخل الدالة الرئيسية main . إذا كان هذا السطر فوق (قبل) بداية الدالة الرئيسية (خارج الدالة الرئيسية) ، عندئذ ، يمكن الوصول إلى المتغير “i" بواسطة الدوال الأخرى . النطاق الذى يمكن الوصول خلاله إلى المتغير يسمى "نطاق المتغير" variable scope . سوف يتم تغطية النطاق بمزيد من التفصيل فى الفصل الرابع .
4- العبارات Statements والتعبيرات Expressions :
سطر “for” هو عبارة statement . يتم تنفيذ العبارات فى وقت الشغيل . هذه العبارة بشكل خاص تتضمن ثلاث تعبيرات expressions هى i=1; i<=10; i=i+1 يفصل بين التعبير والآخر الفاصلة المنقوطة “;” . سوف يتم تغطية التعبيلاات فى الفصل الخامس ، وتغطية العبارات فى الفصل السادس .
لمحة سريعة على عبارة “for” :
يتم تنفيذ التعبير الأول “i=1” لمرة واحدة . بعد ذلك يتم تكرار ما يلى :
• اختبار التعبير الثانى “i<=10” ، والخروج من الحلقة فى حالة ما إذا لم يكون صواب false .
• تنفيذ العبارة التى تلى القوس “)” .
• يتم تنفيذ التعبير الثالث “i=i+1” .
فى هذا المثال يتم تنفيذ الأربعة أسطر لعشر مرات ، حيث يذهب المتغير “i" من القيم 1 إلى القيمة 10 ، وبعد ذلك ، عندما تكون قيمته 11 ، تتوقف الحلقة لأن التعبير “11<=10” يكون غير صواب .
التعبيرات expressions هى مزيج من الثوابت ، والمتغيرات ، والعوامل ، واستدعاء الدوال . التعبيرات دائما يكون لها قيمة ناتج . من أمثلة العوامل “+ , - , * , / “ والعمل الخاص جدا “=” .
فى حالتنا ، حيث أن لدينا أربعة عبارات للتنفيذ فى عبارة “for” فإننا نحتاج لضمها (تجميعها) معا بالأقواس المعرجة {…} . هذه العبارة تسمى عبارة مركبة . وقد لا تحتوى الأقواس على أى عبارات أو قد تحتوى على المزيد من العبارات . بدون هذه الأقواس ، سوف يتم استدعاء الدالة output_high() فقط لعشر مرات . بعد ذلك يتم تنفيذ السطور الثلاثة الأخرى واحد تلو الآخر .
كل من السطور الأربعة فى الحلقة هو استدعاء لدالة . هذه الدوال لم يتم تعريفها عن طريق المبرمج لكنها دوال من صلب المترجم . التعبير أو التعبيرات الموجودة داخل الأقواس () للدالة المستدعاة هى بيانات يتم تمريرها إلى الدالة . هذه البيانات تسمى وسائط arguments فى الاستدعاء وتسمى بارامترات parameters فى الدالة .
فى لغة السى ، الحالة الخاصة للعبارة الصحيحة (شرط صحة العبارة) هى أن أى تعبير يكون متبوعا بالفاصلة المنقوطة “;” . لاحظ أنه ليس لمجرد أن تكون العبارة صحيحة أن يعنى ذلك أنها منطقية . على سبيل المثال ، فيما يلى عبارة لغة سى صحيحة :
- الكود:
1+2;
كتابة الفاصلة المنقوطة “;” مع عدم وجود تعبير قبلها ، هو حالة خاصة لاستدعاء عبارة فارغة تسمى null statement ، وهى لا تفعل شىء .
فى لغة السى ليس هناك عبارة تعيين (تخصيص) كما هو الحال فى بعض اللغات الأخرى ، بدلا من ذلك هناك "عامل التعيين" وهو علامة التساوى “=” ، على سبيل المثال :
- الكود:
x=3;
هذا السطر عبارة عن التعبير “x=3” والذى يتكون من متغير ، وعامل ، وثابت . هذا التعبير expression مع الفاصلة المنقوطة “;” يصنع عبارة statement . دائما يتم تعيين (تخصيص) القيمة الموجودة على الجانب الأيمن إلى المتغير الموجود على الجانب الأيسر .
5- الزمن (الوقت) Time :
الحروف “ms” فى كلمة delay_ms تعنى ملى ثانية . وحدات الزمن التى يكثر استخدامها فى البرامج هى :
• النانو ثانية 0.000,000,001 seconds .
• الميكروثانية 0.000,001 seconds .
• الملى ثانية 0.001 seconds .
على سبيل المثال ، هناك مليون ميكروثانية فى الثانية الواحدة .
6- دقة الكتابة Typing Accuracy :
دقة الكتابة تكون مهمة جدا عند إنشاء كود لغة السى . علامات الترقيم ، والتى إما أن تكتب بشكل خاطىء أو يتم حذفها ، يمكن أن تتسبب فى الكثير من الصداع بسبب عدم ترجمة البرنامج . المترجم يرى ما تكتبه بالضبط .
على سبيل المثال ، إذا نسيت قوس البداية “{“ فى سطرة عبارة for ، عندئذ فإن المترجم سوف يطلق رسالة بوجود خطأ عندما يصل إلى قوس النهاية “}” بعد أربع أسطر أسفل من مكان الخطأ الفعلى .
الفاصلة المنقوطة “;” التى تلى العديد من العبارات والإعلانات تكون مهمة لمساعدة المترجم لمعرفة متى ينتهى الإعلان أو العبارة . فهى لا تستخدم أبدا عند نهاية توجيه المعالج الذى يبدأ بالرمز “#” . فقد أو زيادة الفاصلة المنقوطة “;” أو القوس “{“ يمكن أن ينشىء رسائل خطأ مربكة . محرر لغة السى الجيد يسلط الضوء على مجموعة الأقواس المتوائمة
“{ }” و “()” علاوة على على العناصر النحوية لمنع الأخطاء أثناء الكتابة ، وذلك بتمييزها بألوان مختلفة .
7- تنسيق النص Text Formatting :
تنسيق المسافات الفارغة (البيضاء) مثل المسافات spaces و التبويبات tabs و مكان الرجوع من أول السطر ، وغيرها يتم تجاهله من قبل المترجم .
التنسيق يجعل الكود قابل للقراءة . المسافة البيضاء ،الناتجة من تخطيط البرنامج بحيث يبدو أكثر تنظيما ، تعتبر شىء جيد . وهى تأتى من استخدام المسافات والتبويبات والأسطر الفارغة . تستخدم التبويبات من أجل عمل تدرجات بدلا من استخدام عدد من المسافات . عدد المسافات لكل تبويب عادة يكون قابل للضبط . ثلاثة مسافات لكل تبويب تعمل بشكل جيد . لاحظ أن الأسطر الموجودة داخل الدالة إعلاه تكون متدرجة والخطوط داخل الحلقة تكون أكثر تدرجا . التدرج ، والمسافات البيضاء الأخرى اختيارية ، ولكن ينصح بها بشدة .
8- ملاحظات التوافق Compatibility Notes :
التعليق “//” هو بناء للغة C++ ، ومعتمد فقط من قبل بعض برامج الترجمة وليس كلها .
معظم برامج الترجمة تكون حساسة لحالة الحروف . على سبيل المثال ، Output_High() لن يتم التعرف عليها ولكن output_high() سوف يتم التعرف عليها . فى الوضع الافتراضى المترجم CCS C يكون غير حساس لحالة الحروف . لجعله حساسا ، يجب عليك استخدام توجيه المعالج “#case” .
الدوال الموجودة ضمن المترجم مثل output_high() و delay_ms() ليست من لفة السى القياسية ، حيث ينفرد بها المترجم CCS C .
أسئلة لمراجعة الفصل الأول مطلوب الإجابة عليها :
أسئلة لمراجعة الفصل الأول مطلوب الإجابة عليها :
السؤال الأول :
كمحاولة لتخفيص الفراغ الأبيض ، إى من البرامج التالية يكون صحيحا ؟
السؤال الثانى :
أى من العبارات التالية يكون صحيحا ؟
السؤال الثالث :
كم عدد مرات التكرار التى سوف تسببها هذه العبارة ؟
السؤال الرابع :
كم عدد مرات التكرار التى سوف تسببها هذه العبارة ؟
السؤال الخامس :
ما هى عناصر لغة السى يمكن أن توجد فى سطر الكود التالى ؟
السؤال السادس :
أى من التعليقات التالية يكون صحيحا بالنسبة للغة السى ؟
السؤال السابع :
ما الذى ينبغى أن يفعله المترجم مع السطر التالى ؟
السؤال الثامن :
التعبير المفرد قد يكون أيضا :
السؤال التاسع :
الملف q1.inc لديه السطور التالية :
مع الكود التالى ، كم عدد مرات وميض الليد ؟
السؤال العاشر :
تم إنشاء الملف qq1.inc بمجرد أربع حروف فقط هى void . عندما تتم محاولة ترجمة التالى ، كم عدد الأخطاء التى يتم توليدها ؟
السؤال الأول :
كمحاولة لتخفيص الفراغ الأبيض ، إى من البرامج التالية يكون صحيحا ؟
السؤال الثانى :
أى من العبارات التالية يكون صحيحا ؟
السؤال الثالث :
كم عدد مرات التكرار التى سوف تسببها هذه العبارة ؟
السؤال الرابع :
كم عدد مرات التكرار التى سوف تسببها هذه العبارة ؟
السؤال الخامس :
ما هى عناصر لغة السى يمكن أن توجد فى سطر الكود التالى ؟
السؤال السادس :
أى من التعليقات التالية يكون صحيحا بالنسبة للغة السى ؟
السؤال السابع :
ما الذى ينبغى أن يفعله المترجم مع السطر التالى ؟
السؤال الثامن :
التعبير المفرد قد يكون أيضا :
السؤال التاسع :
الملف q1.inc لديه السطور التالية :
مع الكود التالى ، كم عدد مرات وميض الليد ؟
السؤال العاشر :
تم إنشاء الملف qq1.inc بمجرد أربع حروف فقط هى void . عندما تتم محاولة ترجمة التالى ، كم عدد الأخطاء التى يتم توليدها ؟
تحميل وتثبيت برنامج المترجم CCS C :
تحميل وتثبيت برنامج المترجم CCS C :
رابط التحميل :
http://www.mediafire.com/download/87bkx8vxeb94i2y/PIC_C_Compiler_CCS_PCWHD_v5.008_with_Crack.zip
بعد تحميل البرنامج ، ببساطة نفذ خطوات التثبيت متبعا التعليمات التى تظهر على الشاشة . بعد التثبيت ، يجب أن يكون على سطح المكتب أيقونة بدء تشغيل البرنامج كالموضحة بالشكل أدناه :
تشغيل برنامج المترجم وترجمة البرنامج الخاص بك :
1- انقر نقرا مزدوجا على أيقونة بدء تشغيل برنامج المترجم . تظهر لك بيئة التطوير المتكاملة لبرنامج الترجمة .
2- إذا كان هناك كلف مفتوح ، انقر على FILE > CLOSE ALL لتنظيف بيئة التطوير المتكاملة .
3- اختار FILE > NEW > SOURCE لبدء مشروع جديد . اختار اسم مثل EX1.C للملف . لاحظ مسار الدليل الافتراضى الذى يستخدمه المترجم لحفظ المشاريع . يمكنك إنشاء مسارلدليل خاص بك .
4- فى المحرر ، اكتب البرنامج التالى ، ثم ترجمته كما فى الشكل أدناه:
5- المحاكاة ببرنامج Proteus :
استخدام معالج البرنامج Project Wizard :
يتضمن المترجم CCS C معالج لإنشاء البرنامج ، يوفر لك كثير من الوقت ، حتى تتفرغ للتفكير فى البرمجة ، وإليك خطوات استخدام معالج البرنامج لإنشاء نفس البرنامج بمجرد النقر على الماوس :
رابط التحميل :
http://www.mediafire.com/download/87bkx8vxeb94i2y/PIC_C_Compiler_CCS_PCWHD_v5.008_with_Crack.zip
بعد تحميل البرنامج ، ببساطة نفذ خطوات التثبيت متبعا التعليمات التى تظهر على الشاشة . بعد التثبيت ، يجب أن يكون على سطح المكتب أيقونة بدء تشغيل البرنامج كالموضحة بالشكل أدناه :
تشغيل برنامج المترجم وترجمة البرنامج الخاص بك :
1- انقر نقرا مزدوجا على أيقونة بدء تشغيل برنامج المترجم . تظهر لك بيئة التطوير المتكاملة لبرنامج الترجمة .
2- إذا كان هناك كلف مفتوح ، انقر على FILE > CLOSE ALL لتنظيف بيئة التطوير المتكاملة .
3- اختار FILE > NEW > SOURCE لبدء مشروع جديد . اختار اسم مثل EX1.C للملف . لاحظ مسار الدليل الافتراضى الذى يستخدمه المترجم لحفظ المشاريع . يمكنك إنشاء مسارلدليل خاص بك .
4- فى المحرر ، اكتب البرنامج التالى ، ثم ترجمته كما فى الشكل أدناه:
- الكود:
#include <16F877A.H>
#use delay(clock=4M)
void main(void)
{
while(true)
{
output_high(PIN_B0);
delay_ms(500);
output_low(PIN_B0);
delay_ms(500);
}
}
5- المحاكاة ببرنامج Proteus :
استخدام معالج البرنامج Project Wizard :
يتضمن المترجم CCS C معالج لإنشاء البرنامج ، يوفر لك كثير من الوقت ، حتى تتفرغ للتفكير فى البرمجة ، وإليك خطوات استخدام معالج البرنامج لإنشاء نفس البرنامج بمجرد النقر على الماوس :
الفصل الثانى الثوابت Constants :البت Bit والنبل Nibble والبايت Byte
الفصل الثانى الثوابت Constants :
البت Bit والنبل Nibble والبايت Byte :
البت Bit :
البت الواحدة فى الذاكرة أو فى سجل بمكن أن تمثل بواحدة من حالتين ممكنتين ، الصفر “0” أو الواحد “1” . فى عالم الإلكترونيات الرقمية يكون من المريح بناء عناصر الدائرة التى لديها حالتين : فصل / وصل off/on ، أو فعال / غير فعال active/inactive ، أو منخفض / مرتفع low/high . يمكن تمثيل هذه الحالات بواسطة الصفر “0” والواحد “1” / كما هو مبين بالشكل التالى :
نطاقات الجهد الدقيقة التى تمثل الصفر والواحد تختلف تبعا لجهد المصدر ونوع الدائرة المتكاملة المستخدمة
(TTL,CMOS) . خيار استخدام الصفر الثنائى لتمثيل صفر الجهد 0V هو خيار اعتباطى . المنطق المبين بالشكل إعلاه يعرف باسم "المنطق الموجب" . يمكن القيام به بطريقة عكسية ، والذى يعرف باسم "المنطق السالب" .
النبل Nibble :
يتكون النبل من 4 بت 4-bit ، ويمكن أن يمثل 16 حالة ممكنة . عادو يكون النبل هو النصف العلوى أو النصف السفلى من البايت ( يعرف باسم النبل ذات القيمة أو الأهمية الأقصى ، والنبل ذات القيمة أو الأهمية الأدنى) .
البايت Byte :
يتكون البايت من 8 بت 8-bit ويقال بسعة (بعرض-بحجم) 8 بتات . الميكروكونترولر 8 بت ينقل البايتات حول ناقل بيانات data bus بسعة 8-bit ( باستخدام 8 موصلات) .
أحجام (مقاسات) الذاكرة Memory Sizes :
فى معظم الأحيان يعبر عن حجم الذاكرة بدلالة بعدد البايتات . أحيانا يعبر عنها بدلالة عدد الكلمات words ، حيث حجم الكلمة يكون محددا بطريقة تنظيم الذاكرة فى الجهاز . بالنسبة للميكروكونترولر PIC ، كثيرا ما يتم التعبير عن ذاكرة RAM بالبايتات ، وذاكرة البرنامج بالكلمات لأن ذاكرة البرنامج قد تكون بسعة 12, 14, 16, 24 bits .
نظرا لأنه يتم العنونة بالنظام الثنائى ، فإنه يتم الإعراب عن أحجام الذاكرة الكبيرة كمضاعفات (أس) لعدد “2” . على سبيل المثال ، بدلا من 1000 بايت ، سوف يتم التعبير عنها بدلالة مضاعف العدد 2 بالصيغة 1024 bytes = (210) . فيما يلى الاختصارات الشائعة التى لا تطبق إلا على الذاكرة فقط :
1K = 1 kilobyte = 1024 bytes
1M = 1 megabyte = 1024 × 1024 or 1,048,576 bytes
1G = 1 gigabyte = 1024 × 1024 × 1024 or 1,073,741,824 bytes.
البت Bit والنبل Nibble والبايت Byte :
البت Bit :
البت الواحدة فى الذاكرة أو فى سجل بمكن أن تمثل بواحدة من حالتين ممكنتين ، الصفر “0” أو الواحد “1” . فى عالم الإلكترونيات الرقمية يكون من المريح بناء عناصر الدائرة التى لديها حالتين : فصل / وصل off/on ، أو فعال / غير فعال active/inactive ، أو منخفض / مرتفع low/high . يمكن تمثيل هذه الحالات بواسطة الصفر “0” والواحد “1” / كما هو مبين بالشكل التالى :
نطاقات الجهد الدقيقة التى تمثل الصفر والواحد تختلف تبعا لجهد المصدر ونوع الدائرة المتكاملة المستخدمة
(TTL,CMOS) . خيار استخدام الصفر الثنائى لتمثيل صفر الجهد 0V هو خيار اعتباطى . المنطق المبين بالشكل إعلاه يعرف باسم "المنطق الموجب" . يمكن القيام به بطريقة عكسية ، والذى يعرف باسم "المنطق السالب" .
النبل Nibble :
يتكون النبل من 4 بت 4-bit ، ويمكن أن يمثل 16 حالة ممكنة . عادو يكون النبل هو النصف العلوى أو النصف السفلى من البايت ( يعرف باسم النبل ذات القيمة أو الأهمية الأقصى ، والنبل ذات القيمة أو الأهمية الأدنى) .
البايت Byte :
يتكون البايت من 8 بت 8-bit ويقال بسعة (بعرض-بحجم) 8 بتات . الميكروكونترولر 8 بت ينقل البايتات حول ناقل بيانات data bus بسعة 8-bit ( باستخدام 8 موصلات) .
أحجام (مقاسات) الذاكرة Memory Sizes :
فى معظم الأحيان يعبر عن حجم الذاكرة بدلالة بعدد البايتات . أحيانا يعبر عنها بدلالة عدد الكلمات words ، حيث حجم الكلمة يكون محددا بطريقة تنظيم الذاكرة فى الجهاز . بالنسبة للميكروكونترولر PIC ، كثيرا ما يتم التعبير عن ذاكرة RAM بالبايتات ، وذاكرة البرنامج بالكلمات لأن ذاكرة البرنامج قد تكون بسعة 12, 14, 16, 24 bits .
نظرا لأنه يتم العنونة بالنظام الثنائى ، فإنه يتم الإعراب عن أحجام الذاكرة الكبيرة كمضاعفات (أس) لعدد “2” . على سبيل المثال ، بدلا من 1000 بايت ، سوف يتم التعبير عنها بدلالة مضاعف العدد 2 بالصيغة 1024 bytes = (210) . فيما يلى الاختصارات الشائعة التى لا تطبق إلا على الذاكرة فقط :
1K = 1 kilobyte = 1024 bytes
1M = 1 megabyte = 1024 × 1024 or 1,048,576 bytes
1G = 1 gigabyte = 1024 × 1024 × 1024 or 1,073,741,824 bytes.
بناء جملة ثوابت لغة السى Syntax of C Constants : العدد الثنائى Binary :
بناء جملة ثوابت لغة السى Syntax of C Constants :
العدد الثنائى Binary :
العدد الثنائى المكون من أكثر من بت واحدة يمكن أن يمثل أعداد أكبر من الواحد “1” . كبر هذا العدد تعتمد على عدد البتات Bits أو الأرقام Digit . العدد الثنائى بحجم 8-bit (البايت) يمكن أن يمثل 256 عدد ممكن ( من الصفر إلى 255 ) . العدد الثنائى بحجم 16-bit يمكن أن يمثل الأعداد من 0 إلى 65,535 . إذا استخدمنا بايت لنقل المعلومات ، فإنه يمكننا نقل 256 توليفة ممكنة ، وهو ما يكفى لتمثيل الأرقام العشرة العشرية ( من 0 إلى 9 ) ، والحروف letters الكبيرة والصغيرة ، وأكثر من ذلك . الكود الشائع الاستخدام لتمثيل الأحرف characters يسمة كود أسكى ASCII ( المعيار الأمريكى لتبادل المعلومات ) .
تستند الأعداد الثنائية على مضاعفات ( تسمى قوة power) الرقم “2” . قيمة البت الأولى bit 0 هى 2 أس (قوة) صفر وهى تساوى واحد “20 = 1” إذا كانت تحتوى على واحد ، أو صفر إذا كانت تحتوى على صفر . وقيمة البت الثانية bit 1 تكون 2 أس (قوة) واحد تساوى 2 ، أى “21 = 1 “ إذا كانت تحتوى على الواحد ، أو صفر إذا كانت تحتوى على الصفر . وقيمة البت bit 3 تكون “23 = 8 “ إذا احتوت على واحد ، وصفر إذا احتوت على صفر ، وهكذا .
فى العدد الثنائى المكون من 16 بت ، البت bit 0 هى البت الأدنى قيمة (أهمية) LSB ، والبت bit 15 هى البت الأقصى قيمة . الشكل التالى يبين قيمة كل موقع بت إذا كان يحتوى واحد “1” .
قيمة العدد الثنائى المحتواة فى متغير 16-bit سوف تتحدد عن طريق ضرب محتويات كل بت فى قيمة كل بت كما فى الشكل التالى :
العد التصاعدى فى النظام الثنائى يأخذ الشكل التالى :
Counting up in binary goes like this:
فى لغة السى الثابت الثنائى يبدأ بالبادئة “0b” يليها الأرقام الثنائية . على سبيل المثال ، لتخصيص العدد العشرى “6” ، أو العدد الثنائى “00000110” ، إلى المتغير “x” يتم ذلك بالشكل التالى :
x=0b00000110;
العدد العشرى Decimal :
العدد الثنائى Binary :
العدد الثنائى المكون من أكثر من بت واحدة يمكن أن يمثل أعداد أكبر من الواحد “1” . كبر هذا العدد تعتمد على عدد البتات Bits أو الأرقام Digit . العدد الثنائى بحجم 8-bit (البايت) يمكن أن يمثل 256 عدد ممكن ( من الصفر إلى 255 ) . العدد الثنائى بحجم 16-bit يمكن أن يمثل الأعداد من 0 إلى 65,535 . إذا استخدمنا بايت لنقل المعلومات ، فإنه يمكننا نقل 256 توليفة ممكنة ، وهو ما يكفى لتمثيل الأرقام العشرة العشرية ( من 0 إلى 9 ) ، والحروف letters الكبيرة والصغيرة ، وأكثر من ذلك . الكود الشائع الاستخدام لتمثيل الأحرف characters يسمة كود أسكى ASCII ( المعيار الأمريكى لتبادل المعلومات ) .
تستند الأعداد الثنائية على مضاعفات ( تسمى قوة power) الرقم “2” . قيمة البت الأولى bit 0 هى 2 أس (قوة) صفر وهى تساوى واحد “20 = 1” إذا كانت تحتوى على واحد ، أو صفر إذا كانت تحتوى على صفر . وقيمة البت الثانية bit 1 تكون 2 أس (قوة) واحد تساوى 2 ، أى “21 = 1 “ إذا كانت تحتوى على الواحد ، أو صفر إذا كانت تحتوى على الصفر . وقيمة البت bit 3 تكون “23 = 8 “ إذا احتوت على واحد ، وصفر إذا احتوت على صفر ، وهكذا .
فى العدد الثنائى المكون من 16 بت ، البت bit 0 هى البت الأدنى قيمة (أهمية) LSB ، والبت bit 15 هى البت الأقصى قيمة . الشكل التالى يبين قيمة كل موقع بت إذا كان يحتوى واحد “1” .
قيمة العدد الثنائى المحتواة فى متغير 16-bit سوف تتحدد عن طريق ضرب محتويات كل بت فى قيمة كل بت كما فى الشكل التالى :
العد التصاعدى فى النظام الثنائى يأخذ الشكل التالى :
Counting up in binary goes like this:
- الكود:
0000
0001
0010
0011
0100
0101
.........
فى لغة السى الثابت الثنائى يبدأ بالبادئة “0b” يليها الأرقام الثنائية . على سبيل المثال ، لتخصيص العدد العشرى “6” ، أو العدد الثنائى “00000110” ، إلى المتغير “x” يتم ذلك بالشكل التالى :
x=0b00000110;
العدد العشرى Decimal :
رد: ترجمة وإعداد كتاب البرمجة بلغة السى المدمجة وتطبيقات لغة السى والميكروكونترولر PIC مع المترجم CCS C : Embedded C Programming Techniques and Applications of C and PIC® MCUS
العدد العشرى Decimal :
الأعداد العشرية هى وسيلة معظم الناس الذين يفكرون فى الأعداد . هناك 10 أرقام digits يمكن أن تكون فى كل موقع (خانة) عشرية وهى 0-9 . فى لغة السى يتم التعبير عن العدد العشرى ببساطة بالشكل التالى :
x=123;
سوف يتم تناول الأنواع بالتفصيل لاحقا . مع ذلك ، فإننا نلاحظ هنا أن المترجم سوف يعامل العدد “123” كثابت بحجم واحد بايت لأن القيمة “123” تناسب البايت . إذا أراد المترجم لسبب ما أن يعامل هذا العدد عدد بحجم 2 بايت عندئذ يقوم بإلحاق الحرف “L” ( اختصار Long) بالعدد ، بالشكل التالى :
حرف “L” لا يكون مطلوبا للأعداد التى هى بالفعل طويلة جدا لتناسب البايت ( مثل 1000 ) . كما يمكن أن يلحق بالعدد الحرف “U” للإشارة إلى أنه بدون إشارة Unsigned .
الإعداد الصحيحة بإشارة Signed Integers :
الأعداد الثنائية المبينة أعلاه هى أعداد بدون إشارة . خلية الذاكرة 8-bit يمكن أن لديها عدد من 0 إلى 255 . فى لغة السى ، من المفيد فى بعض الأحيان تمثيل الأعداد السالبة . عند القيام بذلك ، يتم استخدام موقع (خاة) ثنائية من أجل الإشارة sign . وجود صفر فى هذا الموقع يعنى أن العدد الثنائى موجب ووجود الواحد يعنى أنه سالب . بقية مواقع (خانات) العدد الثنائى تكون فيما يعرف بشكل "مكمل العدد 2" .
فى لغة السى ، يتم تمثيل الأعداد الصحيحة السالبة بالشكل التالى :
الأعداد العشرية هى وسيلة معظم الناس الذين يفكرون فى الأعداد . هناك 10 أرقام digits يمكن أن تكون فى كل موقع (خانة) عشرية وهى 0-9 . فى لغة السى يتم التعبير عن العدد العشرى ببساطة بالشكل التالى :
x=123;
سوف يتم تناول الأنواع بالتفصيل لاحقا . مع ذلك ، فإننا نلاحظ هنا أن المترجم سوف يعامل العدد “123” كثابت بحجم واحد بايت لأن القيمة “123” تناسب البايت . إذا أراد المترجم لسبب ما أن يعامل هذا العدد عدد بحجم 2 بايت عندئذ يقوم بإلحاق الحرف “L” ( اختصار Long) بالعدد ، بالشكل التالى :
- الكود:
x=124L;
حرف “L” لا يكون مطلوبا للأعداد التى هى بالفعل طويلة جدا لتناسب البايت ( مثل 1000 ) . كما يمكن أن يلحق بالعدد الحرف “U” للإشارة إلى أنه بدون إشارة Unsigned .
الإعداد الصحيحة بإشارة Signed Integers :
الأعداد الثنائية المبينة أعلاه هى أعداد بدون إشارة . خلية الذاكرة 8-bit يمكن أن لديها عدد من 0 إلى 255 . فى لغة السى ، من المفيد فى بعض الأحيان تمثيل الأعداد السالبة . عند القيام بذلك ، يتم استخدام موقع (خاة) ثنائية من أجل الإشارة sign . وجود صفر فى هذا الموقع يعنى أن العدد الثنائى موجب ووجود الواحد يعنى أنه سالب . بقية مواقع (خانات) العدد الثنائى تكون فيما يعرف بشكل "مكمل العدد 2" .
فى لغة السى ، يتم تمثيل الأعداد الصحيحة السالبة بالشكل التالى :
- الكود:
x=-123;
العدد السداسى عشرى Hexadecimal :
العدد السداسى عشرى Hexadecimal :
نظام العدد السداسى عشرى لديه 16 رقم ، الأعداد 0–9 ثم الحروف A–F . السبب فى استخدام العدد السداسى عشرى أنه مفيد جدا للمبرمج لكى يفهم الأعداد بدلالة تمثيلها الثنائى ، على الرغم من أن السلسلة الطويلة الثنائية يكون من الصعب تذكرها والتواصل معها . على خلاف العدد العشرى الشائع الاستخدام ، فإن العدد السداسى عشرى لديه علاقة مباشرة بالعدد الثنائى . فكل رقم سداسى عشرى هو بالضبط 4 بت بالثنائى . وأربعة أرقام سداسى عشرى تمثل 16 قيمة ، كما فى الشكل التالى :
استخدام النظام السداسى عشرى ليس صعبا ، كل ما تحتاجه القليل من الممارسة . البايت الواحد يتطلب رقمين سداسى عشرى . لاحظ أن الأرقام التى تمث بايت تكون أحيانا فى شكل مجموعات من اثنين أو أربع ، وأن الرقم السداسى عشرى ذات القيم الأقصى يكون جهة اليسار . للدلالة على الأعداد السداسى عشرى تستخدم البادئة “0x” ، كما يلى :
الشكل التالى يبين ملخص للعلاقة بين العدد الثنائى والعدد السداسى عشرى والعدد العشرى ، لبعض الأعداد المختارة :
من السهل بكثير أو تذكر كتابة العدد السداسى عشرى “FFFF” عن الشكل “1111 1111 1111 1111 “ أو “65,535” .
العدد الحقيقى أو عدد النقطة العائمة Floating Point :
نظام العدد السداسى عشرى لديه 16 رقم ، الأعداد 0–9 ثم الحروف A–F . السبب فى استخدام العدد السداسى عشرى أنه مفيد جدا للمبرمج لكى يفهم الأعداد بدلالة تمثيلها الثنائى ، على الرغم من أن السلسلة الطويلة الثنائية يكون من الصعب تذكرها والتواصل معها . على خلاف العدد العشرى الشائع الاستخدام ، فإن العدد السداسى عشرى لديه علاقة مباشرة بالعدد الثنائى . فكل رقم سداسى عشرى هو بالضبط 4 بت بالثنائى . وأربعة أرقام سداسى عشرى تمثل 16 قيمة ، كما فى الشكل التالى :
استخدام النظام السداسى عشرى ليس صعبا ، كل ما تحتاجه القليل من الممارسة . البايت الواحد يتطلب رقمين سداسى عشرى . لاحظ أن الأرقام التى تمث بايت تكون أحيانا فى شكل مجموعات من اثنين أو أربع ، وأن الرقم السداسى عشرى ذات القيم الأقصى يكون جهة اليسار . للدلالة على الأعداد السداسى عشرى تستخدم البادئة “0x” ، كما يلى :
- الكود:
x=0x1A;
الشكل التالى يبين ملخص للعلاقة بين العدد الثنائى والعدد السداسى عشرى والعدد العشرى ، لبعض الأعداد المختارة :
من السهل بكثير أو تذكر كتابة العدد السداسى عشرى “FFFF” عن الشكل “1111 1111 1111 1111 “ أو “65,535” .
العدد الحقيقى أو عدد النقطة العائمة Floating Point :
العدد الحقيقى أو عدد النقطة العائمة Floating Point :
العدد الحقيقى أو عدد النقطة العائمة Floating Point :
الأعداد المذكور أعلاه كلها أعداد صحيحة ، لا يوجد بها نقطة (علامة) عشرية . عدد النقطة العائمة (العدد العشرى الحقيقى) هو عدد بنقطة عشرية والتى تتحرك على نطاق كبير . على سبيل المثال ، العدد “12.34” هو عدد حقيقى بسيط . داخليا يتم حفظ هذا العدد فى الشكل “1234 × 10−2” . ويشار إلى الجزئين باسم الجزء العشرى mantissa وجزء الأس exponent . كل مترجم معين يكون لديه نطاق أقصى لكل منهما .
فى لغة السى هناك ثلاثة طرق للتعبير عن العدد الحقيقى كما يلى :
عدد النقطة الثابتة Fixed Point :
عدد النقطة الثابتة يكون لديه نقطة عشرية ، لكنها ثابتة . على سبيل المثال ، عند التعامل مع الذاكرة ، ليست هناك حاجة لأكثر من رقمين عشريين . يمكن حفظ العدد كأنه عدد صحيح وإخبار المترجم بأن يتذكر دائما بأن هناك نقطة عشرية قبل آخر رقمين . ليست هناك تسمية خاصة للثوابت ذات النقطة الثابتة ، المتغير لديه تعيين للنقطة الثابتة . الشكل الوحيد المسموح به هو :
الأعداد المذكور أعلاه كلها أعداد صحيحة ، لا يوجد بها نقطة (علامة) عشرية . عدد النقطة العائمة (العدد العشرى الحقيقى) هو عدد بنقطة عشرية والتى تتحرك على نطاق كبير . على سبيل المثال ، العدد “12.34” هو عدد حقيقى بسيط . داخليا يتم حفظ هذا العدد فى الشكل “1234 × 10−2” . ويشار إلى الجزئين باسم الجزء العشرى mantissa وجزء الأس exponent . كل مترجم معين يكون لديه نطاق أقصى لكل منهما .
فى لغة السى هناك ثلاثة طرق للتعبير عن العدد الحقيقى كما يلى :
- الكود:
x=1.23;
x=1.23E5; // same as 123,000.0
x=5F; // same as 5.0.
عدد النقطة الثابتة Fixed Point :
عدد النقطة الثابتة يكون لديه نقطة عشرية ، لكنها ثابتة . على سبيل المثال ، عند التعامل مع الذاكرة ، ليست هناك حاجة لأكثر من رقمين عشريين . يمكن حفظ العدد كأنه عدد صحيح وإخبار المترجم بأن يتذكر دائما بأن هناك نقطة عشرية قبل آخر رقمين . ليست هناك تسمية خاصة للثوابت ذات النقطة الثابتة ، المتغير لديه تعيين للنقطة الثابتة . الشكل الوحيد المسموح به هو :
- الكود:
x=1.23;
الأحرف Characters :
الأحرف Characters :
الأحرف تشمل الأرقام digits (0–9) والحروف letters (A–Z) بالإضافة إلى علامات الترقيم والرموز الخاصة التى يتم استخدامها فى البرمجة . كل حرف character من هذه الأحرف يمكن تمثيله فى لغة السى يناظر عدد من 0 إلى 255 . كود أسكى ASCII هو معيار للأحرف التى يمكن أن تكون ممثلة بواسطة 8 بتات .
هناك 256 حرف من أحرف كود اسكى والمبين بالشكل التالى :
على سبيل المثال ، الحرف “A” يتم تخزينه فى الذاكرة فى شكل القيمة العددية “65” . يتم وضع ثابت الحرف بين علامتى اقتباس فردى . لغة السى فضفاضة نوعا ما فى الكتابة ( ترجمة بنود الأنواع المختلفة لا علاقة لها بما تقوم به أصابعك على لوحة المفاتيح ) لذلك يمكنك دائما استخدام 65 أو ‘A’ كبدائل فى الكود الخاص بك . فيما يلى شكل التخصيص :
هناك طريقة خاصة لتحديد الأحرف التى قد لا يكون لها تمثيل لوحة مفاتيح ، هذه الحروف تسمى تسلسل الهروب
escape sequence . تستخدم الشرطة المائلة “\” للإشارة إلى هذا التنسيق الخاص . إذا أردت الحرف “\” فيجب عليك استخدام لثنين فى الصف كما يلى “\\” . من أجل تحديد فقط القيمة السداسية عشرى للحرف نقوم بما يلى : “\x41” ( وهذه هى نفسها ‘A’ ) . هناك عدد من الأحرف الإضافية المبينة بالجدول التالى :
لاحظ أن الشرطة المائلة يجب أن تسنخدم للحصول على حرف الشرطة المائلة نفسه فضلا عن علامات الاقتباس المفردة والمزوجة فى بعض الحالات . على سبيل المثال ، الأسطر التالية هى نفسها ، وفى كل حالة يتم كتابة قيمة بايت إلى “c” .
سلسلة الأحرف String of Characters :
الأحرف تشمل الأرقام digits (0–9) والحروف letters (A–Z) بالإضافة إلى علامات الترقيم والرموز الخاصة التى يتم استخدامها فى البرمجة . كل حرف character من هذه الأحرف يمكن تمثيله فى لغة السى يناظر عدد من 0 إلى 255 . كود أسكى ASCII هو معيار للأحرف التى يمكن أن تكون ممثلة بواسطة 8 بتات .
هناك 256 حرف من أحرف كود اسكى والمبين بالشكل التالى :
على سبيل المثال ، الحرف “A” يتم تخزينه فى الذاكرة فى شكل القيمة العددية “65” . يتم وضع ثابت الحرف بين علامتى اقتباس فردى . لغة السى فضفاضة نوعا ما فى الكتابة ( ترجمة بنود الأنواع المختلفة لا علاقة لها بما تقوم به أصابعك على لوحة المفاتيح ) لذلك يمكنك دائما استخدام 65 أو ‘A’ كبدائل فى الكود الخاص بك . فيما يلى شكل التخصيص :
- الكود:
x=‘A’;
هناك طريقة خاصة لتحديد الأحرف التى قد لا يكون لها تمثيل لوحة مفاتيح ، هذه الحروف تسمى تسلسل الهروب
escape sequence . تستخدم الشرطة المائلة “\” للإشارة إلى هذا التنسيق الخاص . إذا أردت الحرف “\” فيجب عليك استخدام لثنين فى الصف كما يلى “\\” . من أجل تحديد فقط القيمة السداسية عشرى للحرف نقوم بما يلى : “\x41” ( وهذه هى نفسها ‘A’ ) . هناك عدد من الأحرف الإضافية المبينة بالجدول التالى :
لاحظ أن الشرطة المائلة يجب أن تسنخدم للحصول على حرف الشرطة المائلة نفسه فضلا عن علامات الاقتباس المفردة والمزوجة فى بعض الحالات . على سبيل المثال ، الأسطر التالية هى نفسها ، وفى كل حالة يتم كتابة قيمة بايت إلى “c” .
- الكود:
c=‘\r’;
c=‘\0x0D’;
c=13;
سلسلة الأحرف String of Characters :
رد: ترجمة وإعداد كتاب البرمجة بلغة السى المدمجة وتطبيقات لغة السى والميكروكونترولر PIC مع المترجم CCS C : Embedded C Programming Techniques and Applications of C and PIC® MCUS
سلسلة الأحرف String of Characters :
لغة السى مجهزة من أجل حفظ الأحرف فى الذاكرة . فى هذه الحالة يمكن أن يكون هناك أى عدد من الأحرف ويتم تحديد النهاية عن طريق حرف "لاشىء" null (وهو بالشكل “\000” ) عند نهاية السلسلة . على سبيل المثال ":
استخدام علامات الاقتباس المزدوجة يعنى أننا نحدد سلسلة من الأحرف . فى هذه الحالة هناك أربعة أحرف فى السلسلة وخمسة أحرف فى الذاكرة ( أخر حرف هو 0 ) . هذه السلسلة تتطلب 5 بايت من الذاكرة .
يمكن أن يكون داخل السلاسل أحرف خاصة ، على سبيل المثال :
فى هذه الحالة السلسلة هى نفسها السلسلة السابقة مكونة من 5 بايت ، لكن هنا الأحرف “B” و “C” ممثلة بالسداسى عشرى والثمانى .
من الشائع استخدام الحرف “\r”(return) والحرف “\n”(line feed) فى سلاسل لغة السى . يستخدم نظام ملفات الوندوز هذين الحرفين لتحديد نهاية السطر فى الملف . السلسلة التى تمثل سطرا واحدا فى ملف وعلى الشاشة قد تبدو بالشكل التالى :
ميزة أخرى مثيرة فى لغة السى ، وهى أنه فى حالة ظهور سلسلتين متتاليتين مع مسافة بيضاء اختيارية بينهما ، عندئذ يتم التعامل مع السلسلتين كسلسلة واحدة كبيرة . على سبيل المثال :
سوف تعطيك نفس نتيجة ما يلى :
لاحظ فى هذه الحالة أن الصفر “0” الموجود بعد حرف “0” قد تم تجاهله ، لذلك فكل من السلسلتين يكون بحجم 9 بايت . يمكن استخدام هذه الميزة عند التعامل مع السلاسل الطويلة جدا التى قد ترغب فى توزيعها على خطوط متعددة . كما أنها أيضا تساعد فى وحدات الماكرو macros ، والتى سوف تغطى لاحقا .
الصواب والخطأ True and False :
لغة السى مجهزة من أجل حفظ الأحرف فى الذاكرة . فى هذه الحالة يمكن أن يكون هناك أى عدد من الأحرف ويتم تحديد النهاية عن طريق حرف "لاشىء" null (وهو بالشكل “\000” ) عند نهاية السلسلة . على سبيل المثال ":
استخدام علامات الاقتباس المزدوجة يعنى أننا نحدد سلسلة من الأحرف . فى هذه الحالة هناك أربعة أحرف فى السلسلة وخمسة أحرف فى الذاكرة ( أخر حرف هو 0 ) . هذه السلسلة تتطلب 5 بايت من الذاكرة .
يمكن أن يكون داخل السلاسل أحرف خاصة ، على سبيل المثال :
فى هذه الحالة السلسلة هى نفسها السلسلة السابقة مكونة من 5 بايت ، لكن هنا الأحرف “B” و “C” ممثلة بالسداسى عشرى والثمانى .
من الشائع استخدام الحرف “\r”(return) والحرف “\n”(line feed) فى سلاسل لغة السى . يستخدم نظام ملفات الوندوز هذين الحرفين لتحديد نهاية السطر فى الملف . السلسلة التى تمثل سطرا واحدا فى ملف وعلى الشاشة قد تبدو بالشكل التالى :
ميزة أخرى مثيرة فى لغة السى ، وهى أنه فى حالة ظهور سلسلتين متتاليتين مع مسافة بيضاء اختيارية بينهما ، عندئذ يتم التعامل مع السلسلتين كسلسلة واحدة كبيرة . على سبيل المثال :
سوف تعطيك نفس نتيجة ما يلى :
لاحظ فى هذه الحالة أن الصفر “0” الموجود بعد حرف “0” قد تم تجاهله ، لذلك فكل من السلسلتين يكون بحجم 9 بايت . يمكن استخدام هذه الميزة عند التعامل مع السلاسل الطويلة جدا التى قد ترغب فى توزيعها على خطوط متعددة . كما أنها أيضا تساعد فى وحدات الماكرو macros ، والتى سوف تغطى لاحقا .
الصواب والخطأ True and False :
الصواب والخطأ True and False :
الصواب والخطأ True and False :
تعبير لغة السى يقيم إلى قيمة رقمية . التعبيرات التى تستخدم معاملات العلاقات relational تقيم إلى قيمة إما TRUE (1) أو FALSE (0) . غالبا ما تستخدم تعبيرات العلاقة داخل عبارات “if” و “while” ، كما يلى :
إذا كان تقييم التعبير TRUE ، يتم تنفيذ العبارة أو العبارات التى تلى هذا الخط من الكود .
إذا كان تقييم التعبير FALSE ، لا يتم تنفيذ العبارة أو العبارات التى تلى هذا الخط من الكود .
تعبير العلاقات a<b سوف يقيم بصفر أو بواحد . عبارة if ببساطة تعامل أى قيمة غير صفرية باعتبارها true وقيمة الصفر باعتبارها false .
المترجم CCS C يحدد مسبقا فى ملف رأس الجهاز اثنين من المعرفات هما true و false واللذان فى بعض الأحيان يكونان مفيدان عند التعامل مع تعبيرات العلاقات . لغة السى القياسية لا تعرف true ولا false .
لقد استخدمنا بالفعل إعلان بيانات بسيط مثل الإعلان التالى :
يمكن تعريف ثابت رمزى باستخدام الكلمة الخاصة “const” ، وهى صفة يمكن تطبيقها على الإعلان .
بعد تعريف الثبت الرمزى ، يشار إليه باسم فى البرنامج . فى هذه الحالة ، قيمة الثابت المسمى LEVEL لا يمكن أبدا أن تتغير فى الكود ، فهى دائما “10” . الطريقة الأكثر شيوعا لتعريف الثوابت هى كما يلى :
وسوف يقوم توجيه المعالج هذا باستبدال كافة تواجدات الاسم LEVEL بالقيمة “10” . سوف يتم تغطية هذا التوجيه بمزيد من التفصيل فى الفصل القادم .
أحد مزايا طريقة الثابت const هى أن نوع المعرف (فى هذه الحالة int) يرتبط بشكل إيجابى مع المعرف جنبا إلى جنب مع القيمة .
تعبير لغة السى يقيم إلى قيمة رقمية . التعبيرات التى تستخدم معاملات العلاقات relational تقيم إلى قيمة إما TRUE (1) أو FALSE (0) . غالبا ما تستخدم تعبيرات العلاقة داخل عبارات “if” و “while” ، كما يلى :
- الكود:
if (a<b) //compare a to b
إذا كان تقييم التعبير TRUE ، يتم تنفيذ العبارة أو العبارات التى تلى هذا الخط من الكود .
إذا كان تقييم التعبير FALSE ، لا يتم تنفيذ العبارة أو العبارات التى تلى هذا الخط من الكود .
تعبير العلاقات a<b سوف يقيم بصفر أو بواحد . عبارة if ببساطة تعامل أى قيمة غير صفرية باعتبارها true وقيمة الصفر باعتبارها false .
المترجم CCS C يحدد مسبقا فى ملف رأس الجهاز اثنين من المعرفات هما true و false واللذان فى بعض الأحيان يكونان مفيدان عند التعامل مع تعبيرات العلاقات . لغة السى القياسية لا تعرف true ولا false .
لقد استخدمنا بالفعل إعلان بيانات بسيط مثل الإعلان التالى :
- الكود:
int i;
يمكن تعريف ثابت رمزى باستخدام الكلمة الخاصة “const” ، وهى صفة يمكن تطبيقها على الإعلان .
بعد تعريف الثبت الرمزى ، يشار إليه باسم فى البرنامج . فى هذه الحالة ، قيمة الثابت المسمى LEVEL لا يمكن أبدا أن تتغير فى الكود ، فهى دائما “10” . الطريقة الأكثر شيوعا لتعريف الثوابت هى كما يلى :
- الكود:
#define LEVEL 10
وسوف يقوم توجيه المعالج هذا باستبدال كافة تواجدات الاسم LEVEL بالقيمة “10” . سوف يتم تغطية هذا التوجيه بمزيد من التفصيل فى الفصل القادم .
أحد مزايا طريقة الثابت const هى أن نوع المعرف (فى هذه الحالة int) يرتبط بشكل إيجابى مع المعرف جنبا إلى جنب مع القيمة .
مواضيع مماثلة
» ترجمة وإعداد كتاب الميكروكونترولر PIC ولغى السى مع المترجم ميكروسى والمحاكاة ببرنامج إيزيس
» ملف ترجمة وإعداد كتاب الميكروكونترولر PIC والبرمجة بلغة السى -الفصل الأول
» مدخل البرمجة بلغة السى شارب وتطبيقات الكونسول Console Applications
» ترجمة الفصل الأول والفصل الثانى من كتاب برمجة الميكروكونترولر PIC بلغة السى مع المترجم ميكروسى برو
» التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :
» ملف ترجمة وإعداد كتاب الميكروكونترولر PIC والبرمجة بلغة السى -الفصل الأول
» مدخل البرمجة بلغة السى شارب وتطبيقات الكونسول Console Applications
» ترجمة الفصل الأول والفصل الثانى من كتاب برمجة الميكروكونترولر PIC بلغة السى مع المترجم ميكروسى برو
» التدريب الأساسى : عملية المسح والعرض لحرف واحد غير متحرك :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: برمجة الميكروكونترولر PIC بلغة السى مع المترجم CCS - C
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى