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

   

الصورة الرمزية fathi-mohmed
fathi-mohmed
:: مهندس متميز ::
تاريخ التسجيل: Aug 2010
الدولة: القاهرة
المشاركات: 513
نشاط [ fathi-mohmed ]
قوة السمعة:
قديم 20-02-2013, 10:41 PM المشاركة 25   
افتراضي



أخي الكري مهندس فتح الله
شكرا جزيل لك
يوفكك الله

اعلانات

sofien.j
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
الدولة: tunisia
المشاركات: 83
نشاط [ sofien.j ]
قوة السمعة:
قديم 20-02-2013, 11:09 PM المشاركة 26   
افتراضي


السلام عليكم و رحمة الله
هل لك استاذنا العزيز ان تقدم لنا
هذه المعلومات القيمة في صيغة pdf
و لك الشكر الجزيل

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

امل ميمو
:: مهندس متميز ::
تاريخ التسجيل: Mar 2007
المشاركات: 466
نشاط [ امل ميمو ]
قوة السمعة:
قديم 21-02-2013, 12:16 AM المشاركة 27   
افتراضي


السلام عليكم و رحمة الله
هل لك استاذنا العزيز ان تقدم لنا
هذه المعلومات القيمة في صيغة pdf
و لك الشكر الجزيل
اخي لو تكرمت نفس الطلب وانا اظن ان هناك بقيه للدروس القيمه التي تقدمها في هذا الموضوع بارك الله فيك


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-02-2013, 02:31 AM المشاركة 28   
افتراضي


السلام عليكم

شكرا جزيلا لجميع الأخوة الأفاضل المشاركين

للعلم : ترجمة الكتاب وإعدادة والمشاركة يجرى أولا بأول .
مع تمنياتى بدوام التوفيق


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-02-2013, 02:33 AM المشاركة 29   
افتراضي


1-7 عبارات التحكم Control Statements :
تستخدم عبارات التحكم فى السيطرة على سريان تنفيذ البرنامج . تستخدم عبارات "if / else" لتفريع العملية فى واحد من اتجاهين . وتستخدم عبارات "while" و "do /while" و "for" للتحكم فى تكرار مجموعة (بلوك) من التعليمات . وتستخدم عبارات "switch / case" بالسماح "بقرار واحد" بتوجيه سريان البرنامج إلى واحد من مجموعات التعليمات الكثيرة المحتملة , بشكل مختصر.

1-7-1 حلقة While :
هذه الحلقة هى أحد أهم عناصر التحكم الأساسية .
صيغة عبارة while كما يلى :

كود:
while (expression) statement ; or while (expression) { statement1 ; statement2 ; …………… }


عندما يدخل تنفيذ البرنامج إلى قمة حلقة while , يتم "تقييم" التعبير (expression) . فإذا كانت نتيجة التعبير "صواب" TRUE ( غير الصفر) , عندئذ يتم تنفيذ العبارات الموجودة داخل حلقة while . عبارات حلقة while هى سطور الكود المحاطة بالقوسين "{ }" التابعين لعبارة while . أو , فى حالة حلقة while بعبارة واحدة , تكون هى العبارة التى تلى عبارة while . عندما يصل التنفيذ إلى قاع الحلقة , يعود سريان البرنامج إلى قمة حلقة while , حيث يتم اختبار التعبير مرة أخرى . طالما أن التعبير يكون "صواب"TRUE يتم تنفيذ الحلقة . وحينما يكون "تقيييم" التعبير "غير صواب" FALSE , يتم تمرير (تخطى) الحلقة بالكامل ويستمر تنفيذ البرنامج من عند أول عبارة تلى حلقة while .
مثال :

كود:
#include <16F877.h> //register definition file for #fuses HS,NOWDT //a Microchip PIC16F877 #use delay(clock=10000000 //setup the RS232 port for standard output #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8) #include <stdio> void main(void) { char c; c = 0; printf("Start of program \n") ; while(c < 100) //if c less than 100 then … { printf("c = %d\n" , (int)c) ; //print c's value each //time through the loop c++ ; // increment c } printf(" End of program \n"); //indicate that the //program is finished while(1) //because 1 is always TRUE , then just sit here ; }

