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

   

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



عبارة for :
عبارة for هى أكثر العبارات شيوعا لإنشاء الحلقات فى البرامج .
الشكل العام لهذه العبارة كما يلى :

كود:
for(expression1; expression2; expression3) statements;
• حيث التعبير الأول expression1 يحدد "القيمة الابتدائية" لعداد الحلقة ويتم تقييم هذا المتغير مرة واحدة فقط بمجرد إلى الحلقة .
• والتعبير الثانى Expression 2 هو "الشرط" الذى يحافظ على استمرار الحلقة . عذا التعبير يتم تقيمه (اخباره) كل تكرار ، للتحقق مما إذا كان ينبغى استمرار الحلقة من عدمه . التعبير الثانى Expression 2 عادة يكون علمل منطقى أو عامل علاقة .
• التعبير الثالث Expression 3 هو أيضا يتم تقييمه عند نهاية كل تكرار ، وهذا التعبير يغير القيمة التى يتم اختبارها من أجل إنهاء الحلقة . هذا التعبير عادة يكون تزايد قيمة عداد الحلقة .



فى حلقة for يشيع استخدام أكثر من عبارة . فى المثال التالى يتم تكرار الحلقة 10 مرات . القيمة الابتدائية لعداد الحلقة “i" هى “0” ، ويتم تزايده بواحد “1” عند كل تكرار ، وتستمر الحلقة طالما أن “i" يكون أصغر من “10” :

كود:
for(i = 0; i < 10; i++)
{
statements;
}
فيما يلى بعض الأمثلة على استخدام عبارة for :
مثال :
اكتب برنامج لحساب مربعات الأعداد من “1” إلى “49” وخزن النتيجة فى مصفوفة أعداد صحيحة باسم Mult .
الحل :
البرنامج المطلوب يكون كما يلى :

كود:
void main()
{
int Mult[50];
unsigned char i;
for(i = 1; i <= 49; i++)
{
Mult[i] = i*i;
}
}
• يمكن بسهولة "تداخل" حلقات for كما هو موضح بالمثال القادم . فى هذا المثال جميع عناصر المصفوفة ثنائية الأبعاد MyArray يتم إعدادها بأصفار (على فرض أن عناصر المصفوفة 10 ) . فى هذا المثال ، يتم تكرار الحلقة "الداخلية" 10 مرات لكل قيمة من قيم “i" للحلقة الخارجية ، وهذا يعنى أن العدد الكلى للتكرارات يكون “100” .

كود:
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
MyArray[i][j] = 0;
}
}
يمكن حذف البارامترات (التعبيرات) فى حلقة for . هناك العديد من التغييرات لحلقة for استنادا على أى بارامتر يتم حذفه . إليك بعض الأمثلة :
• إنشاء حلقة لا نهائية :
كود:
for(;;)
{
statements;
}

• تحديد القيمة الابتدائية خارج الحلقة :

كود:
i = 0;
for(; i < 10;)
{
statements;
i++;
}
• لإنهاء الحلقة من داخلها :

كود:
i = 0;
for(;; i++)
{
statements;
if(i >= 10) break;
}

اعلانات

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


الإنهاء المبكر للحلقة :
هناك حالات حيث قد نرغب فى إنهاء الحلقة مبكرا . يتم عمل ذلك باستخدام عبرة break . عندما يقابل البرنامج هذه العبارة ، فإنه "يجبر" على القفز الغير مشروظ إلى خارج الحلقة . يمكن استخدام عبارة break مع جميع عبارات التكرار .
فى المثال التالى ، يتم إنهاء الحلقة عندما يصبح المتغير p بالقيمة 10 كما يلى :

كود:
 p = 0;
while(p < 100)
{
statements;
p++;
if(p == 10) break;
}


كيف تعمل عبارة break :



عبارة continue :
عبارة continue تتخطى بعض العبارات داخل الحلقة . تستخدم عبارة continue مع عبارة اتخاذ قرار مثل if…else .
الشكل العام لعبارة continue :

كود:
Continue;


كيف تعمل عبارة continue :



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

كود:
statements;
Loop:
statements;
goto Label;

or

