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

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 16-03-2012, 12:53 PM المشاركة 25   
افتراضي



تدريب :
المطلوب التعرف على الأقسام (البلوكات) الرئيسية فى البرنامج (ليس المطلوب الآن فهم طريقة عمل البرنامج ):

كود:
/* * Project name: PWM_Test_01 (PWM library Demonstration ) MCU: PIC16F877A Oscillator: XT, 4.0 MHz SW: mikroC PRO * NOTES: None. */ unsigned short i, j; InitMain void () { PORTB = 0; TRISB = 0; ADCON1 = 0x0F; PORTA = 255; TRISA = 255; PORTC = 0x00; TRISC = 0; Pwm_Init (5000); } // ~! void main () { initMain (); i = 127; j = 0; Pwm_Start (); while (1) { if (Button (& PORTA, 0,1,1)) i + +; if (Button (& PORTA, 1,1,1)) i--; if (j !=i) { Pwm_Change_Duty (i); j = i; PORTB = j; } Delay_ms (200); } }//~!
الأقسام :
القسم الأول : التعليقات Comments:
كود:
/* * Project name: PWM_Test_01 (PWM library Demonstration ) MCU: PIC16F877A Oscillator: XT 4.0 MHz SW: mikroC PRO * NOTES: None. */
هذا الجزء من البرنامج هو تعليقات وهو مسؤول عن توثيق البرنامج . عند ترجمة البرنامج فإن هذه النصوص لن تؤخذ فى الاعتبار من جانب المترجم .

القسم الثانى : الرأس headerوإعلان المتغيرات العمومية global variables:


كود:
unsigned short i, j;

فى هذا القسم تم إعلان متغيرات عمومية global variable للبرنامج .

القسم الثالث : الدوال الفرعية subroutines :

كود:
InitMain void () { PORTB = 0; TRISB = 0; ADCON1 = 0x0F; PORTA = 255; TRISA = 255; PORTC = 0x00; TRISC = 0; Pwm_Init (5000); } // ~!



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

كود:
InitMain ();

القسم الرابع : الدالة الرئيسية :




كود:
void main () {
  InitMain ();
 i = 127;
  j = 0;
  Pwm_Start ();

  while (1) {
    if (Button (& PORTA, 0,1,1))
      i + +;
    if (Button (& PORTA, 1,1,1))
      i--;
      if (j !=i) {
      Pwm_Change_Duty (i);
      j = i;
      PORTB = j;
    }
    Delay_ms (200);
  }
}//~!
كود:




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

إرشادات :
لماذا نستخدم الدوال الفرعية ؟
  • للسماح بإعادة استخدام الكود الذى تم بناءه (سواء بواسطتك أو بواسطة مبرمج آخر) .
  • لمنع تكرار مقطع من الكود عدة مرات داخل نفس البرنامج .
  • للسماح بتغيير قطعة من الكود بسرعة أكثر . عند استخدام الدالة تحتاج فقط لتغيير ما هو مطلوب داخل الدالة .
  • تستخدم خاصة فى البرامج الطويله والصعبة على الفهم .
  • قراءة وتتبع البرنامج بسهولة .
  • تقسيم البرنامج إلى أجزاء (بلوكات) والتى يمكن فهم منطق عمل كل على حدة (الوظيفة – المهمة).

اعلانات

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


نماذج (عينات) الدالة Function Prototypes :
لا يمكننا استخدام الدالة بدون إعلانها مسبقا . نموذج (عينة) الدالة هو عبارة توضع فى بداية البرنامج للتعرف على الدالة ويجب أن يسبق التعرف إستدعاء الدالة . هذا النموذج (العينة) يخبر المترجم بنوع بيانات نتيجة عودة (رجوع) الدالة وباسم الدالة وبالبارامترات التى تستقبلها .
مثال :

كود:
void Function_Prototypes void () /* function prototype, this program line should be placed on top of the program, along with the statements;*/ //.... void main () { // Here is my main program } //***************** Function subroutine ******************** void Function_Prototypes void () { // Here are the commands of its subroutine }

