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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:332
قديم 16-02-2012, 10:15 PM المشاركة 1   
افتراضي المكتبة الشاملة للتدريبات العملية المشروحة لبرمجة الميكروكونترولر والمترجم mikroC PR Twitter FaceBook Google+



المكتبة الشاملة للتدريبات العملية المشروحة لبرمجة الميكروكونترولر والمترجم mikroC PRO

مجموعة تدريبات البداية
الغرض :
· كتابة برنامج بسيط لاختبار دائرة التدريبات .
· التعامل مع المتغيرات Variables والحلقات looping والقرارات decisions .

هذه التدريبات تعتبر كمقدمة لبرمجة الميكروكونترولر PIC بلغة السى بأعتبار أن القارىء ليس له خبرة سابقة فى اللغة .

البرنامج الأول :
برنامج بسيط
الغرض من هذا البرنامج هو :
· بيان تتابع أو تسلسل التعليمات .
· التعامل مع أحد المنافذ كسجل 8-bit بكتابة مجموعة المخارج المطلوبة باستخدام الميكروكونترولر PIC16F877A .







كود:
void main( ) // Main Function { TRISD = 0; PORTD = 0XFF; // Switch on outputs }
· العبارة void main : تبين بداية البرنامج الرئيسى والأقواس {…} المصاحبة لها تضم داخلها عبارات البرنامج .
يحتوى هذا البرنامج على عبارتين :
· العبارة الأولى:
TRISD = 0 ;
تعنى : تهيئة (إعداد) جميع أطراف المنفذ PORTD كمخارج .
· العبارة الثانية :
PORTD = 0xFF ;

تعنى إرسال أو كتابة أو جعل جميع أطراف المنفذ PORTD فى الحالة المرتفعة (1) إى عند الجهد +5V . لاحظ أنه للتعبير عن ذلك يتم استخدام مؤثر التساوى " = " , حيث يؤدى إلى نسخ الطرف الأيمن 0xFF إلى الطرف الأيسر PORTD .

الدائرة الكهربية :







تحليل البرنامج :
يقوم البرنامج الرئيسى فقط بتنفيذ العبارة PORTD=0XFF ( FF بالسداسى عشر تساوى 255 بالعشرى وتساوى 0B11111111 بالثنائى ) وهذا يعنى جعل جميع أطراف المنفذ PORTD فى الحالة المرتفعة أى +5V . بالمثل يمكن إنشاء أى توليفة من المخارج .

ملاحظات :
· جميع العبارات يجب أن تنتهى بالفاصلة المنقوطة ";" .
· البرنامج الرئيسى يبدأ بعبارة محددة وهى void main() حيث يتم إحتواء عبارات البرنامج بين قوسين مجعدين {……} .
· يمكن إضافة "تعليقات" إما "بين شرطة مائلة ونجمة (/*...*/) " أو "بعد شرطتين مائلتين (//)وتنتهى بنهاية السطر " .






كود:
/* prog.1: All outputs ON PIC16F877A & 4MHz Eng.F.Abdelaziz http://www.eeecb.com/vb/index.php */ void main( ) // Main Function { //Begin TRISD = 0; // All PORTB pins as outputs PORTD = 0XFF; // Switch ON all outputs } //End
· معنى برنامج لغة السى مستقل عن تنسيق (تصميم) الصفحة . فقط "تتابع الحروف هو المهم بالنسبة للمترجم" . ومع ذلك , عمليا يجب ترتيب كود البرنامج لجعله أكثر سهولة للفهم قدر الإمكان . يمكن استخدام الأماكن الخالية Spaces والفواصل tabs لتنسيق البرنامج فى شكل بلوكات (مجموعات) كل بلوك( مجموعة) يمثل مستوى من مستويات البرنامج , مع وضع أقواس الفتح (البداية) وأقواس الغلق (النهاية) أسفل بعضها بنفس العامود كأزواج متوافقة من الأقواس مما يسهل عملية التحقق من البرنامج. وهذا يجعل تصحيح وتطوير البرنامج أسهل . فائدة التنسيق الجيد يصبح ملحوظا أكثر عنما تصبح البرامج أكثر تعقيدا .
· كتقليد متبع , يتم كتابة البرنامج فى الأساس بالحروف الصغيرة مع استخدام الحروف الكبيرة للكلمات المعروفة المحددة .




البرنامج الثانى :
أساسيات : المتغيرات Variables .