statements;
Loop:
statements;
if(condition) goto Label;
فى الشكل الأول ، يقفز البرنامج إلى العبارة التى تأتى بعد اسم العنوان المسمى Loop . "العنوان" label يمكن أن يكون أى اسم صالح لمتغير ويجب أن ينتعى بالنقطتين ( : ) .
فى الشكل الثانى ، يقفز البرنامج إلى "عنوان" محدد إذا كان الشرط true .
لا ينصح بالاستخدام المفرط لعبارة goto فى البرامج ، لأنها تتسبب فى برنامج غير منظم وصعب صيانته . يمكن كتابة برامج كبيرة ومعقدة دون استخدام عبارة goto . لعل التطبيق الأكثر فائدة لعبارة goto هو إنهاء البرنامج قبل الأوان .


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

الصورة الرمزية مسلم11
مسلم11
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2009
الدولة: بلاد الشام
المشاركات: 3,679
نشاط [ مسلم11 ]
قوة السمعة:
قديم 29-05-2017, 01:45 AM المشاركة 35   
افتراضي


الخي الكريم هل هذا الشرح مناسب للمتحكم .
المتحكم الصغري او الدقيق.
عندما تكون ملكا على عرش دولة ما فانك بحاجة الى وزير كي ينفذ مطالبك والوزير بحاجة لمن يعينه في تنفيذ اوامر الملك فالوزير بحاجة لشرطة من اجل ضبط الحاشية وبحاجة لمدير تموين يؤمن الغذاء و بحاجة لمعلمين لتعليم الاطفال و بحاجة ل مندوب العلاقات الخارجية مع الدول خارج الحدود وخازن بيت المال وامين سر الدولة ووزير خارجية .
1. فعندما تكون انت الملك والوزير هو المتحكم الصغري يكون أمين السر هو الذاكرة الداخلية و الشرطة بمثابة تعيين مرور الحركة بالطرقات اي الامر PORT و مدير التموين بمثابة مؤمن التغذية للمتحكم و المذبذب الذي سيعمل عليه المتحكم والمعلم بمثابة البرنامج الذي ستكتبه من اجل العمل وفقط منهجك او منهج الملك . ومندوب العلاقات الخارجية بمثابة المداخل الموصولة مع المذبذب الحساسات او المستشعرات من قيم على اطراف الدخل ووزير الحارجية من اجل اظهار رأي الدولة او الملك عن ما يدور حوله وخازن بيت المال يمثل الامر TRIS.
2. في حال تنفيذ امر ما كيف سيسير الامر .
مع الشكر


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


الدوال والميكروسى برو :
بشكل عام ، يكون من ممارسة البرمجة الجيدة ، كتابة البرنامج المعقد الكبير فى صورة مجموعة من الوحدات الأصغر ، حيث يمكن اختبار كل وحدة بشكل منفصل عن الكود الرئيسى . يمكن التفكير فى "الدالة" function على أنها كود برنامج مستقل بذاته قابل للاختبار ، تم إنشاؤه لأداء مهمة محددة . يتم إنشاء الدوال أيضا عندما يكون مطلوب تكرار خوارزمية (حل برمجى) معينة فى عدة أماكن مختلفة من البرنامج الرئيسى . على سبيل المثال ، قد تكون هناك حاجة لتحويل درجة الحرارة من فهرنهيت إلى مئوية فى عدة أماكن فى البرنامج . بدلا من تكرار الكود ، فإنه يكون أكثر كفاءة ويكون البرنامج أكثر قابلية للصيانة إذا تم كتابة كود تحويل درجة الحرارة فى شكل "دالة" . يمكن بعد ذلك استدعاء هذه الدالة كلما كان ذلك مطلوبا لإجراء التحويل المطلوب .
الشكل العام لإعلان الدالة :

كود:
type name(parameters)
{
body
}
عادة (وليس دائما) ما تقوم الدالة بإجراء عملية معينة وإرجاع (إعادة) return بيانات إلى البرنامج القائم بالاستدعاء . النوع type فى الدالة يشير إلى نوع البيانات التى ترجعها ، والاسم name هو اسم الدالة ، وينبغى الفصل بين البارامترات parameters (إن وجدت) بفواصل . العبارات الموجودة داخل الدالة (جسم الدالة) يجب أن تطوق بزوج من الأقواس المعكوفة {…} .
فيما يلى مثال لإعلان دالة ، والتى تقوم بحساب محيط الدائرة circumference ، بدلالة نصف قطرها ، وتعود إلى البرنامج القائم بالاستدعاء . هنا ، نصف قطر الدائرة radius يتم تمريره كوسيط argument للدالة .


