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

   

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



إعادة إدخال الدالة Function Reentrancy :
مترجم الميكروسى يدعم إعادة إداخال الدالة بشكل محدد . يمكن استدعاء الدوال التى ليس لها وسائط arguments والتى ليس لها متغيرات محلية على حد سواء من روتينات خدمة المقاطعة ومن البرنامج الرئيسى . الدوال التى لها وسائط و / أو متغيرات محلية يمكن استدعاؤها فقط من روتينات خدمة المقاطعة أو من البرنامج الرئيسى .

اعلانات

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


المتغيرات الساكنة للدالة Static Function Variables :
المتغيرات التى يتم إعلانها عند بداية البرنامج , قبل البرنامج الرئيسى , هى متغيرات شاملة global , ويمكن الوصول إلى قيمها وتعديلها عن طريق جميع أجزاء البرنامج .
إعلان المتغير المستخدم فى دالة كمتغير شامل يضمن أن قيمته يتم الحفاظ عليها من إستدعاء للدالة إلى استدعاء آخر , ولكن هذا أيضا يقوض خصوصية المتغير , ويقلل من قابلية الدالة للتطبيقات الأخرى . أفضل إسلوب هو إعلان مثل هذه المتغيرات كمتغيرات ساكنة (ثابت) static . تستخدم المتغيرات الساكنة أساسا فى تعريفات الدالة .عندما يتم إعلان المتغير على أنه ساكن , يتم الاحتفاظ بقيمته من استدعاء دالة إلى استدعاء آخر .
مثال :
فى المثال التالى , يتم إعلان المتغير k على أنه ساكن وتهيئته بقيمة ابتدائية هى الصفر . بعد ذلك يتم تزايد هذا المتغير قبل الخروج من الدالة , وقيمة k تظل موجودة وتحتفظ بآخر قيمة لها فى الاستدعاء التالى للدالة ( أى أنه فى الاستدعاء الثانى تكون قيمة k هى واحد 1 )


كود:
void Cnt(void) { static int k = 0; // Declare k as static . . .. . .. . .. . .. . .. . . . . .. . .. . .. . .. . .. . . K++‏‏; // increment k }



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

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


الجزء السابق فى ملف Word رابط

http://www.eeecb.com/vb/showthread.php?p=3643&posted=1#post3643



القادم :

الدوال المدمجة بالميكروسى
mikroC Built-in Functions


الصورة الرمزية كرار العامري
كرار العامري
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2010
الدولة: العراق
المشاركات: 159
نشاط [ كرار العامري ]
قوة السمعة:
قديم 03-12-2012, 08:32 PM المشاركة 20   
افتراضي


السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
لي الشرف ان اكون اول من يوجه لك الشكر الجزيل على مواضيعك المتميزة
اسأل الله العزيز الجليل ان يوفقك لكل خير ويجعل هذا المجهود في ميزان حسناتك



وما توفيقي إلا بالله العلي العظيم


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


السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
لي الشرف ان اكون اول من يوجه لك الشكر الجزيل على مواضيعك المتميزة
اسأل الله العزيز الجليل ان يوفقك لكل خير ويجعل هذا المجهود في ميزان حسناتك



وما توفيقي إلا بالله العلي العظيم
وعليكم السلام ورحمة الله وبركاته

أخى الكريم

شكرا جزيلا لك

بارك الله فيك

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


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


الدوال المدمجة بالميكروسى mikroC Built-in Functions :
يوفر مترجم الميكروسى مجموعة من الدوال المدمجة والتى يمكن استدعاؤها من البرنامج . الدول التالى يبين قائمة بهذه الدوال , جنبا إلى جنب مع وصف موجز لكل منها .
يمكن استخدام معظم هذه الدوال فى البرنامج دون الحاجة إلى تضمين include ملفات الرأس header files , باستثناء الدوال Lo, Hi, Higher, Highest والتى تتطلب ملف الرأس built_in.h . مزيد من التفاصيل حول هذه الدوال متاح فى وثائق مترجم الميكروسى .





الدوال Delay_us و Delay_ms تستخدم بكثرة فى البرامج التى تتطلب التأخير ( على سبيل المثال , وميض ليد LED ) . المثال التالى يوضح استخدام الدالة Delay_ms .
مثال 10 :


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


مثال 10 :
الشكل التالى يبين ليد متصل بالبت b0 للمنفذ PORTB(pin RB0) للميكروكونترولر PIC16F877A من خلال مقاومة الحد من التيار .
المطلوب :
اختيار القيمة المناسبة للمقاومة وكتابة البرنامج الذى سوف يقوم وميض الليد بصفة مستمرة ON) و OFF) بفاصل زمنى intervalsقدرة واحد ثانية .

