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

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

  #21  
قديم 02-21-2013, 02:51 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-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 :
رد مع اقتباس
  #22  
قديم 02-21-2013, 02:55 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-5 بناء switch / case :

تستخدم عبارة switch / case فى تنفيذ عبارة أو مجموعة عبارات , يتم اختيارها عن طريق "قيمة تعبير" expression.

شكل هذه العبارة كما يلى :



كود:
switch (expression)

{

            case const1:

                        statement1;

                        statement2;

            case const2:

                        statement3;

                        …………

                        statement4;

 

            case constx:

                        statement5;

                        statement6;

            default :

                        statement7;

                        statement8;

}




يتم تقييم التعبير expression ثم يتم مقارنة قيمته مع الثوابت ( const1,const2,…constx) . يبدأ التنفيذ من عند العبارة التى تلى الثابت الذى يطابق قيمة التعبير expression . الثوابت يجب أن تكون قيم لأعداد صحيحة integer أو أحرف characters . جميع العبارات التى تلى الثابت المطابق سوف يتم تنفيذها , حتى نهاية بناء switch . ولأن ذلك ليس من الطبيعى أن يكون مرغوب فيه , يمكن أن تستخدم عبارات break لإنهاء كل مجموعة من العبارات للسماح لسريان البرنامج بالخروج من بناء switch يشكل آمن .

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

مثال:



كود:
#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) 

{

            unsigned char c ;

 

            port_b_pullups(TRUE);

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

            while(1)

{

            c = input_b( ) & 0xF ; // read the lower nibble of port B 

            switch( c )

            {

                        case '0' "

                        case '1' : // you can have multiple cases 

                        case '2' : // for a set of statements 

                        case '3' :

                                    printf("c is a number less than 4 \n");

                                    break; // break to skip out of the loop 

                        case '5' : // or just one is ok ..

                                    printf("c is a 5 \n") ;

                                    break;

                        default :

                                    printf("c is 4 or is > 5 \n");

            }

}

}




هذا البرنامج يقرأ القيمة من المنفذ port B , ويخفى الأربعة بتات العليا . يتم مقارنة قيمة النبل المنخفض من المنفذ port B مع الثوابت بعبارة case . إذا كان الحرف "0" أو "1" أو "2" أو "3" يتم طباعة النص "c is a number less than 4" إلى المخرج القياسى . إذا كان الحرف "5" يتم طباعة النص

""c is a 5 إلى المخرج القياسى . إذا لم يكن الحرف أى من هذه الحالات , يتم تنفيذ العبارة الافتراضية وطباعة "c is 4 or is > 5" . بمجرد أن يتم تنفيذ عبارات الحالة المناظرة , سوف يعود البرنامج إلى قمة حلقة while والتكرار .



1-7-6 بناء عبارات Break و Continue و Goto :
رد مع اقتباس
  #23  
قديم 02-21-2013, 04:34 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-7-6 بناء عبارات Break و Continue و Goto :

تستخدم هذه العبارات فى تعديل تنفيذ عبارات for , while, do/while switch/case .



عبارة Break :

تستخدم عبارة break للخروج من عبارة for أو do/while أو switch/case . إذا كانت العبارات متداخلة واحدة داخل الأخرى , فإن عبارة break سوف تخرج فقط من مجموعة العبارات الراهنة .



البرنامج التالى سوف يقوم بطباعة قيمة المتغير "c" إلى الخرج القياسى , كلما استمر المتغير "c" فى التزايد من "0" إلى "100" , بعد ذلك يتم إعادة تهيئته بالقيمة "0" .

فى حلقة while الداخلية : يتم تزايد المتغير "c" حتى يصل القيمة "100" , وبعد ذلك يتم تنفيذ عبارة break . عبارة break تتسبب فى خروج تنفيذ البرنامج من حلقة while الداخلية ويستمر التنفيذ لحلقة while الخارجية .

فى حلقة while الخارجية : يتم تحديد المتغير "c" بالقيمة "0" , ويعود التحكم إلى حلقة 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) 

{

            int c ;

 

            while(1)

{

            while(1)

            {

                        if (c >100)

                                    break ;            // this will take us out of this while

                        +cc ;              

#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) 

{

            int c ;

 

            while(1)

{

            while(1)

            {

                        if (c >100)

                                    break ;            // this will take us out of this while

                        +cc ;                            //block , clearing c…

                        printf("c =  %d \n" , c );

            }

            c = 0 ;                          //clear c and then things will begin again .

}                                              // printing the values 0 – 100 , 0 – 100 , etc

}

              //block , clearing c…

                        printf("c =  %d \n" , c );

            }

            c = 0 ;                          //clear c and then things will begin again .

}                                              // printing the values 0 – 100 , 0 – 100 , etc

}
رد مع اقتباس
  #24  
قديم 02-21-2013, 04:36 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

عبارة Continue :