لاحظ أن الدالة الفرعية Function_Prototypes قد جاءت بعد الدالة الرئيسية main () , فى هذه الحالة من الضرورى وضع "نموذج الدالة" function prototype ( سطر من البرنامج به رأس الدالة الفرعية) عند قمة البرنامج وإلا فإن المترجم سوف يعطى خطأ لأننا لا نستطيع إستخدام أى دالة قبل إعلانها . فى حالة وضع الدالة الفرعية قبل الدالة الرئيسية main () فى البرنامج , فإننا لن نحتاج لإعلان نموذج الدالة فى البرنامج .

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

eng_eman
:: مهندس ::
تاريخ التسجيل: Mar 2012
المشاركات: 41
نشاط [ eng_eman ]
قوة السمعة:
قديم 16-03-2012, 02:08 PM المشاركة 27   
افتراضي


السلام عليكم ورحمة الله
اريد ان اعرف كيفية توصيل عدد كبير من اليدات بواسطة pic16f84A وليكن عدد اليدات 1000 ليد
وشكرا


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


السلام عليكم ورحمة الله
اريد ان اعرف كيفية توصيل عدد كبير من اليدات بواسطة pic16f84A وليكن عدد اليدات 1000 ليد
وشكرا
وعليكم السلام ورحمة الله وبركاته

أعتذر لك

الاستفسار خارج الدروس السابقة

من فضلك يمكنك وضع الاستفسار فى موضوع خاص به وإن شاء الله سوف تجدين الإجابة


مع تمنياتى بدوام التوفيق


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


الدرس السابق فى ملف بصيغة pdf على الرابط التالى :

http://www.eeecb.com/vb/attachment.php?attachmentid=106&d=1331899809


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


الدرس العاشر :
العوامل Operators
أنواع العوامل Types of Operators
تتيح البرمجة بلغة السى إستخدام العديد من العوامل operators . يمكننا تصنيف هذه العوامل فى فئات رئيسية هى : العواملالحسابية , عواملالمقارنة , العوامل المنطقية , والعواملالمنطقية الخاصة بالبت المفردة .

1- العوامل الحسابية Arithmetic operators :
تسخدم العوامل الحسابية لإجراء عمليات حسابية معينة بين البيانات, ولها معاملات operands عددية وتعود بنتائج عددية .
بيانات المتغيرات من نوع char تمثل إعداد صحيحة صغيرة لذلك يمكن أن تستخدم كمعاملات operands للعوامل الحسابية operations .
جميع العوامل الحسابية ترتبط (تتزامل) من اليسار لليمين .

تصنف هذه العوامل إلى فئتين :
· عوامل ثنائية المعاملاتBinary Operators .
· عوامل أحادية المعاملات Unary Operators.
العوامل ثنائية المعاملات : المستخدمة فى عمليات "الجمع" و "الطرح " و "الضرب" و "القسمة" و"باقى القسمة " .
والعوامل أحادية المعاملات : المستخدمة فى بيان إشارة "الموجب" أو السالب" وفى عملية التزايد وعملية التناقص .






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


أ‌- العوامل الحسابية الثنائية Binary Arithmetic Operators

1- عوامل عمليات الجمع والطرح: ( + , - )
عوامل عمليات الجمع والطرح سهلة الاستيعاب.
أمثلة :
كود:
c = a + b; d = d + b; c = c - a; a = d - a + c;
  • يمكن استخدام العوامل الحسابية فى معالجة الحروف .
أمثلة :

كود:
'A' + 32; /* equals 'a' (ASCII only) */
'G' - 'A' + 'a'; /* equals 'g' (both ASCII and EBCDIC) */
2- عوامل عمليات الضرب والقسمة : * , / ))
عوامل عمليات الضرب والقسمة أيضا سهلة الاستيعاب .
أمثلة :
كود:
c = a * b; d = D * d; c = c / a; A = (A *) / c;
ملحوظة :
  • نتيجة (عائد) قسمة عددان صحيحان هى عدد صحيح ويتم التخلص من باقى القسمة.
أمثلة :