كود:
float Circumference(float radius)
{
float c;
c = 2*PI*radius;
return c;
}

لنفرض أننا نريد حساب محيط الدائرة التى نصف قطرها 2.5 cm ، وتخزين النتيجة فى متغير يسمى Circ ، يمكن استدعاء الدالة السابقة كما يلى :

كود:
Circ = Circumference(2.5);
إليك بعض الأمثلة :
مثال :
اكتب دالتين لحساب مساحة وحجم اسطوانة ، موضحا كيف تستخدم هذه الدوال فى البرنامج لحساب مساحة وحجم اسطوانة نصف قطرها 3.0 cm وارتفاعها 12.5 cm ، خزن المساحة فى المتغير c_area والحجم فى المتغير c_volume .
الحل :
البرنامج التالى يبين الدالتين . الدالة Cyl_Area لحساب مساحة الاسطوانة ، والدالة , Cyl_Volume لحساب حجم الاسطوانة .

كود:
//
// This function calculate the area of a cylinder. The radius and height
// are passed as parameters to the function
//
float Cyl_Area(float radius, float height)
{
float c;
c = 2*PI*radius*height;
return c;
}
//
// This function calculate the volume of a cylinder. The radius and height
// are passed as parameters to the function
//
Float Cyl_Volume(float radius, float height)
{
float c;
c = PI*radius*radius*height;
return c;
}

البرنامج الرئيسى يستدعى هذه الدوال كما هو مبين أدناه . يستخدم نصف قطر وارتفاع الاسطوانة كبارامترات للدوال . يتم تخزين المساحة فى المتغير c_area والحجم فى المتغير c_volume .

كود:
 /*-----------------------------------------------------------------------------------------------
This program calculates the area and volume of a cylinder. The radius and height
of the cylinder are passed as parameters to two functions which calculate the
area and the volume.
In this example the radius and height are assumed to be 3.0cm and 12.5cm
respectively.
The area is stored in variable c_area, and the volume is stored in variable
c_volume.
------------------------------------------------------------------------------------------------*/
//
// This function calculates the area of a cylinder. The radius and height are passed
// as parameters to the function
//
float Cyl_Area(float radius, float height)
{
float c;
c = 2*PI*radius*height;
return c;
}
//
// This function calculates the volume of a cylinder. The radius and height are
// passed as parameters to the function
//
float Cyl_Volume(float radius, float height)
{
float c;
c = PI*radius*radius*height;
return c;
}
//
// Main program
//
void main()
{
float r, h, c_area, c_volume;
r = 3.0; 				// The radius
h = 12.5; 				// The height
c_area = Cyl_Area(r, h); 		// Calculate the area
c_volume = Cyl_Volume(r, h); 	// Calculate the volume
}

النماذج المبدئية (الأولية) للدوال Function Prototypes :

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

كود:
float Circumference(float radius);
اسم البارامترات اختيارى ، ويمكن تجنبه كما يلى :

كود:
float Circumference(float);
البرنامج التالى يوضح كيف يمكن تعديل البرنامج المبين أعلاه لاستخدام النماذج المبدئية ، حيث يتم إعلان النماذج المبدئية للدالة قبل البرنامج الرئيسى ، ثم يتم إعلان الدالتين بعد البرنامج الرئيسى .

كود:
/*-----------------------------------------------------------------------------------------------
This program calculates the area and volume of a cylinder. The radius and height
of the cylinder are passed as parameters to two functions which calculate the
area and the volume.
In this example the radius and height are assumed to be 3.0cm and 12.5cm
respectively.
The area is stored in variable c_area, and the volume is stored in variable
c_volume.
------------------------------------------------------------------------------------------------*/
float Cyl_Area(float, float);
float Cyl_Volume(float, float);
//
// Main program
//
void main()
{
float r, h, c_area, c_volume;
r = 3.0; 				// The radius
h = 12.5; 				// The height
c_area = Cyl_Area(r, h); 		// Calculate the area
c_volume = Cyl_Volume(r, h); 	// Calculate the volume
}
//
// This function calculates the area of a cylinder
//
float Cyl_Area(float radius, float height)
{
float c;
c = 2*PI*radius*height;
return c;
}
//
// This function calculates the volume of a cylinder
//
float Cyl_Volume(float radius, float height)
{
float c;
c = PI*radius*radius*height;
return c;
}
الدوال الخالية (الفارغة) void Functions :
الدالة الفارغة هى إحدى الحالات التى تظهر فيها الكلمة المخصوصة (المحجوزة) void كمحدد لنوع الدالة ، للإشارة إلى أن الدالة لا ترجع أى قيمة لبرنامج الاستدعاء . بالمثل ، الدالة التى بدون بارامترات يتم تحديدها باستخدام الكلمة المخصوصة void فى قائمة بارامتراتها . مثل هذه الدالة يتم استدعاؤها بدون بارامترات .
فيما يلى مثال على دالة فارغة void ، والتى ببساطة تحدد جميع أطراف خرج المنفذ PORTB بالحالة المرتفعة . هذه الدالة ليس لها بارامترات ولا تعيد أى بيانات :

