منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

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

اذهب الى الأسفل

أساسيات برمجة السلسلة PIC16 بلغة السى مع المترجم CCS C  : Empty أساسيات برمجة السلسلة 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 باستخدام دالة الإخراج القياسية .    

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


Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

أساسيات برمجة السلسلة PIC16 بلغة السى مع المترجم CCS C  : Empty الحلقات 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
             }
}


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

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



Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

الرجوع الى أعلى الصفحة


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