فى هذا البرنامج :
  • يتم تهيئة "c" بالقيمة "0" وطباعة النص "Start of program" .
  • بعد ذلك سوف يتم تنفيذ حلقة while , لطباعة قيمة "c" فى كل تكرار حيث "c" تتزايد من "0" إلى "100" . عندما تصل "c" إلى القيمة "100" , فإنها لم تعد بعد أقل من "100" ويتم تمرير (الخروج) حلقة while .
  • يتم طباعة النص " End of program " ويظل البرنامج مستقر إلى الأبد فى عبارة while(1) وظيفة عبارة while(1) يجب أن تكون وضحت الآن . لأن الواحد "1" هو التعبير المطلوب تقيمه وهو ثابت ( الواحد دائما غير صفرى ولذلك يعتبر TRUE ) , فإن حلقة while , حتى لو لم يكن بها تعليمات كما فى هذا المثال , يتم الدخول إليها ولن يتم مغادرتها إلى الأبد لأن الواحد دائما يتم تقيمه TRUE . فى هذه الحالة تستخدم while(1) لإيقاف التنفيذ عن طريق تنفيذ الحلقة إلى مالانهاية .
لاحظ أيضا أضافة (int) "عدد صحيح" إلى المتغير "c" داخل الدالة printf( ) , بداخل حلقة while . هذا ضرورى لأن الدالة printf( ) فى الكثير من مترجمات لغة السى المدمجة تتعامل فقط مع متغيرات بحجم العدد الصحيح بطريقة صحيحة .
يمكن أيضا استخدام حلقة while لانتظار وقوع حدث بالمنفذ المتوازى كما يلى :