كود:
void SET_LED(void)
{
PORTB = 0xFF;
}
تمرير البارامترات إلى الدوال :
من المهم إدراك أنه كلما تم استدعاء دالة ببارامترات ( ما عدا المصفوفة ، والتى سوف نتناولها فى الفقرة القادمة) ، يتم تمرير جميع البارامترات إلى الدالة بواسطة قيمة . وهذا يعنى أن قيم هذه البارامترات يتم نسخها إلى الدالة واستخدامها محليا بواسطة الدالة . لا يمكن تعديل قيم هذه البارامترات بواسطة الدالة .
فيما يلى مثال بسيط لتوضيح مفهوم "تمرير البارامترات بواسطة قيمة" :

كود:
float Inc(float x)
{
x++;
return x;
}
//
// Main program
//
void main()
{
float a, b;
a = 5.0; 	// a = 5.0
b = Inc(a); 	// a = 5.0, b = 6.0
}
فى هذا المثال قيمة بارامتر الدالة (a) كان “5” قبل استدعاء الدالة . داخل الدالة ، النسخة المحلية لهذا البارامتر يتم تزايده إلى “6” ، لكن قيمة هذا البارامتر تظل “5” فى البرنامج الرئيسى . عندما تعود الدالة يتم تخصيص القيمة “6” للمتغير “b” .
تمرير المصفوفات إلى الدوال :
فى بعض التطبيقات ، قد نرغب فى تمرير مصفوفات إلى دوال . يعد تمرير عنصر واحد من المصفوفة أمرا سهلا . كل ما علينا فعله هو فهرسة index العنصر الذى نرغب فى تمريره . كما هو موضح فى الفقرة السابقة ، يتم تمرير مثل هذا المتغير إلى الدالة كقيمة . على سبيل المثال ، العنصر الذى فهرسه (ترتيبه) “5” بالمصفوفة MyArray ، لتمريره إلى دالة تسمى Sum وتخزين قيمة العائد فى المتغير “a” ، ببساطة يمكن كتابة ما يلى :


كود:
a = Sum(MyArray[5]);
تمرير المصفوفة بالكامل إلى دالة أكثر تعقيدا قليلا . فى هذه الحالة ، ببساطة نكتب اسم المصفوفة فى برنامج الاستدعاء . فى رأس الدالة ينبغى علينا أن نعلن مصفوفة من نفس النوع متبوعة بزوج من الأقواس الفارغة . من المهم أن ندرك أننا لا ننسخ المصفوفة بالكامل إلى الدالة ، ولكن ببساطة نمرر عنوان العنصر الأول من المصفوفة ، وهو أيضا يساوى اسم المصفوفة . ونظرا لأنه يتم تمرير العنوان إلى الدالة ، يقال أن عناصر الدالة تم تمريرها عن طريق المرجع . نتيجة لذلك ، يمكن تعديل عناصر المصفوفة الأصلية داخل الدالة . فيما يلى مثال لتوضيح العملية .
مثال :
اكتب برنامج لتحميل مصفوفة أعداد صحيحة تسمى “N” بالقيم من “1” إلى “10” . بعد ذلك استدعى دالة لحساب مجموع عناصر المصفوفة والعودة بالمجموع إلى برنامج الاستدعاء .
الحل :
البرنامج :

