منتديات الالكترونيات العصرية  
yoursite.com page title .

استرجاع كلمة المرور طلب كود تفعيل العضوية تفعيل العضوية
العودة   منتديات الالكترونيات العصرية > منتدى الحاكمات الدقيقة Microcontroller > منتدى المتحكمات ميكرو بلغة السي MikroC

  #11  
قديم 02-18-2013, 03:41 PM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

1-6 العوامل Operators والتعبيرات Expressions :

"التعبير" expression : هو عبارة والتى فيها يرتبط عامل operator بمعرفات بحيث يتم تقيمها ,والنتيجة قد تكون "صواب" true أو "غير صواب" false , أو قيمة عددية .

"العوامل" operators : هى رموز تبين للمترجم نوع العملية التى يقوم بتنفيذها باستخدام المعرفات المحيطة . توجد قواعد تطبق على الترتيب والأولوية التى يتم بها تنفيذ العمليات . عندما يتم تجميع عوامل فى تعبير واحد , يجب تطبيق هذه القواعد للحصول على النتيجة المطلوبة .



1-6-1 عوامل التخصيص Assignment والعوامل الحسابية Arithmetic :

بمجرد إعلان المتغيرات , يمكن تنفيذ العمليات عليها باستخدام عامل التخصيص , وهو علامة التساوى (=). القيمة التى تخصص للمتغير قد تكون "ثابت" أو "متغير" أو "تعبير" . التعبير فى لغة السى هو تركيبة من "المعاملات" operands ( المعرفات) و "العوامل" operators . شكل التخصيص يكون كما يلى :



كود:
dog = 35 ; 

val = dog ; 

dog = dog + 0x35 ; 

val = (2 * ( dog + 0172 ) ) + 6 ; 

y = ( m * x ) + b ;


البرنامج المترجم يعالج التعبيرات رياضيا تماما كما كنت ترغب فى أن تعالجها يدويا . يبدأ من داخل الأقواس ويعمل للخارج من اليسار إلى اليمين : فى التعبير السابق y=(m*x)+b يتم أولا ضرب m و x معا ثم إضافة b وفى النهاية يتم تخصيص قيمة النتيجة للمتغير y . بالإضافة إلى الأقواس , يوجد أولوية للعوامل نفسها . يتم تنفيذ الضرب والقسمة أولا , يليها الجمع والطرح . لذلك فإن العبارة التالية :



كود:
y= m * x + b ;
يتم تقييمها مثل العبارة :



كود:
y = ( m * x  ) + b ;
يجب ملاحظة أن استخدام الأقواس يحسن من القدرة على قراءة الكود .

الجدول التالى يبين العوامل الرياضية بترتيب الأولوية (الأسبقية) :










يوجد أنوع أخرى من العومل بجانب العوامل الحسابية وعوامل التخصيص . هذه العوامل تشمل العوامل المتعلقة بالبت المفردة bitwise , والعوامل المنطقية logical , وعوامل العلاقات النسبية أو المقارنات relational , وعوامل التزايد increment والتناقص decrement , والتخصيص المركب compound assignment والشرط conditional .







العوامل المتعلقة بالتعامل مع البت المفردة Bitwise Operation :
رد مع اقتباس
  #12  
قديم 02-18-2013, 03:46 PM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

العوامل المتعلقة بالتعامل مع البت المفردة Bitwise Operation :

هذه العوامل تنفذ الدوال التى سوف تؤثر بالمعاملات على مستوى البت bit . هذه العوامل تعمل على المعاملات operands الغير حقيقية وهى : char , int , long . الجدول التالى يبين قائمة بالعوامل التى تتعامل على مستوى البت تبعا لأسبقيتها :












فيما يلى وصف لكل عامل منها :

