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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:334
قديم 08-03-2011, 08:24 PM المشاركة 1   
افتراضي التدريبات العملية لبرمجة الميكروكونترولر PIC بلغة السى : التدريب الأول Tutorial 1 Twitter FaceBook Google+



التدريبات العملية لبرمجة الميكروكونترولر PIC بلغة السى : التدريب الأول Tutorial 1


1- الغرض من التدريب :
  • التعرف على الخطوات المتبعة لتصميم مشروع ناجح .
· كتابة رأس (مقدمة) header البرنامج .
· تهيئة (إعداد) أطراف الدخل والخرج configuring I/O pins.
· استخدام دالة التأخير delay function .
· استخدام التعليمات switch….. case….break .

2- الغرض من البرنامج :
الغرض الوحيد من هذا البرنامج هو إضاءة دايودات مشعة للضوء LEDs متصلة بالمنفذ PORT B .تسمى هذه العملية برمجيا " كتابة بيانات على المنفذ PORT B "
على أى حال ، يمكنك استخدام هذا المثال لدراسة شكل البرنامج الحقيقى.

3- مخطط الدائرة الكهربية :








4- وصف البرنامج
عند توصيل الدائرة بالقدرة فإن كل ليد متصل بالمنفذ PORT Bسوف يشع ضوء (يضىء) ، مما يدل على أن الميكروكونترولر متصل بشكل صحيح ويعمل بشكل طبيعى.


أ‌- رأس (مقدمة) البرنامج Header
  • هذا المثال يبين (يصف) كتابة رأس (مقدمة ) البرنامج بالشكل الصحيح. وهو نفس الرأس المستخدم
فى جميع البرامج المشروحة (الموصوفة) في جميع التدريبات ولتلافى التكرار، فإنه لن يكتب الرأس فى التدريبات التالية ولكن نعتبر أنه موجود في بداية كل برنامج وسوف نذكر به فقط بوضح كلمة 'الرأس' ‘Header’ .
  • يوضع الرأس (المقدمة ) Header فى بداية البرنامج ويعطى المعلومات الأساسية على شكل
تعليقات comments ( اسم البرنامج – الإصدار – التاريخ .....ألخ ) . لا تستهين الآن بهذه المفكرات فسوف تحتاجها بعد ذلك .
  • تعليقات الرأس مكونة من عدة أسطر لذلك نبدأها برمز بدايتها /*) ) وفى نهاية أسطر الرأس نضع رمز نهايتها ( */) .






ب‌- جسم البرنامج الرئيسى :
  • يبدأ البرنامج الرئيسى دائما بدالة تسمى الدالة الرئيسية وصيغتها كما يلى :
void main( ) {………} حيث يتم وضع جسم البرنامج داخل الأقواس المجعدة .
  • الخطوة الأولى فى جسم البرنامج هى تهيئة المنافذ المستخدمه : فى هذا التدريب نستخدم المنفذ PORTB للميكروكونترولر PIC16F887 , أطراف هذا المنفذ لها أكثر من وظيفة ولإعداده لكى يعمل " كمداخل أو كمخارج رقمية" يجب مسح السجل ANSEL " اختيار المداخل التناظرية المنخفضة" والسجل ANSELH "اختيار المداخل التناظرية المرتفعة" . أى نكتب :
ANSEL = 0; و ANSELH = 0;