كود:
 /*-----------------------------------------------------------------------------------------------
This program demonstrates how an array can be passed to a function. Here, array N is initialized with numbers 1 to 10. Then, function Sum is called to calculate the sum of the array elements. The sum is then returned to the main program and stored in variable s
------------------------------------------------------------------------------------------------*/
//
// This function calculates the sum of the elements of an array
//
int Sum(int A[ ])
{
char i;
int Total = 0;
for(i = 0; i < 10; i++) Total = Total + A[i];
return Total;
}
//
// Main program
//
void main()
{
int s, N[10];
char i;
for(i = 0; i < 10; i++) N[i] = i + 1; 	// Initialize array N
s = Sum(N); 				// Calculate the sum of elements
}

يتم تهيئة مصفوفة الأعداد الصحيحة N بالقيم من 1 إلى 10 فى البرنامج الرئيسى . بعد ذلك يتم استدعاء الدالة Sum ويتم تمرير المصفوفة إلى هذه الدالة . الدالة تحسب مجموع عناصر المصفوفة وتعيد المجموع إلى المتغير s فى البرنامج الرئيسى . لاحظ أن المصفوفة تسمى N فى الدالة الرئيسية ، لكنها تسمى A فى الدالة .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 29-05-2017, 04:01 PM المشاركة 37   
افتراضي


التوصيل الأساسى للميكروكونترولر BASIC CONNECTION
لكى يتمكن الميكروكونترولر من العمل الصحيح يجب توفير الآتى :
• مصدر للقدرة Power Supply .
• إشارة "الإعادة" أو "التصفير" Reset .
• إشارة نبضات الساعة Clock .





الشكل العلوى يبين أحد الدوائر البسيطة وهى ليست هكذا دائما لكنها كافية فى الوقت الحاضر .
1- مصدر القدرة POWER SUPPLY
على الرغم من أن الميكروكونترولر PIC16F887 يمكنه العمل عند جهود قدرة مختلفة إلا أن مصدر القدرة بالجهد 5V DC هو الأكثر ملائمة.
تستخدم الدائرة المنظم الموجب ذو الثلاثة أطراف LM7805 وهو يوفر إستقرار فى الجهد عالى الكفاءة كما يوفر تيار كافى ليمكن الميكروكونترولر والإلكترونيات المحيطة به من العمل العادى ( كافى هنا تعنى 1 أمبير).
2- إشارة الإعادة RESET SIGNAL

لكى يتمكن الميكروكونترولر من العمل الصحيح يجب تطبيق المنطق (1) (VCC) على طرف الإعادة reset المفتاح الضاغط الموصل بين طرف الإعادة MCLR والأرضى GND ليس ضرورى . ومع ذلك ، هو تقريبا دائما يستخدم لتمكين الميكروكونترولر من الرجوع بأمان إلى ظروف التشغيل العادية إذا ما سارت الأمور بشكل خاطئ .
عند الضغط على هذا المفتاح يتم توصيل الجهد 0V إلى الطرف MCLR فيقوم الميكروكونترولر بعمل إعادة reset ويبدأ البرنامج التنفيذ من البداية .
تستخدم مقاومة 10 كيلوأوم للسماح بتوصيل الجهد 0V للطرف MCLR عن طريق الضغط على المفتاح بدون حدوث دائرة قصر بين الجهد الموجب والأرضى .
3- إشارة نبضات الساعة CLOCK SIGNAL
بناء على العناصر المستخدمة بالإضافة إلى الترددات يمكن تشغيل المذبذب في أربعة أنماط مختلفة :
• كريستال بقدرة منخفضة : LP
• كريستال أو دائرة رنين : XT
• كريستال أو دائرة رنين بسرعة عالية : HS
• دائرة مكثف ومقاومة RC

لماذا هذه الأوضاع في غاية الأهمية؟
نظرا لحقيقة أنه يكاد يكون من المستحيل جعل مذبذب مستقرة وفى نفس الوقت يعمل فى مدى واسع من التردد يجب أن يعرف الميكروكونترولر الكريستال المتصل به حتى يتمكن من ضبط عمل الالكترونيات الداخلية له.
هذا هو السبب في أن جميع البرامج المستخدمة فى تحميل الشريحة تحتوي على خيار لاختيار نمط المذبذب.
أ‌- كريستال الكوارتز Quartz Crystal
عنداستخدام كريستال الكوارتز لتحقيق استقرار التردد فإن المذبذب الداخلى يعمل على تردد دقيق والذى لا يتأثر بالتغيرات في درجة الحرارة وجهد مصدر القدرة .عادة يكتب هذا التردد على جسم الكريستال .
يجب أيضا توصيل المكثفات C1 و C2 ت كما هو مبين بالشكل التالى .
سعة تلك المكثفات ليست ذات أهمية كبيرة. ولذلك فإن القيم الواردة في الجدول أدناه ينبغي أن تعتبر كتوصية، وليس كقاعدة صارمة.