كود:
void main(void) { while(input_b( ) & 0x02 // hangs here waiting while the ; // bit 1 of port B is high While(1) //because 1 is always TRUE , then just set here … ; }


فى هذا المثال تستخدم حلقة while فى انتظار وصول بت إلى الحالة المنخفضة . التعبير المطلوب تقييمه هو "input_b( ) & 0x02" , والذى سوف "يخفى" mask جميع البتات ماعدا البت الثانية (bit 1 ) من البيانات التى يتم قراءتها من المنفذ port B . عندما تكون هذه البت عند المنطق "1" , سوف تكون نتيجة التقييم غير صفرية (TRUE) , ولذلك يظل البرنامج فى حلقة while حتى تتحول القيمة بالبت الثانية إلى الحالة المنخقضة أو الصفر "0" .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-02-2013, 02:36 AM المشاركة 30   
افتراضي



1-7-2 حلقة do / while :
حلقة do / while تشبه إلى حد بعيد حلقة while , ماعدا أن التعبير يتم اختباره بعد تنفيذ الحلقة لمرة واحدة. هذا يعنى أن التعليمات بحلقة do / while دائما يتم تنفيذها مرة واحدة قبل القيام بالاختبار لتحديد البقاء فى الحلقة من عدمه . فى بناء حلقة while , يتم الاختبار "قبل" تنفيذ تعليمات الحلقة ولا حتى لمرة واحدة .
شكل عبارة do / while كما يلى :

كود:
do statement ; or do { statement1; statement2; …………… }while(expression);

عندما يصل التنفيذ إلى قاع حلقة do / while , يتم تقييم التعبير . إذا كانت نتيجة تقييم التعبير "صواب" TRUE (غير صفرى) , عندئذ يعود سريان البرنامج إلى قمة حلقة do / while . فى كل مرة يصل فيها التنفيذ قاع الحلقة , يتم اختبار التعبير مرة أخرى . طالما أن تقييم التعبير "صواب" TRUE , يتم تنفيذ الحلقة , لكن عندما يكون تقييم التعبير "غير صواب" FALSE , فإن البرنامج يستمر مع التعليمات التى تلى بناء الحلقة .
البرنامج السابق , بعد كتابته ببناء do / while يكون بالشكل التالى :


كود:
#include <16F877.h> //register definition file for #fuses HS,NOWDT //a Microchip PIC16F877 #use delay(clock=10000000 //setup the RS232 port for standard output #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8) #include <stdio> void main(void) { char c; c = 0; printf("Start of program \n") ; do { printf("c = %d\n" , (int)c) ; //print c's value each //time through the loop c++ ; // increment c } while(c < 100); //if c less than 100 then //repeat the operation printf(" End of program \n"); //indicate that the //program is finished while(1) //because 1 is always TRUE , then just sit here ; }

فى هذا المثال , يتم تهيئة المتغير "c" بالقيمة "0" , وطباعة النص "Start of program". بعد ذلك يتم تنفيذ حلقة do / while , ليتم طباعة قيمة المتغير "c" فى كل تكرار كلما تزايد من "0" إلى "100" . عندما يصل المتغير "c" إلى القيمة "100" , أى لم يعد بعد أقل من "100" يتم الخروج من حلقة do / while . يتم طباعة النص "End of program" ويظل البرنامج منتظرا فى مكانه إلى الأبد فى عبارة while(1) .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-02-2013, 02:39 AM المشاركة 31   
افتراضي


-7-3 حلقة for :
يستخدم بناء حلقة for عادة لتنفيذ عبارة أو مجموعة عبارات لعدد معين من المرات . يمكن وصف حلقة for على أنها : "تهيئة" initialization , و "اختبار" test , و "فعل" action بناء على هذا هذا الاختبار .
شكل عبارة حلقة for كما يلى :


كود:
for (expr1 ; expr2 ; expr3 ) statement ; or for (expr1 ; expr2 ; expr3 ) { statement ; statement ; …………. }

التعبير expr1 : سوف يتم تنفيذه "مرة واحدة فقط" عند الدخول إلى حلقة for . التعبير expr1 عادة يكون "عبارة تخصيص" والتى يمكن استخدامها لتهيئة الشروط بالتعبير expr2 .
التعبير expr2 : هو "عبارة تحكم شرطى" تستخدم لتحديد إلى متى يتم البقاء فى حلقة for .
التعبير expr3 : هو : "تخصيص" آخر والذى يمكن استخدامه لتحقيق تعبير الشرط expr2 .
عندما يدخل تنفيذ البرنامج إلى قمة حلقة for , يتم تنفيذ التعبير expr1 . بعد ذلك يتم تقييم التعبير expr2 وإذا كانت نتيجة تقييم التعبير expr2 "صواب" TRUE (غير صفرى) , عندئذ يتم تنفيذ العبارات الموجودة بداخل حلقة for ويبقى البرنامج فى الحلقة . عندما يصل التنفيذ إلى قاع بناء حلقة for , يتم تنفيذ التعبير expr3 , ويعود سريان البرنامج إلى قمة حلقة for , حيث يتم اختبار التعبير expr2 مجددا . طالما أن التعبير expr2 "صواب" TRUE , يتم تنفيذ الحلقة . عندما يكون التعبير expr2 "غير صواب" FALSE , يتم تمرير (تخطى) الحلقة بالكامل .
يمكن تمثيل بناء حلقة for بحلقة while كما يلى :


كود:
expr1 ; while(expr2) { statement1; statement2 ; ……. expr3 ; }
مثال :

كود:
#include <16F877.h> //register definition file for #fuses HS,NOWDT //a Microchip PIC16F877 #use delay(clock=10000000 //setup the RS232 port for standard output #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8) #include <stdio> void main(void) { char c; printf("Start of program \n") ; for(c = 0; c < 100; c++) //if c less than 100 then { printf("c = %d\n" , (int)c) ; //print c's value each time // through the loop // c++ is executed before the //loop returns to top printf(" End of program \n"); //indicate that the //program is finished while(1) //because 1 is always TRUE , then just sit here ; }

فى هذا المثال , يتم طباعة النص "Start of program". بعد ذلك يتم تهيئة المتغير "c" للقيمة "0" داخل بناء حلقة for . ثم يتم تنفيذ حلقة for , بطباعة قيمة المتغير "c" عند كل تكرار كلما تزايد المتغير "c" من "0" إلى "100" , أيضا داخل بناء حلقة for . عندما يصل المتغير "c" إلى القيمة "100" , عندئذ هو لم يعد بعد أقل من "100" ويتم تمرير (تخطى) حلقة for . بعد ذلك يتم طباعة النص
" End of program" , ويبقى البرنامج فى مكانه إلى الأبد فى عبارة while(1) .

1-7-4 عبارات if / else :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-02-2013, 03:03 AM المشاركة 32   
افتراضي



1-7-4 عبارات if / else :
تستخدم عبارات if / else فى تفريع عمل البرنامج بناء على تقييم "عبارة شرط" .
عبارة if :
عبارة if تكون بالشكل التالى :

كود:
if (expression) statement ; or if (expression) { statement1 ; statement2 ; ………… }

إذا كانت نتيجة تقييم التعبير expression "صواب" TRUE (غير صفرى) , عندئذ يتم تنفيذ العبارة أو مجموعة العبارات . وإلا , إذا كانت نتيجة تقييم التعبير expression "غير صواب" FALSE عندئذ يتم تخطى التعليمة أو مجموعة التعليمات .
عبارة if / else :
عبارة if / else تكون بالشكل التالى


كود:
if (expression) statement1 ; else statement2 ; or if (expression) { statement1 ; statement2 ; ………… } else { statement3 ; statement4 ; ………… }

عبارة else تضيف ميزة محددة لسريان البرنامج وهى أن العبارة أو مجموعة العبارات المرتبطة مع else سوف يتم تنفيذها فقط إذا كانت نتيجة التعبير expression "غير صواب" FALSE . سوف يتم تخطى مجموعة العبارات إذا كانت نتيجة التعبير expression "صواب"TRUE . عبارة else يجب أن تلى عبارة if المرتبطة معها .
الصيغة التالية تبين تقنية البرمجة الشائعة لعبارات if / else "المتتالية أو المتعاقبة" لأنشاء شجرة (هيكل) اختيار :

كود:
if (expr1) statement1; else if (expr2) statement2; else if (expr3) statement3; else statement4;

هذا التتابع من عبارات if / else سوف "يختار وينفذ" عبارة واحدة فقط . إذا كان تقييم التعبير الأول expr1 "صواب" TRUE, عندئذ سوف يتم تنفيذ العبارة الأولى statement1 وتمرير العبارات الأخرى . إذا كانت تقييم التعبير الأول expr1 "غير صواب" FALSE , عندئذ يتم تنفيذ العبارة التالية وهى if(expr2) . وإذا كان تقييم التعبير الثانى expr2 "صواب" TRUE , عندئذ يتم تنفيذ العبارة الثانية statement2 وتمرير العبارات الأخرى , وهكذا . إذا كانت جميع التعبيرات expr1 , exper2 , exper3 "غير صواب" FALSE , عندئذ يتم تنفيذ العبارة statement4 .

مثال يبين عمل if / else :


كود:
#include <16F877.h> //register definition file for #fuses HS,NOWDT //a Microchip PIC16F877 #use delay(clock=10000000 //setup the RS232 port for standard output #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8) #include <stdio> void main(void) { char c; printf("Start of program \n") ; for(c = 0; c < 100; c++) //while c less than 100 then { if (c < 33) printf("0<c<33 "); //use if/else to show the rang of else if( ( c>32) && (c < 66 ) ) //numbers that c is in printf("32<c<66 " ) ; else printf("66<c<100 "); printf("c= %d\n",(int)c; //print c's value each time //through the loop } printf(" End of program \n") ; // indicate that the program is finished while(1) //because 1 is always TRUE , then just sit here ; }


فى هذا البرنامج : يتم طباعة النص "Start of program" وتهيئة المتغير "c" بالصفر "0" داخل بناء حلقة for . بعد ذلك يتم تنفيذ حلقة for , لطباعة قيمة المتغير "c" عند كل تكرار كلما تزايد المتغير "c" من "0" إلى "100", أيضا داخل بناء حلقة for .
إذا كانت قيمة المتغير "c" أقل من "33" , عندئذ يتم طباعة النص "0<c<33" . إذا كانت قيمة المتغير "c" بين "33" و "66" يتم طباعة النص "32<c<66" . إذا لم تكن قيمة المتغير "c" فى أى من الحالتين السابقتين , يتم طباعة النص "66<c<100" .
عندما تصل قيمة المتغير "c" إلى "100" , فإنها لم تعد بعد أقل من "100" , ويتم تمرير (تخطى) حلقة for . بعد ذلك يتم طباعة النص " End of program" , ويبقى البرنامج إلى الأبد فى عبارة while(1) .
باستخدام الأبنية والتقنيات التى تم تناولها حتى الآن , من الممكن إنشاء برنامج يختبر بكفاءة كل بت من منفذ الدخل وطباعة رسالة تفيد بحالة البت :


كود:
#include <16F877.h> //register definition file for #fuses HS,NOWDT //a Microchip PIC16F877 #use delay(clock=10000000 //setup the RS232 port for standard output #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=RS232,bits=8) #include <stdio> #define test_port input_b() void main(void) { unsigned char cnt , bit_mask ; // variables port_b_pullups(TRUE); set_tris_b (0xFF) ; // set port B for all input bit_mask = 1 ; //start with lowest bit for (cnt=0;cnt<8;cnt++) //for loop to test 8 bits { // the instructions below test port bits // and print result If(test_port & bit_mask) printf("Bit %d is high.\n",(int)cnt); else printf("Bit %d is low.\n') , (int)cnt); bir_mask <<= 1 ; // shift bit to be tested } while(1) // because 1 is always TRUE , then just sit here … ; }


هذا البرنامج يستخدم حلقة for والتى يتم تحديدها لعمل تكرار لثمانى مرات , مرة لكل بت يراد إختبارها . المتغير bit_mask يبدأ بالقيمة "1" ويستخدم لإخفاء جميع البتات ما عدا البت المراد اختبارها . بعد استخدام هذا المتغير كقناع , يتم إزاحته بواحد بت إلى جهة اليسار , باستخدام التخصيص المركب "<<= 1" , لاختبار البت التالية خلال التكرار التالى لحلقة for . خلال كل حلقة يستخدم بناء if/else لطباعة العبارة الصحيحة لكل بت . عبارة الشرط ببناء if هى عملية AND"&" الخاص بالتعامل مع البت bitwise لاستخدام المتغير bit_mask لإحفاء البتات الغير مرغوب فيها خلال الاختبار .
1-7-5 بناء switch / case :



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