ملحوظة : فى حالة استخدام الميكروكونترولر PIC16F84 أو PIC16F877 (على سبيل المثال) لن تحتاج إلى ذلك لأن المنفذ PORT B هو فى الأساس يستخدم "كمداخل أو مخارج رقمية" فلا يحتوى على مداخل تناظرية .
  • الخطوة الثانية : بعد أن تأكدنا أن المنفذ PORT B يعمل "كمداخل أو كمخارج " يلزم علينا تحديد إتجاه البيانات " مداخل" (للقراءة منها ) أو "مخارج " (للكتابة عليها . السجل المختص بهذا الخيار هو سجل التحكم فى اتجاه المنفذ وهو فى حالتنا TRISB . البرنامج يستخدم جميع أطراف المنفذ PORT B كمخارج لذلك يجب وضع جميع خانات سجل التحكم TRISB بأصفار أى TRISB = 0
  • الخطوة الأخيرة هى كتابة البيانات المطلوبة على المنفذ حسب المطلوب . فى هذا التدريب المطلوب هو إضاءة الليدات الفردية فقط , لذلك نجعل الخانة المناظرة لليد المضىء فى الحالة المرتفعة (1) فنحصل على هذا الطرف 5V تسبب إضاءة الليد (يتصل على التوالى بمقاومة هبوط جهد مناسبة وأنوده (مصعده) متصل بالجهد الموجب) . لذلك نكتب النمودج المطلوب على المنفذ PORT B بالطريقة الآتية : PORTB = 0b01010101;
ملاحظة :
  • لا تنسى الفاصلة المنقوطة بعد نهاية كل أمر .
  • تحتوى بعض الأسطر على النوع الثانى من التعليقات والذى يبدأ بارمز (//) وحتى نهاية السطر .






شكل البرنامج بالكامل :





5- تطوير البرنامج :
لجعل هذا المثال أكثر إفادة فسوف نمكن الليدات المتصلة بالمنفذ POIRT B من الوميض .

اعلانات

e-obsessed
:: عضو .. ::
تاريخ التسجيل: Feb 2010
الدولة: alger
المشاركات: 126
نشاط [ e-obsessed ]
قوة السمعة:0
قديم 08-03-2011, 08:29 PM المشاركة 2   
افتراضي


جزاك الله الف خير

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:334
قديم 08-03-2011, 10:34 PM المشاركة 3   
افتراضي


1- تطوير البرنامج :






لجعل هذا المثال أكثر إفادة فسوف نمكن الليدات المتصلة بالمنفذ POIRT B من الوميض .

يتم ذلك بالطريقة الآتية :
أ‌- بمجرد تشغيل الميكروكونترولر سوف ينبعث الضوء من جميع الليدات لمدة ثانية . دالة التأخير Delay هى المسؤولة عن ذلك في البرنامج. مطلوب منك فقط تحديد (تعيين) التعبير عن التأخير بالملى ثانية .
ب‌- بعد ثانية واحدة يدخل البرنامج حلقة for ويظل فيها (حلقة تلو الأخرى ) طالما كان متغير الحلقة k أقل من 20 . يزداد المتغير بواحد فى كل حلقة تكرار . فى داخل حلقة for تقوم تعليمة switch بمراقبة (رصد) الحالة المنطقية للمنفذ PORT B . فإذا كان PORTB=0Xff ( كل أطراف المنفذ آحاد أى جميع الليدات مضيئة) فإن حالته تنعكس إلى 0x00 ( كل الليدات تنطفىء) والعكس بالعكس .يؤدى ذلك إلى وميض الليدات on-off-on-off-…... دورة الخدمة تكون 5:1(500mS:100mS)أى 100 ملى ثانية تشغيل و 500 ملى ثانية فصل .
ت‌- عندما يخرج البرنامج من حلقة for تتغير الحالة المنطقية للمنفذ PORT Bلتكون بالنموذج الثنائى
(0xb 01010101)(تعنى إضاءة الليدات الفردية) ويدخل البرنامج حلقة while اللانهائية (الغير منتهية) ويظل فيها طلما أن 1 = 1 . الحالة المنطقية لخانات المنفذ PORT B تنعكس كل 200Ms فينتج وميض على شكل تحول بين إضاءة الليدات و الليدات الزوجية .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:334
قديم 08-03-2011, 10:35 PM المشاركة 4   
افتراضي


تفاصيل الخطوات :
  • كتابة رأس البرنامج :
// Header

  • الإعلان عن متغير حلقة for وهو من نوع "عدد صحيح" int واسمه k قبل استخدامه (لا تنسى الفاصلة المنقوطة)
int k;

  • نبدأ كأى برنامح بتعبير الدالة الرئيسية
void main( ) {
  • تهيئة المنافذ : فى هذا البرنامج نستخدم الميكروكونترولر PIC16F887 ولن نستخدم سوى المداخل / المخارج الرقمية ونظرا لأننا سوف نستخدم المنفذ PORT B وهو يحتوى على مداخل تماثلية لذلك يجب جعل سجلات اختيار المداخل التماثلية ANSEL و ANSELH بأصفار كما يلى :
ANSEL = 0; // All I/O are configured as digital




ANSELH = 0;
  • باقى تهيئة وإعداد المنافذ : ينصح بتعيين الحالة الابتدائية لمنقذ الخرج PORTB وفى هذا البرنامج نبدأ والليدات مضاءة لذلك نجعل جميع خانات المنفذ PORTB والمتصلة بالليدات فى الحالة المرتفعة أى 0Xff = 0b11111111
PORTB = 0xFF; // Reset port B
  • ولتعيئة (إعداد) جميع خانات المنفذ PORTB كمخارج يجب جعل جميع خانات سجل التحكم فى المنفذ TRISB بأصفار
TRISB = 0; // Port B pins are configured as outputs
  • الأن جميع الليدات مضاءة ، ننتظر فى هذه الحالة لمدة ثانية (1000ملى ثانية) باستخدام دالة التأخير الزمنى
Delay_ms(1000); // 1 s delay
  • بعد انقضاء زمن التأخير يتم أطفاء الليدات بجعل خانات المنفذ PORTB بأصفار
PORTB = 0;








  • المطلوب تكرار ما سبق لعدد معين من المرات لنحصل على وميض لجميع الليدات عدد من المرات وليكن 20 مرة (لاحظ أنه قد تم تنفيذ مرة واحدة ومتبقى 19 مرة ) .لتنفيذ ذلك نستخدم حلقة تكرار for والمتغير k والتى تحتوى على 3 معاملات أو أدلة :
المعامل الأول k=1 وهو القيمة الابتدائية لعداد تكرار الحلقة (أى العداد يبدأ من الرقم 1 وذلك لأننا قد نفذنا العمل مرة بالفعل وباقى 19 مرة ).
المعامل الثانى : شرط انتهاء (الخروج من )الحلقة وهو k<20 ليكون عدد مرات تكرار الحلقة هو 19 مرة أى 1<k<20 .
المعامل الثالث : الفعل الذى يتم بعد عمل حلقة واحدة وهو k++ ويعنى زيادة المتغير k بقيمة 1 بعد كل حلقة . وبعد القوس { يبدأ تعليمات البرنامج المطلوب تنفيذها داخل كل حلقة .

for(k=1; k<20; k++) // Remain in the loop as long as 1<k<20 ,


{ // k is incremented by 1 after each iteration
  • داخل حلقة for نستخدم عبارة switch الشرطية : بعد كلمة switch نجد بين قوسين المتغير موضع المراقبة ففى هذا البرنامج فإن switch تراقب حالة المنفذ PORTB وتبعا لذلك يكون أمامنا حالات خيارات متعددة باستخدام case والتى يأتى بعدها ثابت "فأن تطابق هذا الثابت مع حالة متغير switch يتم تنفيذ برنامج هذه الحالة . تبدأ الخيارات بعد القوس { .
switch (PORTB) { // Switch operator monitors port B state
  • الحالة الأولى عندما يكون متغير switch وهو PORTB بصفر أى مطابق للثابت الذى يلى case يتم تنفيذ التعليمة المرفقة والموجودة بعد نقطتى التنصيص وهى جعل جميع خانات المنفذ PORTB فى الحالة المرتفعة أى إضاءة الليدات أى تغيير حالة المنفذ.
case 0x00: PORTB = 0XFF; // If PORTB=0 , change its state

// into 0Xff , and provide 100mS delay

  • التأخير لفترة 100 ملى ثانية ضمن برنامج case 0x00 أى أضاة لمدة 100 ملى ثانية
Delay_ms(100);
  • ننهى مجموعة التعليمات التى تتبع case 0x00 بعبارة break .
break;
  • الحالة الثانية : تحدث فى الحلقة التالية عندما يكون متغير switch مطابق للثابت 0XFF الذى يلى case يتم تنفيذ التعليمة الموجودة بعد نقطتى التنصيص وهى جعل خانات المنفذ PORTB بأصفار , بعبارة أخرى عندما تكون الليدات مضاءة يتم تغير حالتها إلى المطفأة .
case 0xFF: PORTB = 0x00 // If PORTB=0Xff , change its state
  • التأخير لمدة 500 ملى ثانية ضمن case 0xFFأى أطفاء لمدة 500 ملى ثانية . ننهى case وفى نفس الوقت ننهى switch بقوس النهاية }
Delay_ms(500); } // into 0 , and provide 500mS delay
  • ننهى حلقة for بالقوس }
} // End of for loop














ماذا بعد وميض جميع الليدات 20 مرة ؟


نقوم بعمل مثال لنموذج إضاءة مركب من مزيج من الخانات كما يلى :
  • وضع (تحميل) النموذج المطلبوب فى المنفذ PORTB فى الشكل الثنائى , الواحد يعنى أضاءة الليد المتصل بهذا الطرف بينما الصفر يعنى ان الليد مطفأ .
PORTB = 0b01010101; // Binary combination on port B
  • إنشاء حلقة غير منتهية باستخدام العبارة while(1) ويبدأ البرنامج المطلوب تنفيذه بالقوس {
while(1) { // Endless loop
  • استخدم مؤثر العاكس ~ فى عكس جميع خانات المنفذ PORTB أى عكس حالة إضاءة الليدات
PORTB = ~ PORTB; //Invert port B logic state
  • التأخير لفترة 200 ملى ثانية
Delay_ms(200); // 200mS delay
  • نهاية حلقة while وتتكرر إلى مالانهاية }
}
  • نهاية البرنامج }
}