ب‌- دائرة الرنين السيراميكى Ceramic Resonator
دائرة الرنين أرخص ولكنها تشبه الكريستال فى الوظيفة وفى طريقة العمل ولهذا نجد مخطط توصيلها مع الميكروكونترولر متماثل .مع ذلك فإن قيم المكثفات تختلف قليلا نتيجة لاختلاف الخصائص الكهربائية كما فى الجدول المرفق .



عادة توصل دائرة الرنين عندما لا يكون من الضرورى الحصول على تردد متناهى فى الدقة .
ت‌- المذبذب RC
عندما لا يكون تردد التشغيل ذات أهمية عندئذ لا تكون هناك حاجة لمكونات غالية إضافية للتثبيت . بدلا من ذلك يكتفى باستخدام دائرة RC بسيطة كما هو مبين بالشكل .
وحيث اننا سوف نستخدم مدخل المذبذب المحلى فقط فإن نبضات الساعة بتردد Fosc /4 سوف تظهر على الطرف OSC2 .هذا التردد يمثل تردد تشغيل الميكروكونترولر أى سرعة تنفيذ التعليمة .



ث‌- المذبذب الخارجى External Oscillator
عندما يكون المطلوب عمل تزامن فى عمل عدد من الميكروكونترولر أو إذا لأى سبب كان من غير الممكن استخدام أى من الطرق السابقة فيمكن توليد إشارة ساعة بمذبذب خارجى كما فى الشكل التالى .







الصورة الرمزية مسلم11
مسلم11
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2009
الدولة: بلاد الشام
المشاركات: 3,679
نشاط [ مسلم11 ]
قوة السمعة:
قديم 29-05-2017, 04:42 PM المشاركة 38   
افتراضي


كل عام وانت بخير .
اعاده الله عليك بالخير و البركة.
و انت والمسلمين بالف بخير


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 29-05-2017, 05:17 PM المشاركة 39   
افتراضي


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


الصورة الرمزية assed
assed
:: عضو فضي ::
تاريخ التسجيل: Jul 2014
الدولة: العراق - بغداد
المشاركات: 1,034
نشاط [ assed ]
قوة السمعة:
قديم 31-05-2017, 10:01 AM المشاركة 40   
افتراضي


المتغيرات Variables :
المتغير هو مجرد مكان (وعاء) لحفط قيم لبيانات من نوع معين . مكان الحفظ هو مواقع ذاكرة RAM والنوع يمكن أن يكون لأحرف Character أو أعداد صحيحة Integers (بدون علامة عشرية) أو أعداد بعلامة أو نقطة عشرية تسمى Float .



يمكن تصنيف المتغيرات تبعا "لنوع البيانات" التى تخزنها بداخلها :
1- متغير يحفظ بيانات لعدد صحيح integer ، ويشار إليه بكلمة “int” .
2- متغير يحفظ بيانات لحرف character ، ويشار إليه بكلمة “char” .
3- متغير يحفظ بيانات لعدد بنقطة عشرية float ، ويشار إليه بكلمة “float” .
4- متغير يحفظ بيانات عدد بنقطة عشرية "مضاعف" double ، ويشار إليه بكلمة double .



كما يمكن تصنيف المتغيرات تبعا لعدد المتغيرات التى يمكن أن تحفظها :
1- متغيرات تحفظ "قيمة مفردة" فى نفس الوقت ومن أى نوع من البيانات ، وتسمى متغيرات عادية .
2-متغيرات تحفظ "قيم متعددة" من نفس نوع البيانات وتسمى "المصفوفات" Array .
3-متغيرات تحفظ "قيم متعددة" من أنواع مختلفة من البيانات وتسمى "الهياكل" Structure .

بيانات الأعداد الصحيحة Integer Type :
النوع char والنوع int ، وتعديلاتها ، تعتبر أنواع لبيانات أعداد صحيحة . يمكن إنشاء التعديلات باستخدام واحد من بادئات التعديل التالية : short , long , signed , unsigned . الجدول التالى يبين أنواع بيانات الأعداد الصحيحة ، يمكن إهمال الكلمات الموجودة بين الأقواس :