كود:
7 / 4; /* equals 1 */
7 * 3 / 4; /* equals 5 */
كود:

3- عامل عملية إيجاد خارج قسمة الأعداد الصحيحة % :
يستخدم العامل % للحصول على نتيجة (عائد return ) باقى عملية قسمة الأعداد الصحيحة integer .
مثال :
عند قسمة العدد الصحيح 7 على العدد الصحيح 3 باستخدام العامل" /" تكون النتيجة 2 فقط أى
) 7/3 = 2 تسمى هذه العملية بقسمة الأعداد الصحية) . وباقى القسمة يساوى واحد ونحصل علية باستخدام عملية أخرى باستخدام العامل " % " أى 7% 3 = 1 (باقى خارج قسم 7 على 3 يساوى واحد ) .

ملحوظة :
  • عامل باقى القسمة % يعمل فقط مع الأعداد الصحيحة , إشارة النتيجة تساوى إشارة المعامل الأول.
  • أمثلة :
كود:
 

9 % 3; /* equals 0 */
7 % 3; /* equals 1 */ -7 % 3; /* equals -1 */




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



أ‌- العوامل الحسابية الأحادية Unary Arithmetic Operators

1- عوامل عمليات التزايد والتناقص ( ++ , -- ) :
تستخدم عوامل التزايد والتناقص فى إضافة واحد أو طرح واحد من المتغير .
مثال :
كود:
c = c+1;
فى هذا المثال يتزايد المتغير C بواحد . يمكننا الحصول على نفس النتيجة بعامل التزايد ++ : أى أن

كود:
c ++; // (equals c =c+1 ;)
c ++; // increment by 1 the value of the variable c
d--; // increment by 1 the value of the variable d

ملاحظة :
العوامل الأحادية للتزايد ++ والتناقص – هى فقط عوامل لغة السى التى يمكن أن تكون "سابقة"
( مثل ++k, --k ) أو "لاحقة" (مثل k++, k-- ) .عندما تكون "سابقة" يمكن تسميتها "تزايد-سابق" و "تناقص-سابق" عندئذ يتم إضافة أو طرح واحد من قيمة المعامل "قبل" التقييم . وعندما تستخدم "كلاحقة" يمكن أن تسمى "تزايد-لاحق" و "تناقص-لاحق" عندئذ يتم جمع أو طرح واحد من قيمة المعامل "بعد" التقييم .
مثال :
كود:
int j = 5; k = ++j; /*first j = j + 1=6, then k = j=6, which gives us j = 6, k = 6 */ but: int j = 5; k = j++; /*first k = j=5 ,then j = j + 1=6 , which gives us j = 6, k = 5 */


للتوضيح تتبع المثال التالى :


كود:
variable_a = variable_b ++;
لاحظ أن قيمة المتغير variable_b يتم تخصيصها للمتغير variable_a وبمجرد أن يتم ذلك يتزايد المتغيرvariable_b بواحد .
وهذا ينطبق أيضا على عملية التناقص :
كود:
variable_a = variable_b --;
هنا قيمة المتغير variable_b يتم تخصيصها للمتغير variable_a وبمجرد أن يتم ذلك يتناقص المتغير variable_b بواحد .

يجب أخذ الحيطة عند استخدام عوامل التزايد والتناقص فى البرمجة بلغة السى حيث أن :

كود:
variable_a = variable_b ++;
تختلف عن :
كود:
variable_a = ++ variable_b ;
ففى الحالة الأولى يتم تزايد المتغير variable_b "بعد" تخصيصة للمتغير variable_a بينما فى الحالة الثانية يتم تزايد المتغير variable_b "قبل" تخصيصة للمتغير variable_a .
مثال :

كود:
int a, b, c; a = 0; b=a ++;// b=a=0 then a=0+1=1 c = ++ a;//a=a+1=2 then c=a=2

فى هذه الحالة , بعد تنفيذ الثلاثة أوامر فإن قيمة المتغير a"" تكون 2 وقيمة المتغير "b" تكون 0وقيمة المتغير "c" تكون 2 .



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