عبارة continue سوف تسمح للبرنامج ببدء التكرار التالى لحلقة while أو do/while أو for . عبارة continue تشبه عبارة break فى أن كلاهما يوقف تنفيذ عبارات الحلقة عند هذه النقطة . الاختلاف هو أن عبارة continue تبدأ الحلقة مرة أخرى , من القمة , فى حين أن عبارة break تخرج من الحلقة تماما .

مثال :

كود:
#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) 

{

            int c ;

 

            while(1)

{

            c = 0 ;

            while(1)

            {

                        if (c >100)

                                    continue ;       // this will cause the printing to 

// stop when c > 100 , because the 

// continue will cause the rest of 

// this loop to be skipped 

                        +cc ;                

                        printf("c =  %d \n" , c );       // no code after the continue 

// will be executed 

            }

}

}
فى هذا المثال , قيمة المتغير "c" سوف يتم طباعتها حتى تصل إلى القيمة "100" . عند هذه النقطة سوف يبدو البرنامج كما لو كان أنه قد توقف , فى حين أنه فى الحقيقة , مازال يعمل . ببساطة يتم تخطى عبارات التزايد والطباعة printf( ) .
رد مع اقتباس
  #25  
قديم 02-21-2013, 04:39 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

عبارة Goto :

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

شكل عبارة goto كما يلى :

كود:
goto identifier ;

……..

identifier :

            statement ; 

 

or 

 

identifier :

            statement ; 

            ……

            goto identifier ;




اللافتة label تكون اسم صالح بلغة السى أو معرف متبوع بالنقطتين ( : ) .





كود:
#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) 

{

            int c , d ;

 

            while(1)

{

start_again :

            c = 0 ; 

            d = -1 ;

                        while(1)

{

            if (d == c)

                        goto  start_again ; // ( stuck? Bail out !)

            d = c ;                          // d will remember where we were 

            if(c > 100)

                        continue ;                   // this will reinitiate this 

// while loop

                                    ++c ;               // d will checked to see if c is stuck 

                                    Printf("c =   %d \n" , c ) ;

// because c won't change ( > 100 !!)

                        }

            }

}


فى هذا المثال , يتم تهيئة c و d لقيم مختلفة .

العبارة if(d==c) تختبر القيم وطالما أنهما غير متساويين , فإن التنفيذ يستمر خلال التخصيص d = c .

إذا كانت c أقل من أو تساوى "100" , يستمر التنفيذ خلال عبارة تزايد c .

يتم طباعة قيمة c وتبدأ حلقة while من جديد .

قيم c و d سوف تستمر فى الاختلاف بمقدار "1" حتى تصبح c أكبر من "100" , عندما تكون قيمة c بالقيمة "101" , فإن عبارة continue سوف تتسبب فى تخطى عبارات تزايد c والطباعة .

إذا اصبحت if(d ==c) "صواب" TRUE , لأنهما الآن متساويين , وسوف تتسبب goto فى قفز تنفيذ البرنامج إلى "اللافتة" start_again . وتكون النتيجة طباعة قيمة c من "0" إلى "100" مرة تلو الأخرى .



1-8 الدوال Functions :
رد مع اقتباس
  #26  
قديم 03-19-2013, 06:46 PM
marwenbo3 marwenbo3 غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: Jan 2013
المشاركات: 3
معدل تقييم المستوى: 0
marwenbo3 is on a distinguished road
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

جزاك الله كل خير
عندي بيكتين كل بيكة تمتلك مرسل ومستقبل شاشة lcd
بدي برنامج يجعل البيكة الاولى ترسل حرف أو كلمة للبيكة الثانية , وتقوم البيكة الثانية بعرضه على الشاشة lcd
بالاتصال التسلسلى RS232
البرنامج هو pic ccompime CCS
with pic c compil CCS
THNXXXXXXXXXXXXXXXXXXXXXXXXX
رد مع اقتباس
  #27  
قديم 02-02-2016, 01:57 PM
F.1292 F.1292 غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: Feb 2016
المشاركات: 8
معدل تقييم المستوى: 0
F.1292 is on a distinguished road
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

يعطيك العافية
رد مع اقتباس
  #28  
قديم 02-14-2016, 10:52 PM
musta musta غير متواجد حالياً
عضو نشيط
 
تاريخ التسجيل: Jul 2015
المشاركات: 82
معدل تقييم المستوى: 4
musta is on a distinguished road
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

يعطيك العافية
رد مع اقتباس
  #29  
قديم 05-03-2016, 05:34 AM
scomido scomido غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: May 2016
المشاركات: 12
معدل تقييم المستوى: 0
scomido is on a distinguished road
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

مشكور
رد مع اقتباس
  #30  
قديم 05-03-2016, 05:35 AM
scomido scomido غير متواجد حالياً
عضو جديد
 
تاريخ التسجيل: May 2016
المشاركات: 12
معدل تقييم المستوى: 0
scomido is on a distinguished road
افتراضي رد: كتاب ودورة جديدة Embedded C Programming PIC والمترجم CCS PIC C

جزاك الله خيرا
رد مع اقتباس
إضافة رد

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

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

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

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



الساعة الآن 05:59 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