الحل :
يمكن توصيل الليد إلى الميكروكونترولر بإسلوبين :
  • مصب التيار current sinking .
  • منبع التيار current sourcing .

فى إسلوب مصب التيار : (كما هو مبين بالشكل) يتم توصيل أحد أطراف الليد إلى +5V وتوصيل الطرف الآخر إلى طرف منفذ خرح الميكروكونترولر من خلال مقاومة الحد من التيار R .

تحت ظروف العمل العادى , الجهد عبر الليد يكون 2V والتيار خلال الليد يكون حوالى 10mA ( بعض ليدات القدرة المنخفضة يمكن أن يعمل عند تيار منخفض حوالى 1mA ) .
الحد الأقصى للتيار الذى يمكن أن يصب فى أو يصدر من طرف منفذ الخرج للميكروكونترولر PIC هو 25mA .
يمكن حساب قيمة مقاومة الحد من التيار كما يلى : فى إسلوب مصب التيار سوف يتم توصيل ONالليد عندما يكون طرف منفذ الخرج للميكروكونترولر عند المنطق 0 ( أى 0V تقريبا) . عندئذ تكون المقاومة المطلوبة :



يمكن اختيار قيمة المقاومة 330Ω للحصول على تيار أقل مع شدة إضاءة أقل قليلا .

فى إسلوب منبع التيار : (كما فى الشكل) , يتم توصيل أحد أطراف الليد بطرف منفذ خرج الميكروكونترولر والطرف الآخر يتم توصيله بالأرضى خلال مقاومة الحد من التيار . فى هذه الحالة , سوف يتم توصيل ON الليد عندما يكون طرف منفذ خرج الميكروكونترولر عند المنطق 1 ( +5V تقريبا ) . يمكن استخدام نفس قيمة المقاومة فى كل من الإسلوبين .

فيما يلى البرنامج المطلوب .


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


فيما يلى البرنامج المطلوب .
  • فى بداية البرنامج يتم تهيئة المنفذ PORTB كخرج باستخدام العبارة TRISB = 0 .
  • بعد ذلك يتم تشكيل حلقة غير منتهية بحلقة for .
  • وبداخل هذه الحلقة يتم توصيل وفصل الليد مع تأخير زمنى بقيمة واحد ثانية بين المخارج .
كود:
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ This program flashes an LED connected to port RB0 of a microcontroller with one second intervals. mikroC built-in function Delay_ms is used to create a 1 second delay between the flashes. ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ void main() { TRISB = 0; // Configure PORTB as output for(; ;) // Endless loop { PORTB = 1; // Turn ON LED Delay_ms(1000); // 1 second delay
PORTB = 0; // Turn OFF LED Delay_ms(1000); // 1 second delay } }





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


كود:
/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ This program flashes an LED connected to port RB0 of a microcontroller with one second intervals. mikroC built-in function Delay_ms is used to create a 1 second delay between the flashes. ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ #define LED PORTB.F0 #define ON 1 #define OFF 0 #define One_Second_Delay Delay_ms(1000)
void main() { TRISB = 0; for(; ;) { LED = ON; One_Second_Delay;
LED = OFF; One_Second_Delay; }
}



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