أساسيات برمجة السلسلة PIC16 بلغة السى مع المترجم CCS C  :

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

أساسيات برمجة السلسلة PIC16 بلغة السى مع المترجم CCS C  :

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

أساسيات برمجة السلسلة PIC16 بلغة السى مع المترجم CCS C  :
• المتغيرات Variables .
• الحلقة Looping .
• القرارات Decisions .
الغرض من البرنامج هو قراءة البيانات من مداخل التحكم ، وعلاجها ، وتشغيل المخارج كما هو مطلوب . المدخلات من المنافذ المتوازية والتسلسلية والتماثلية يتم الاحتفاظ بها فى سجلات للتخزين المؤقت والمعالجة ، ويتم إخراج النتائج فى وقت لاحق ، كبيانات أو إشارات . برنامج معالجة البيانات عادة ما يحتوى على حلقات تكرار وتفرع مشروط ، والذى يعتمد على المدخلات أو القيم المحسوبة .

المتغيرات Variables :
تحتاج معظم البرامج إلى معالجة البيانات بطريقة ما ، وهناك حاجة لما يسمى المتغيرات لحفظ قيم البيانات . اسم المتغير هو لافتة (تسمية) label تعلق على موقع ذاكرة حيث يتم تخزين قيمة المتغير . عند العمل فى لغة التجميع (الأسمبلى) ، تعمل تسمية السجل كاسم للمتغير ويجب تعيينه (تخصيصه) صراحة . فى لغة السى ، يتم تعيين (تخصيص) تسمية المتغير تلقائيا إلى الموقع أو المواقع التالية المتاحة ( العديد من أنواع المتغير تحتاج إلى أكثر من بايت واحد من الذاكرة) . يجب أن يعلن اسم ونوع المتغير فى بداية كتلة البرنامج ، حتى يمكن للمترجم تخصيص مجموعة مماثلة من المواقع . يفترض أن قيم المتغيرات تكون بالنظام العشرى بشكل افتراضى ، ولذلك إذا تم إعطاء قيمة بالنظام الستة عشر فى كود المصدر ، يجب أن تكون مكتوبة بالبادئة (0x) ، لذلك فإن 0xFF يمثل 255 عشرى ، على سبيل المثال .  
فى البرنامج أدناه ، يتم استخدام متغير يسمى (x) . التسميات الأطول هى الأفضل فى بعض الأحيان ، مثل "output_value" ولكن لايسمح بالمسافات الفارغة . يمكن فقط استخدام الأحرف الأبجدية
(a–z, A–Z, 0–9) والشرطة السفلية ، بدلا من المسافة الفارغة .
فى الوضع الافتراضى يكون المترجم CCS غير حساس لحالة الحرف ، لذلك فإن الحرف 'a' هو نفسه الحرف 'A' ( على الرغم من أن كود أسكى يكون مختلف) . يجب عدم استخدام عدد محدود من الكلمات الخاصة بلغة السى , مثل main و include ، كاسماء للمتغيرات .        


الكود:


/*Lesson1-EX2
Program function: Outputs an 8-bit variable
*************************************************/
#include <16F877A.h>

void main()
{
Int8 x;          // Declare variable and type
x = 99;       // Assign variable value
While(true)
{
output_D(x) ; // Display the value in binary
}
}


المتغير (x) هو عدد صحيح integer 8-bit ، يقع بين قيم الأعداد العشرية 0-255 . يمكن رؤية القيمة بالنظام الثنائى عندما يتم إخراجها على منفذ 8 بت .
عموما ، يتم تخزين الأعداد الصحيحة (int) فى لغة السى كقيم 16 بت ، ولكن لغة السى للميكروكونترولر 8 بت تستخدم فى الوضع الافتراضى شكل عدد صحيح 8 بت . فى البرنامج أعلاه ، يتم تخصيص (تعيين) قيمة ابتدائية للمتغير (القيمة 99) ، والذى بعد ذلك فى دالة الإخراج . النقطة هنا هى أن قيمة المتغير يمكن الآن تعديلها دون الحاجة إلى تغيير استدعاء دالة الخرج نفسها .
فى البرنامج ، تم إعلان المتغير (x) 8 بت ، وتخصيص القيمة (99) له باستخدام عامل التساوى. ومن ثم تم إخراجه إلى المنفذ Port D باستخدام دالة الإخراج القياسية .    

رابط الملف :
http://www.mediafire.com/download/98a33ww5fb7u5i6/Lesson1-EX2.zip
   


Admin
Admin

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

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

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

الحلقات Looping

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

الحلقات Looping  
تحتاج معظم تطبيقات الوقت الحقيقى إلى التنفيذ المستمر حتى يتم إيقاف المعالج أو إعادة تشغيله reset . لذلك ، فإن البرنامج بشكل عام يقفز إلى الوراء عند النهاية لتكرار حلقة التحكم الرئيسية . فى لغة السى يمكن تنفيذ باستخدام حلقة "while" كما هو مبين أعلاه .
شرط استمرار تكرار كتلة الكود بين أقواس while المجعدة "{}" يتم حصرها بين الأقواس "( )" التى تأتى بعد الكلمة الخاصة while"" . يتم تنفيذ هذه الكتلة إذا كانت قيمة ، أو نتيجة التعبير ، فى الأقواس "( )" ليست صفرا . فى هذه الحالة ، تكون بواحد , مما يعنى أن الشرط صحيح true دائما ، وتتكرر الحلقة إلى ما لا نهاية .
البرنامج التالى يمثل بشكل مبسط الهيكل العام للتطبيقات المدمجة ، حيث مرحلة التهيئة initialization تكون متبوعة بحلقة تحكم لتكرار لا نهاية له . داخل الحلقة ، يتم تزايد قيمة المتغير "x" ( باستخدام عامل التزايد x++) . . وبالتالى ، عند تنفيذ البرنامج ، يظهر الخرج لعد تصاعدى فى النظام الثنائى . عندما يصل العد للحد الأقصى لقيمة 8 بت (11111111 = 255) ، فإن العد يدور وينتقل إلى الصفر ليبدأ من جديد .          



الكود:


//Lesson1-EX3 Endless Loop
// Program function: Outputs variable count
#include <16F877A.h>

void main()
{
    int x; // Declare variable
   while(TRUE) // Loop endlessly
              {
       output_D(x); // Display value
                   x ++ ; // Increment value
             }
}


ملحوظة :
عند تجربة البرنامج سوف تلاحظ أنه يعمل بسرعة ولن تلاحظه ، لكى تستطيع ملاحظته يجب أن نستخدم دالة تأخير زمنى وهو ما سوف نتعرض له لاحقا .

رابط الملف :
http://www.mediafire.com/download/x31m8uu7j56lqq7/Lesson1-EX3.zip



Admin
Admin

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

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

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

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

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

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