chouta
:: مهندس ::
تاريخ التسجيل: Mar 2010
المشاركات: 18
نشاط [ chouta ]
قوة السمعة:0
قديم 09-03-2011, 11:40 AM المشاركة 5   
افتراضي


شروحات واضحة اكمل اخي وفقك الله


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:334
قديم 09-03-2011, 12:47 PM المشاركة 6   
افتراضي


شروحات واضحة اكمل اخي وفقك الله
اخى الكريم

شكرا جزيلا لك

بارك الله فيك

مع تمنياتى بدوام التوفيق


المغترب63
:: مهندس ::
تاريخ التسجيل: Oct 2010
الدولة: الحلة-فرنسا
المشاركات: 49
نشاط [ المغترب63 ]
قوة السمعة:0
قديم 09-03-2011, 04:12 PM المشاركة 7   
افتراضي


التدريبات العملية لبرمجة الميكروكونترولر
فى هذا التدريب نستخدم المنفذ [/FONT]
PORTB للميكروكونترولر PIC16F887 , أطراف هذا المنفذ لها أكثر من وظيفة ولإعداده لكى يعمل " كمداخل أو كمخارج رقمية" يجب مسح السجل ANSEL " اختيار المداخل التناظرية المنخفضة" والسجل ANSELH "اختيار المداخل التناظرية المرتفعة" . أى نكتب :
[/LIST]ANSEL = 0; و ANSELH = 0;

.[/FONT][/COLOR][/B][/SIZE]
سؤال يرحمك الله:
فاذا أردناها كمداخل أو مخارج تناضرية فماذا نكتب في مسجلات الANSEL, ANSELH
و شكرا جزيلا على كل ماتقدمونه


الصورة الرمزية mouurad
mouurad
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
المشاركات: 134
نشاط [ mouurad ]
قوة السمعة:0
قديم 09-03-2011, 04:16 PM المشاركة 8   
افتراضي


جزاك الله الف خير

إضافة رد

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

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

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


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

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