• فى حالة غياب البادئة unsigned فيفترض تلقائيا النوع signed لبيانات أنواع العدد الصحيح ، على سبيل المثال int تعنى signed int. الاستثناء الوحيد هو char حيث يكون unsigned فى الوضع الافتراضى وتقتصر على كتابة char.
• الكلمات signed و unsigned عندما يتم استخدامها فى حد ذاتها ، تعنى signed int و unsigned int على الترتيب ، على سبيل المثال unsigned تعنى unsigned int .
• كلمات التعديل short و long يمكن فقط تطبيقها على النوع int .
• الكلمات short و long عند استخدامها فى حد ذاتها ، تعنى short int و long int على ، سبيل المثال short تعنى signed short int .

بيانات الأعداد الحقيقية (التى تحتوى على نقطة عشرية)من نوع Float point :
الأنواع float و double مع النوع long double تعتبر أنواع الأعداد الحقيقية التى تحتوى على نقطة عشرية وتسمى float . المترجم ميكروسى برو يعتبر الثلاثة أنواع من نفس النوع ، كما هو مبين بالجدول التالى :


عامل التخصيص (التعيين) Assignment Operator :
• يستخدم عامل التخصيص لتخصيص (تعيين) قيمة إلى متغير .
• عامل التخصيص يشار إليه بعلامة التساوى “=” .
• عامل التخصيص يتعامل مع قيمتان ، قيمة على جانبه الأيسر ، وقيمة على جانبه الأيمن ، ويقوم العامل بنسخ القيمة التى على جانبه الأيمن إلى القيمة التى على جانبه الأيسر .



إعلان المتغير Variable Declaration :
مفهوم إعلان المتغير هو إعطاء أمر للمترجم لكى يقوم بحجز مواقع ذاكرة تتناسب مع نوع البيانات التى يقوم هذا المتغير بتخزينها .
صيغ إعلان المتغير :
الصيغة الأولى : نوع البيانات يليه اسم المتغير .

[codedataType variableName;] [/code]

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

الصيغة الثانية : نوع البيانات ، يليه اسم المتغير ، ثم تخصيص قيمة لهذا المتغير .

كود:
dataType   variableName  =  initialValue ;
هذه الصيغة تعلن عن المتغير ، وتعلن عن نوع بياناته ، وتحجز ذاكرة له ، وتضع قيمة ابتدائية فى هذه الذاكرة .

الصيغة الثالثة :

كود:
dataType   variableNameOne, variableNameTwo ;
هذه الصيغة تعلن عن متغيرين ، والاثنين من نفس النوع من البيانات ، وتحجز ذاكرة لكل منهما ، ولكنها لا تضع أى شىء فى أى من المتغيرين . يمكن القيام بعمل ذلك مع أكثر من متغيرين ، إذا أرد ذلك .

الصيغة الرابعة :

كود:
dataType   variableNameOne  =  initialValueOne, 
           	       variableNameTwo  =  initialValueTwo ;
هذه الصيغة تعلن عن متغيرين ، كلاهما له نفس نوع البيانات ، وتحجز الذاكرة اللازمة ، وتضع قيمة ايتدائية فى كل متغير . يمكنك كتابة الصيغة فى سطر واحد ، كما يمكنك إعلان أكثر من متغيرين بنفس الطريقة .
لعلك لاحظت الفاصلة “,” الموجودة بين المتغيرات ، والفاصلة المنقوطة “;” فى نهاية عبارة الإعلان .


فيما يلى أمثلة للأنواع المختلفة من المتغيرات :
• المتغيرات :


كود:
unsigned char 
or
unsigned short int
هى متغيرات "بدون إشارة" 8 بت ، تحتل "واحد بايت" فقط من الذاكرة ولها قيم فى المدى من (0) إلى (255) .
فى المثال التالى ، المتغير Sum يخصص (يعين) له القيمة (255) :

كود:
unsigned char Sum = 225;
 or
unsigned char Sum;
Sum = 225;

• والمتغيرات :

كود:
unsigned int
هى متغيرات "بدون إشارة" 16 بت ، تحتل "2 بايت" من الذاكرة ولها قيم فى المدى من (0) إلى (65 535) . فى المثال التالى ، المتغير Total يخصص له القيمة (64 500) :