عامل "متمم الآحاد" ones complement "~" : يحول البتات داخل المعامل إلى "1" إذا كانت "0" وإلى "0" إذا كانت "1" .
عامل"الإزاحة جهة اليسار" left shift "<<" : يقوم بإزاحة shift المعامل الذى على يساره إلى جهة اليسار , فى النموذج الثنائى , عدد من المرات يحدد بالمعامل الذى على يمينه . فى عملية الإزاحة جهة اليسار , يتم دائما إزاحة الصفر ليحل محل أماكن البتات المنخفضة التى أصبحت فارغة . كل إزاحة جهى اليسار يكون تأثيرها الفعلى تنفيذ ضرب المعامل فى "2" .
عامل "الإزاحة جهة اليمين" right left ">>" : يقوم بإزاحة المعامل الذى على يساره إلى جهة اليمين , فى النموذج الثنائى, عدد من المرات يحدد بالمعامل الذى على يمينه . كل إزاحة جهة اليمين يكون تأثيرها الفعلى تنفيذ قسمة المعامل على "2" .
العامل AND "&" : ينتج "1" عند موقع كل بت عندما يكون كلا المعاملين بالقيمة "1" .
العامل "أو الحصرى" exclusive OR "^": ينتج "1" عند موقع كل بت عندما يختلف المعاملين ( أحدهما "0" والآخر "1" ) .
العامل OR "|" : ينتج "1" عند موقع كل بت عندما يكون أى من المعاملين "1" .
الجدول التالى يبين بعض الأمثلة :












العوامل AND (&) و OR (|) الخاصة بالتعامل مع البتات المفردة مفيدة عند التعامل المنافذ المتوازية . لاحظ المثال التالى :



كود:
#include <16F877.h>             //register definition header file for

#fuses HS,NOWDT                           //a Microchip PIC16F877 and fuses

 

unsigned char z ; //declare z 

 

void main(void) 

{

            port_b_pullups(TRUE);

            set_tris_d(0x00);                               //set all bits of port D for all output

            set_tris_b(0xFF);                               //set port B for all input

 

            while(TRUE)

            {

                z = input_b( ) & 0x6 ;                    //read the binary value on 

//the port B pins ANDed with 00000110

               output_d(input_d( )  |  0x60 );        // write the binary value from (port D

                                                //ORed with 01100000) back to port D 

                output_d(input_d( )  & 0xFE) ;     //write the binary value from( port D 

                                                                        //ANDed with 0xFE) to port  D .

            }

}


هذا المثال يستعرض عملية "الإخفاء" masking وعملية التحكم فى بتات المنفذ المفردة .