اعلانات

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


البرنامج الثانى :
أساسيات : المتغيرات Variables .

الغرض :
التعامل مع المتغيرات 8-bit variable وإرسالها إلى المخارج وتشمل :
· قراءة بيانات أو وسائل التحكم بالمداخل .
· وعلاجها .
· و تشغيل المخارج حسب المطلوب .

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

المتغيرات :
معظم البرامج تحتاج لمعالجة البيانات بطريقة ما , ونحتاج إلى متغيرات مسماة لحفظ قيمها . اسم المتغير هو لافتة label يرتبط بموقع بالذاكرة حيث يتم حفظ قيمة المتغير (العديد من انواع المتغيرات تحتاج لأكثر من بايت من الذاكرة ) . يجب الإعلان عن (تعريف) "اسم المتغير ونوعه" فى بداية بلوك البرنامج , حتى يستطيع المترجم تخصيص مجموعة المواقع المناظرة . قيم المتغيرات فى الوضع الافتراضى تكون بالنظام العشرى , وللتعبير عنها بنظام السداسى عشر يجب كتابة البادئة "0x" بحيث يمثل العدد 0xFF (السداسى عشر) العدد العشرى 255 , على سبيل المثال .عن تسمية المتغير يمكن فقط استخدام الحروف (a–z, A–Z, 0–9) والشرطة التحتية (كبديل للمسافة الخالية) .
فى البرنامج سوف نستخدم متغير يسمى "x" . وهو عدد صحيح نوع (حرف) char بسعة 8 بت 8-bit أى قيمتة تكون فى المدى 0-255 . يتم "تخصيص" قيمة ابتدائية للمتغير وهى "99" عن طريق "مؤثرالتساوى" "=" , حيث يتم إخراج هذه القيمة على أطراف المنفذ PORTD .