كود:
unsigned int Total = 64500;
• والمتغيرات :

كود:
unsigned long int
هى متغيرات بدون إشارة 32 بت ، تحتل 4 بايت من الذاكرة ولها قيم فى المدى من (0) إلى
4 294 967 295 . فى المثال التالى ، المتغير Sum يخصص له القيمة 4 200 000 000 :

كود:
unsigned long int Sum = 4200000000;
• والمتغيرات :

كود:
signed char 
or 
signed short int
هى متغيرات "بإشارة" 8 بت ، نحتل واحد بايت فقك من الذاكرة ولها قيم فى المدة من (-128) إلى (+127) . فى المثال التالى المتغير Total يخصص له القيمة (-40) :

كود:
signed char Total = -40;
• والمتغيرات :

كود:
signed int
هى متغيرات بإشارة 16 بت ، تحتل 2 بايت من الذاكرة ولها قيم فى المدى من (-32 768) إلى (+32 767) . فى المثال التالى ، المتغير Sum يخصص له القيمة (-31 500) :

كود:
signed int Sum = -31500;
• والمتغيرات :

كود:
signed long int
هى متغيرات بإشار 32 بت ، تحتل 4 بايت من الذاكرة ولها قيم فى المدى من (-2 147 483 648) إلى
(+2 147 483 647) . فى المثال التالى ، المتغير Sum يخصص له القيمة (2 050 480 000) :

كود:
signed long int Sum = 2050480000;
• أنواع بيانات العدد الحقيقى هى : float, double , long double . فى المثال التالى ، المتغير Volume يخصص له القيمة (23.45) :

كود:
float Volume = 23.45;
or
float Volume;
Volume = 23.45;


أسماء المتغيرات:
• فى المترجم ميكروسى برو ، أسماء المتغيرات يمكن أن تبدأ بحرف أو الشرطة السفلية ( _ ) .
• أسماء المتغير يمكن أن تتضمن أى حرف من ( a ) إلى ( z ) ومن ( A ) إلى ( Z ) والأرقام من ( 0 ) إلى ( 9 ) .
• اسم المتغير يمكن أن يكون بطول حتى 31 حرف .
• بعض أمثلة أسماء المتغير الصحيحة :

كود:
Total 
Sum 
Average 
My_Variable 
username 
MaxTotal
 _Name
• وفيما يلى بعض الأمثلة لأسماء متغير غير صحيحة :



كود:
 %name 
?Total 
7Sum 
(Max 
12count

• الأسماء حساسة لحالة الحرف وبالتالى فإن المتغيرات بأسماء بحروف صغيرة تختلف عن المتغيرات بأسماء بحروف كبيرة . وبالتالى فأن المتغيرات التالية جميعها مختلفة :

كود:
 Total 
total 
ToTal 
TotaL 
TOTAL 
TOTal
الأسماء المحجوزة :
فى المترجم ميكروسى برو يتم حجز بعض الأسماء من أجل المترجم ، وهذه الأسماء لا يمكن أن تستخدم كأسماء للمتغيرات . الجدول أدناه يعطى قائمة بهذه الأسماء المحجوزة .




يمكن تقسيم المتغيرات إلى :
• متغيرات عمومية Global
• متغيرات محلية Local



المتغيرات العمومية Global : هى التى يتم إعلانها عند بداية البرنامج خارج أى دالة ، مجال هذه المتغيرات يكون عمومى global وهذا يعنى أنه يمكن الوصول إليها واستخدامها فى أى مكان بالبرنامج وفى داخل جميع الدوال . هذا النوع يستهلك الذاكرة نظرا لوجودة طوال البرنامج .
المتغيرات المحلية Local : هى التى يتم إعلانها داخل دالة ، ويكون مجالها محلى وهذا يعنى أنه يمكن الوصول إليها واستخدامها فقط داخل الدالة حيث تم إعلانها . هذا النوع يوفر من الذاكرة حيث يتم تحرير الذاكرة بعد نهاية الدالة .



السلام عليكم

ظهور عبارات كود الويب مع كود المثال أرجو التصحيح

صيغ إعلان المتغير :
الصيغة الأولى : نوع البيانات يليه اسم المتغير .

[codedataType variableName;] [/code]
كود:
dataType variableName;
وهل هذا الموضوع انتهى ؟



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