تقنية "الإخفاء" masking : تستخدم فى "تحديد قيمة بتات معينة لقيمة ثنائية" . فى هذه الحالة يتم إنجاز "الإخفاء" عن طريق عملية AND (&) بين البتات الغير مرغوب فيها مع الصفر "0" ( لأن

"x" AND" 0 تنتج دائما الصفر "0" ) والبتات التى نرغب فيها (نهتم بها) مع الواحد "1" ( لأن "x" AND "1" تنتج دائما القيمة "x" ) . بهذه الطريقة جميع البتات ماعدا البتين الأوسطين للنبل السفلى (البت الثانى والبت الثالث ) يتم التخلص منها ( جعلها أصفار) .



كود:
input_b( ) & 0x6

same as

PORTB & 0x06

same as

PORTB & 0b00000110 // RB0,RB3,RB4,RB5,RB6,RB7 always zeros (mask)




التحكم فى بتات المنفذ بشكل منفرد : هى طريقة لتغيير بت واحدة أو أكثر للمنفذ المتوازى بدون التأثير على البتات الأخرى للمنفذ .

سطر الإخراج الأول output_d يستعرض استخدام العامل OR (|) لإجبار بتين من المنفذ للحالة المرتفعة بدون التأثير على البتات الأخرى للمنفذ .





كود:
output_d(input_d( )  |  0x60 );//0bxxxxxxxx | 0b01100000 = 0b0xx00000

سطر الإخراج الثانى يبين طريقة إجبار بت من المنفذ للحالة المنخفضة عن طريق عملية AND (&) للبت مع الصفر .

output_d(input_d( )  & 0xFE) ; //0bxxxxxxxx & 0b11111110 =0bxxxxxxx0


1-6-2 العوامل المنطقية Logical وعوامل العلاقات النسبية (المقارنات) Relational :
رد مع اقتباس
  #13  
قديم 02-19-2013, 01:03 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

1-6-2 العوامل المنطقية Logical وعوامل العلاقات النسبية (المقارنات) Relational :

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



العوامل المنطقية Logical Operators :

الجدول التالى يبين العوامل المنطقية بترتيب أسبقيتها :












العوامل المنطقية تختلف بشكل كبير عن العوامل الخاصة بالتعامل مع البتات المنفردة bitwise فى أنها تتعامل مع المعاملات operands ككل بمنطق أو بمفهوم "صواب" TRUE و"غير صواب" FALSE .

العامل المنطقى AND (&&) : ينتج "صواب" TRUE إذا كان المعاملان كلاهما both "صواب" TRUE , وإلا تكون النتيجة "غير صواب" FALSE .

العامل المنطقى OR (||) : ينتج "صواب" TRUE إذا كان أى من either (أحدهما) المعاملين "صواب" TRUE .

فى حالة OR (||) , يجب أن يكون كلا المعاملين "غير صواب" FALSE حتى تكون النتيجة "غير صواب" FALSE .

لتوضيح الفرق إليك المثال التالى :

بفرض x = 5 و y = 2 فإن :

نتيجة (x&&y) تكون "صواب" TRUE , لأن كلاهما "غير صفرى" .
نتيجة (x&y) تكون "غير صواب" FALSE , لأنه عند إجراء عملية (&) AND ( بين البتات المفردة bitwise ) للقيمة الثنائية (x=101b) مع القيمة الثنائية ( y= 010b) فإن النتيجة تكون القيمة الثنائية ( 000b) وهى "صفرية" أى FALSE .
نتيجة ( x || y ) تكون "صواب" , لأن كلا القيمتين "غير صفرية" .
نتيجة ( x | y ) تكون "صواب" , لأنه عند إجراء عملية OR (|) ( بين البتات المفردة bitwise ) للقيمة الثنائية ( x= 101b ) والقيمة الثنائية ( y = 010b ) تكون النتيجة القيمة الثنائية (111b) وهى غير صفرية أى TRUE .
رد مع اقتباس
  #14  
قديم 02-19-2013, 01:05 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

عوامل العلاقات النسبية (المقارنات) Relational Operators :

تستخدم هذه العوامل فى عمليات المقارنة. كما هو الحال فى العوامل المنطقية , يتم تقييم المعاملات "من اليسار إلى اليمين" وتوليد النتيجة "صواب" TRUE أو "غير صواب" FALSE . هذه العوامل فعليا "تسأل" ask حول علاقة بين تعبيرين بغرض الحصول على إجابة : "صواب" TRUE أو "غير صواب" FALSE بالصيغة التالية :

هل الأيسر أكبر من الأيمن ؟
هل الأيسر أقل من أو يساوى الأيمن ؟
الجدول التالى يبين عوامل العلاقات النسبية :












والجدول التالى يبين أمثلة عليها :



رد مع اقتباس
  #15  
قديم 02-19-2013, 01:08 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

-6-3 التزايد والتناقص و التخصيص المركب:

منذ أن تم تطوير لغة السى , تبذل جهود كبيرة للحفاظ على الأشياء موجزة ولكن واضحة . لقد تم بناء عوامل "إختزال" باللغة لتبسيط توليد العبارات وتخفيض الكتابة خلال إنشاء البرنامج . هذه العوامل تشمل عوامل التزايد والتناقص , بالإضافة إلى عوامل التخصيص المركب .



عوامل التزايد Increment Operators :

تسمح عوامل التزايد بتعديل "المعرف" , وهو فى موضعه , سواء بتزايد "مسبق" أو بتزايد "لاحق" .

على سبيل المثال :



كود:
x = x + 1 ;

is the same as :

++x;                            //pre-increment operation

and as : 

x++;                            // post-increment operation


فى هذا المثال يتم تزايد قيمة المتغير x بواحد . ++x هو عامل التزايد المسبق , بينما x++ هو عامل التزايد اللاحق . هذا يعنى أنه خلال تقييم التعبير عن طريق المترجم , يتم تغير القيمة ويكون ذلك " سابق" للتقييم أو "لاحق" للتقييم .

على سبيل المثال :



كود:
i = 1 ; 

k = 2 * i++ ;                // at completion , k = 2 and I = 2 

 

i = 1 ;

k = 2 * ++i ;                //at completion , k = 4 , I = 2
فى الحالة الأولى , يتم تزايد "i" بعد حل التعبير (k=2*i) وبالتالى لا تدخل الزيادة فى تعبير الضرب .

فى الحالة الثانية , "i" تزايدت قبل حل التعبير وبالتالى دخلت الزيادة فى تعبير الضرب .



عوامل التناقص Decrement Operators :

عوامل التناقص تعمل بشكل مماثل , وتتسبب فى طرح واحد عند التناقص "المسبق" أو التناقص "اللاحق" كما يلى :



كود:
j-- ;     //j = j-1 

--j ;     // j = j-1
رد مع اقتباس
  #16  
قديم 02-19-2013, 01:10 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

عوامل التخصيص المركبة Compound Assignment Operators :

عوامل التخصيص المركب هى طريقة أخرى لتخفيض مقدار بناء الجمل المطلوب خلال بناء البرنامج . التخصيص المركب فى الحقيقة هو مجرد جمع بين عامل التخصيص ( = ) مع عامل حسابى أو منطقى . يتم معالجة التعبير " من اليمين إلى اليسار" . إليك بعض الأمثلة :



كود:
a += 3 ;           //a = a + 3 

b -= 2 ;            // b = b – 2 

c *= 5 ;            // c = c * 5 

d /= a ;            // d = d / a


هذا الجمع بين التخصيص مع عامل آخر يعمل بنفس الشكل مع عوامل البت المفردة :

( % , >> , << , & , | , ^ ) بالإضافة إلى العوامل الحسابية ( + , - , * , / ) كما هو موضح بالأمثلة التالية :







كود:
a |= 3 ;                         // a = a OR 3

b &= 2 ;                      // b = b AND 2 

c ^= 5 ;                       //c = c Exclusive ORed with 5 

 

PORTC &= 3 ;          // write the current value on PORTC

// ANDed with 3 back to PORTC .Forcing

//all of bits except the lower 2 to 0 

//and leaving the lower 2 bits unaffected .
رد مع اقتباس
  #17  
قديم 02-19-2013, 01:14 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

1-6-4 تعبير الشرط The Condition Expression :

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

إذا كان لدينا عبارات تتابع التحكم التالية :



كود:
if (expression_A)

            expression_B;

else 

            expression_C;


كما يمكن كتابتها كما يلى :



كود:
expression_A ? expression_B : expewssion_C


فى أى من الشكلين , "التعبير المنطقى" expression_A يتم تقيمه : إذا كانت النتيجة "صواب" TRUE , عندئذ يتم تنفيذ التعبير expression_B , وإلا يتم تنفيذ التعبير expression_C .

فى البرنامج , قد يكتب تعبير الشرط كما يلى :



كود:
(x < 5) ? y = 1 : y = 0 ;           // if x is less than 5 , then 

// y = 1 , else y = 0




1-6-5 أسبقية (أولوية) العامل Operator Precedence :

عندما يكون هناك تعبيرات متعددة فى عبارة واحدة , فإنه يتم أخذ أسبقية ترتيب العامل فى الحسبان عن تقييم التعبير عن طريق المترجم .

أمثلة :



نتيجة y = 3 + 2 * 4 تكون y = 11 لأن عملية الضرب (*) تسبق عملية الجمع .
نتيجة y = ( 3 + 2 ) * 4 تكون y = 20 لأن عملية الأقواس ( ) تسبق عملية الضرب * .
نتيجة y = 4 >> 2 * 3 تكون y = 4 >> 6 لأن عملية الضرب (*) تسبق عملية الإزاحة .
نتيجة y = 2 * 3 >> 4 تكون y = 6 >> 4 لأن عملية الضرب (*) تسبق عملية الإزاحة .


1-7 تعبيرات التحكم Control Statements :
رد مع اقتباس
  #18  
قديم 02-21-2013, 02:20 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

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" .
رد مع اقتباس
  #19  
قديم 02-21-2013, 02:23 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

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) .
رد مع اقتباس
  #20  
قديم 02-21-2013, 02:26 AM
الصورة الرمزية F.Abdelaziz
F.Abdelaziz F.Abdelaziz غير متواجد حالياً
استاذ الكترونيان
 
تاريخ التسجيل: May 2009
المشاركات: 2,658
معدل تقييم المستوى: 21
F.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to beholdF.Abdelaziz is a splendid one to behold
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

-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 :
رد مع اقتباس
إضافة رد

مواقع النشر (المفضلة)

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

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة



الساعة الآن 12:35 PM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
الحقوق محفوظة لمنتديات الاليكترونيات العصرية

Security team

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77