كود:
/* prog.2 Variable PIC16F877A & 4MHz Eng.F.Abdelaziz http://www.eeecb.com/vb/index.php */
char x ; // Declare variable and type
void main() {
TRISD = 0; PORTD = 0;
x = 99; // Assign variable value
PORTD = x; // Display the value in binary }




البرنامج الثالث :
الحلقات Looping :
الغرض :
إنشاء حلقة غير منتهية Endless Loop

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

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


البرنامج الثالث :
الحلقات Looping :
الغرض :
إنشاء حلقة غير منتهية Endless Loop

معظم تطبيقات "الزمن – الحقيقى" تحتاج للتنفيذ باستمرار حتى يتم فصل المعالج أو عمل إعادة reset . لذلك فإن البرنامج عامة عامة يقفز عند النهاية لكى يكرر حلقة التحكم الرئيسية . يمكن تنفيذ ذلك فى لغة السى عن طريق "حلقة while " كما فى هذا البرنامج .



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




ملحوظة :
يمكن إنشاء الحلقة الغير منتهية أما بالعبارة while(1) أو العبارة for(; وكلاهما يعنى التشغيل فى حلقة لا تنتهى (بدون قيد أو شرط ) .


كود:
/* prog.3 endless loop
PIC16F877A & 4MHz
Eng.F.Abdelaziz
http://www.eeecb.com/vb/index.php */
كود:
int x; // Declare variable void main() { TRISD = 0; PORTD = 0 ; x = 0; while(1) // Loop endlessly { PORTD = x ; // Display value x ++ ; // Increment value delay_ms(500); } }
البرنامج الرابع :
التحكم فى تفرع البرنامج عن طريق :
حلقة الشرط باستخدام عبارة IF :


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


البرنامج الرابع :
التحكم فى تفرع البرنامج عن طريق :
حلقة الشرط باستخدام عبارة IF :

إتخاذ القرار Decision Making:
أسهل طريقة لبيان أساس إتخاذ القرار هى "تغيير الخرج بناء على حالة الدخل"

الدائرة الكهربية :



المفتاح يولد دخل على الطرف RC0ويظهر الخرج على الطرف RD0 .

البرنامج :

يتكون البرنامج كالعادة من حلقة “ while ”غير منتهية ولكن تحتوى على عبارة لفصل المنفذ Port D فى الحالة الابتدائية :
PORTD = 0 ; // Clear all outputs
يتم "قراءة حالة الدخل" داخل الحلقة باستخدام التعبير :
x = PORTC.B0; // Get input state
كنتيجة لتنفيذ هذه العبارة يم تخصيص القيمة واحد 1أو صفر 0للمتغير x حسب حالة وضع المفتاح (كما فى الدائرة الكهربية , واحد فى حالة فصل و صفر فى حالة توصيل المفتاح ) .
بعد ذلك يتم "اختبار القيمة بعبارة if " وبناء على النتيجة يتم تحديد الخرج .
لاحظ أن الاختبار يستخدم مؤثر " التساوى المزدوج = =" حتى نفرق بينه وبين " مؤثر التخصيص المستخدم فى العبارة السابقة وهو التساوى المفرد = ".

if(x == 1) PORTD.B0=1 ; // Change output
تأثير البرنامج هو توصيل on الخرج PORTD.B0=1 إذا كان الدخل فى الحالة المرتفعة high أى
x == 1 . بمعنى آخر إذا تحققت عبارة شرط if , الموجودة بين القوسين , يتم تنفيذ العبارة التالية للقوسين .
نحتاج أن يكون المفتاح مغلق قبل تشغيل البرنامج حتى نرى هذا التأثير .
لا يمكن فصل الليد مرة أخرى حتى يتم عمل إعادة للبرنامج restarted .

كود:
/* prog.4 condition loop by IF
PIC16F877A & 4MHz
Eng.F.Abdelaziz
http://www.eeecb.com/vb/index.php */
int x;   // Declare variable
void main()
{
TRISC = 0xFF ; // All pins as inputs
PORTC = 0; // Clear 
TRISD = 0 ; // All pins as outputs
PORTD = 0 ;   // Clear all outputs
      while(1)  // Loop always
      {
       x = PORTC.B0; // Get input state
       if(x == 1)PORTD.B0=1 ; // Change output
       }
}





البرنامج الخامس :
التحكم فى تفرع البرنامج عن طريق :
حلقة الشرط باستخدام عبارة while :


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


البرنامج الخامس :
التحكم فى تفرع البرنامج عن طريق :
حلقة الشرط باستخدام عبارة while :

يمكن أيضا عمل تتابع الشرط عن طريق عبارة while الشرطية .
فى هذا البرنامج يتم اختبار الدخل فى حلقة عبارة شرط ويومض الخرج عندما يكون المفتاح مفتوح ( الدخل فى الحالة المرتفعة) . عندما يتم غلق المفتاح , لا يتم تنفيذ حلقة الوميض ويتم فصل الليد .
يستعرض البرنامج أيضا "دالة التأخير" delay_ms(). فى حالة عدم وجود هذه الدالة فإن تنفيذ الحلقة لن يستغرق سوى مجرد عدة ميكروثوانى , حيث أن كل تعليمة تستغرق 4 μs عند استخدام كريستال بتردد 4 ميجا هرتز , عندئذ فإن وميض الخرج لا يمكن رؤيته . التأخير المطلوب (بالملى ثوانى) يعطى كبارامتر للدالة.






البرنامج السادس :

التكرار باستخدام حلقة for :


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


البرنامج السادس :

التكرار باستخدام حلقة for :
حلقة WHILE تتكرر حتى يتم يحدث حدث خارجى أو داخلى يؤدى إلى تعديل القيمة المحددة بشرط الاختبار . فى حالات أخرى نحتاج لحلقة تتكرر عدد ثابت من المرات . حلقة FOR تستخدم "متغير تحكم بالحلقة" والذة يتم إعداده بقيمة ابتدائية ويتم تعديله عند كل تكرار طالما أن الشرط المحدد صواب true .
فى هذا البرنامج :
تعطى بارامترات التحكم فى الحلقة داخل قوسين يتبعان كلمة FOR . يتم إعداد متغير التحكم فى الحلقة x بقيمة ابتدائية هى الصفر , وتستمر الحلقة "طالما أن قيمته أقل من 5 " . قيمة المتغير x تتزايد بواحد بانتهاء كل حلقة .
التأثير يكون وميض الخرج لخمس مرات .
برنامج حلقة FOR يتضمن أيضا حلقة while " لانتظار غلق المفتاح " قبل أن يبدأ تتابع الوميض .
بالإضاقة إلى ذلك ينتهى البرنانمج بحلقة while الغير مشروطة لتمنع تنفيذ البرنامج من مواقع غير محددة بعد نهاية التتابع . وهو ما ينصح به أينما وجد برنامج لا يعمل فى حلقة مستمرة .
لاحظ أن استخدام الأقواس الفارغة , والتى لا تحتوى على كود , أمر إختيارى optional. أو بمعنى آخر "لا يتم تنفيذ أى تعليمة والانتظار طالما أن الشرط صواب . عندما يكون المفتاح مفتوح يكون طرف الدخل فى الحالة المرتفعة ويتحقق الشرط وينتظر البرنامج . عند غلق المفتاح يتحول طرف الدخل إلى الحالة المنخفضة ويصبح الشرط غير صواب , عندئذ يخرج البرنامج من حلقة while المشروطة ويبدأ تنفيذ تتابع الوميض .





m a g
:: مهندس متواجد ::
تاريخ التسجيل: Aug 2010
الدولة: مصطفى
المشاركات: 51
نشاط [ m a g ]
قوة السمعة:0
قديم 17-02-2012, 01:19 AM المشاركة 7   
افتراضي


جذاك الله كل خير


Emad Omar
:: مهندس ::
تاريخ التسجيل: Feb 2012
المشاركات: 9
نشاط [ Emad Omar ]
قوة السمعة:0
قديم 17-02-2012, 07:44 AM المشاركة 8   
ha


البرنامج الرابع :
التحكم فى تفرع البرنامج عن طريق :
حلقة الشرط باستخدام عبارة IF :

إتخاذ القرار Decision Making:
أسهل طريقة لبيان أساس إتخاذ القرار هى "تغيير الخرج بناء على حالة الدخل"

الدائرة الكهربية :



المفتاح يولد دخل على الطرف RC0ويظهر الخرج على الطرف RD0 .

البرنامج :



يتكون البرنامج كالعادة من حلقة “ while ”غير منتهية ولكن تحتوى على عبارة لفصل المنفذ Port D فى الحالة الابتدائية :
PORTD = 0 ; // Clear all outputs
يتم "قراءة حالة الدخل" داخل الحلقة باستخدام التعبير :
x = PORTC.B0; // Get input state
كنتيجة لتنفيذ هذه العبارة يم تخصيص القيمة واحد 1أو صفر 0للمتغير x حسب حالة وضع المفتاح (كما فى الدائرة الكهربية , واحد فى حالة فصل و صفر فى حالة توصيل المفتاح ) .
بعد ذلك يتم "اختبار القيمة بعبارة if " وبناء على النتيجة يتم تحديد الخرج .
لاحظ أن الاختبار يستخدم مؤثر " التساوى المزدوج = =" حتى نفرق بينه وبين " مؤثر التخصيص المستخدم فى العبارة السابقة وهو التساوى المفرد = ".

if(x == 1) PORTD.B0=1 ; // Change output
تأثير البرنامج هو توصيل on الخرج PORTD.B0=1 إذا كان الدخل فى الحالة المرتفعة high أى
x == 1 . بمعنى آخر إذا تحققت عبارة شرط if , الموجودة بين القوسين , يتم تنفيذ العبارة التالية للقوسين .
نحتاج أن يكون المفتاح مغلق قبل تشغيل البرنامج حتى نرى هذا التأثير .
لا يمكن فصل الليد مرة أخرى حتى يتم عمل إعادة للبرنامج restarted .

كود:
/* prog.4 condition loop by IF
PIC16F877A & 4MHz
Eng.F.Abdelaziz
http://www.eeecb.com/vb/index.php */
int x;   // Declare variable
void main()
{
TRISC = 0xFF ; // All pins as inputs
PORTC = 0; // Clear 
TRISD = 0 ; // All pins as outputs
PORTD = 0 ;   // Clear all outputs
      while(1)  // Loop always
      {
       x = PORTC.B0; // Get input state
       if(x == 1)PORTD.B0=1 ; // Change output
       }
}





البرنامج الخامس :
التحكم فى تفرع البرنامج عن طريق :
حلقة الشرط باستخدام عبارة while :

السلام عليكم ورحمة الله وبركاته
شُكراً لك أخي .. أفدتني بشرحك .. فأنا لا ازال مُبتدى في هذا ^_^

لكن ظهرت لي مُشكلة عندما قُمت بتطبيق الدرس الرابع في برنامج mikroC compiler for PIC

وهذه هي رسالة الخطأ اللتي تظهر عندما أقوم بالبناء ..
Operator [.] not applicable to this operands [PORTC]l
Operator [.] not applicable to this operands [PORTC]l

إضافة رد

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

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

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


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

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