دورات هندسية

 

 

الحلقة الثالثة للميكروكونتروللر 8051

صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 10 من 13
  1. [1]
    الصورة الرمزية رحال حول العالم
    رحال حول العالم
    رحال حول العالم غير متواجد حالياً

    عضو فعال جداً

    تاريخ التسجيل: Apr 2006
    المشاركات: 356
    Thumbs Up
    Received: 4
    Given: 0

    الحلقة الثالثة للميكروكونتروللر 8051

    قبل البداية فى كتابة الاكواد يجب ان انوه عن الوسيط البرمجى المستخدم و هو برنامج
    KEIL
    و الرابط التالى يقودنا الى موقع الشركة المنتجة و التى تتيح تحميل نسخة تجريبية
    http://www.keil.com/c51

    البرنامج ببساطة يتيح كتابة الاكواد بلغة الاسمبلى او السى ثم يترجمها الى لغة الــ HEXADECIMAL
    مع توفير محاكى بسيط لمن يرغب فى التجربة عبر البرنامج دون التركيب العملى .

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

    أولاً :- دائرة امداد بالطاقة 5 فولت
    Power Supply
    و يمكن الحصول عليها جاهزة من خلال استخدام وحدة تغذية الحاسب الشخصى (( وحدة قديمة مثل التى تغذى جهازكم حالياً و ليست الوحدة التى تعمل بالفعل تجنباً لحدوث مشاكل مع الحاسب )) و يكون الطرف ذو اللون الاسود هو الطرف السالب بينما الطرف الاحمر هو مصدر التغذية بجهد 5 فولت ,,, و يجب الحذر من استخدام الطرف الاصفر لانه يغذى بجهد 12 فولت مما يتسبب فى تلف الميكرو و ملحقاته .

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

    ثانياً :-الميكروكونتروللر و ملحقاتـــه


    سنستخدم الميكروكونتروللر الذى يحمل الرقم ِ89C52 و ليس 8051 لان الاول له سعة تخزين ضعف الثانى ,, و لمن يسكن بالقاهرة الكبرى يمكنهم شراؤه من محل بيع المكونات الاليكترونية والذى يسمى RAM فى باب اللوق


    كذلك سنحتاج الى المكونات التالية :-


    عدد (1 ) مذبذب Crystal 12 MHz

    عدد ( 2 ) مكثف سعة
    33p.f أو 22p.f أو 27 p.f


    عدد ( 1 ) مكثف سعة
    1 micro f.


    عدد ( 1 ) مكثف سعة
    micro f. 10


    عدد ( 1 ) مقاومة
    8.2 كيلو اوم


    عدد ( 8 ) مقاومات
    330 اوم


    عدد ( 8 ) ثنائى ضوئى
    LED ألوان مختلفة


    عدد ( 8 ) مقاومة
    1 كيلو اوم


    عدد ( 1 ) لوحة اختبار
    Bread Board


    مجموعة اسلاك توصيل خاصة بلوحة الاختبار (( اسلاك مفردة بسمك نصف مللى تقريباً ,,,, تشبه تلك الخاصة بوصلة الهاتف ))


    الصورة التالية توضح دائرة الميكروكونتروللر بعد توصيلها بمصدر التغذية و الملحقات



    بعد الاطلاع على نتيجة الاستفتاء الخاص بأنسب لغات البرمجة للميكروكونتروللر تبين ان معظم المشاركين يرغبون فى تعلم برمجة الميكروكونتروللر بلغة Assembly و كان ذلك من خلال الاستفتاء الذى اجريته فى الثلاث منتديات التى اكتب فيها هذه الدورة و كانت النتيجة الاجمالية 38 يفضلون لغة السى بينما 44 يفضلون لغة الاسمبلى

    لذلك سأضم صوتى مع الاغلبية و ابدأ فى الشرح بلغة الاسمبلى و اذا قدر الله تعالى و احيانا يمكن تخصيص حلقة اخرى لشرح البرمجة بلغة السى و الله المستعان ........... لكن دعونا نبدأ مع لغة الاسمبلى و نتقنها و من ثم فسنبدأ سوياً الحلقة الثالثة مع كتابة اكواد بسيطة و سهلة .






    بعد إعداد البرنامج و تجهيزه للعمل على حاسبك الشخصى يتم عمل الخطوات التالية :-


    1-إنشاء مشروع جديد و نعطيه اسم ,,,, ليكن project 1 .... على اساس ان هذا اول مشروع سنتعامل معه و ليس له وظيه و محددة

    2-يتم إختيار نوع الميكروكونتروللر المستخدم (( 8952 ))

    3-يتم إضافة الخيارات للمشروع

    4-يتم فتح ملف جديد

    5-يتم حفظ الملف باسم Project1.asm و

    6-يتم إضافة الملف الى المشروع Project1 و



    الخطوات السابقة خطوات اساسية لكل مشروع سيتم انشائه مستقبلياً و سيتم انشاؤها بشكل تلقائى مع تغيير اسم المشروع و اسم الملفات المدرجة فيه و من ثم سنتناول كيفية اجراء هذه الخطوات بالتفصيل ليتسنى للجميع التأكد من امكانية تكرارها لاحقاً دونما اعادة شرحها مع امثلة اخرى




    الخطوة رقم ( 1 )

    نذهب الى قائمة الاوامر Project و نختار New Project



    Project --------> New Project




    نقوم باختيار اسم للمشروع و ليكن Project1 و نحدد مسار مجلد الحفظ




    الخطوة رقم ( 2 )



    نحدد نوع الميكروكونتروللر المستخدم

    طبعاً نذهب الى كلمة Atmel

    ثم نختار AT89C52











    الخطوة رقم ( 3 )



    بالضغط على الزر الايمن عند مربع شجرة الملفات و تحديداً على كلمة Target1

    نختار الامر Option for target ‘Target1’





    يظهر مربع حوار ,,, له قائمة target نكتب فيها تردد الكريستال المستخدم و هو 12MHz و نضع علامة على مربع الاختيار الخاص بنوع الذاكرة المستخدمة " حتى هذه اللحظة سنتعامل مع الذاكرة الداخلية " Use On_Chip ROM




    تذهب الى قائمة OUTPUT على نفس صندوق الحوار و نتأكد من اختيار كل مما يلى

    Brows information

    Create HEX File





    ثم نضغط

    OK



    الخطوة رقم ( 4 )

    لاضافة ملف جديد نذهب الى القائمة File و نختار الامر New

    File ---------> New



    سيفتح امامنا ملف نصى باسم TEXT1 او TEXT2 حسب عدد الملفات السابق فتحها






    الخطوة رقم ( 5 )


    يتم حفظ الملف بالامر Save As

    File ----------> Save As




    نختار اسم للملف " عادة نعطيه اسم يدل على محتوى البرنامج ,, هنا سنسميه باسم المشروع " مع الاخذ فى الاعتبار كتابة امتداد الملف asm فيكون الاسم المكتوب هو Project1.asm






    الان نراقب اسم الملف و قد تغير من TEXT الى Project1.asm و ظهر امامنا الصفحة البيضاء الجاهزة لتحرير الكود





    الخطوة رقم ( 6 )


    لاضافة الملف الى المشروع

    بالضغط على الزر الايمن لــ Source Group1 نختار Add Files To Group

    يظهر مربع حوار للبحث عن الملف المراد اضافته للمشروع ,,, و عادة يبحث عن ملف بامتداد C لان هذا البرنامج يسمح بكتابة الاكواد بلغة السى ايضاً





    فى الخانة الخاصة بـنوع الملفات Files Of Type نختار *.* لاظهار كافة الملفات و من ثم يظهر لنا الملف المحفوظ مسبقاً باسم project1.asm و الذى نقوم باختياره ثم نضغط على Add










    الان اصبح الملف جاهز تماماً لكتابة الكود









  2. [2]
    FIRAST
    FIRAST غير متواجد حالياً
    عضو


    تاريخ التسجيل: Aug 2007
    المشاركات: 17
    Thumbs Up
    Received: 1
    Given: 0

    Lightbulb

    الأخ العزيز :

    شـــكرا جزيلا على المجهود الكبير والمعلومات التي زودتنا بها ، و نحن بانتظار المزيد ..

    0 Not allowed!



  3. [3]
    hejaze
    hejaze غير متواجد حالياً
    عضو


    تاريخ التسجيل: Jul 2007
    المشاركات: 26
    Thumbs Up
    Received: 0
    Given: 0
    السلام عليكم ..

    أخ رحال .. مجهود رائع .. جعله الله في ميزان حسناتك ..

    تحياتي ..

    0 Not allowed!



  4. [4]
    Dr.Ayman
    Dr.Ayman غير متواجد حالياً
    عضو


    تاريخ التسجيل: Nov 2006
    المشاركات: 11
    Thumbs Up
    Received: 0
    Given: 0
    جزاك الله كل خير
    سؤال من فضلك هل انتهيت هكذا ام ان هناك تكملة؟

    0 Not allowed!



  5. [5]
    رحال حول العالم
    رحال حول العالم غير متواجد حالياً
    عضو فعال جداً
    الصورة الرمزية رحال حول العالم


    تاريخ التسجيل: Apr 2006
    المشاركات: 356
    Thumbs Up
    Received: 4
    Given: 0

    Cool نحن لم نبدأ بعد

    اقتباس المشاركة الأصلية كتبت بواسطة Dr.Ayman مشاهدة المشاركة
    جزاك الله كل خير
    سؤال من فضلك هل انتهيت هكذا ام ان هناك تكملة؟
    الاخ العزيز Dr.Ayman

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


    0 Not allowed!









    محمـــــــــــــــــــد ...... بشر ليس كالبشر
    فهو لــــــــــؤلــــــــــؤة و الناس كالحجر




    مولاى صلى و سلم دائماً ابداً على حبيبك خير الناس كلهم

    .................................................. ...................................

  6. [6]
    رحال حول العالم
    رحال حول العالم غير متواجد حالياً
    عضو فعال جداً
    الصورة الرمزية رحال حول العالم


    تاريخ التسجيل: Apr 2006
    المشاركات: 356
    Thumbs Up
    Received: 4
    Given: 0

    Post الجزء الثانى

    اليوم نكتب اول كود و نشاهد التطبيق المباشر له


    اول امر نتعرض له هو الامر MOV

    يستخدم هذا الامر فى نقل بيانات من موضع المصدر Source الى موضع الهدف Destination

    الصيغة العامة للامر تكون كالتالى :-
    MOV Dest. , Source

    مثال
    MOV P2 ,#10101010b
    END



    P2 تعبر عن ان الخرج سيتم ارساله على ميناء التوصيل رقم 2 = Port2

    العلامة # تدل على ان القيمة التى تم كتابتها بعدها " 10101010 " تعبر عن رقم و الحرف b يعبر عن نوع الرقم “ b = Binary “ اى انه رقم ثنائى .


    يمكن كتابة التالى

    MOV P2 ,#AAh

    هنا حرف h يدل على ان الرقم يخضع للنظام السادس عشرى “h = Hexadecimal “

    MOV P2 ,#170


    هنا عدم كتابة اى حروف بعد الرقم تدل على ان الرقم فى النظام العشرى Decimal


    نلاحظ ان اكبر رقم يمكن استخدامه فى النظام العشرى هو 255 حيث ان الارقام المستخدمة تتراوح بين 0 الى 255 باجمالى 256 رقم و هو ما يعبر عنه نوع الميكروكونتروللر ,,,,, فقد سبق و قلنا انه 8 Bit و من ثم 2 مرفوعة للقوى 8 تعطى 256

    256=8^2




    بما فيهم الصفر و بالتالى اكبر رقم يمكن استخدامه هو 255

    بالتالى نلاحظ ان العدد 255 فى النظام العشرى يكافئه العدد FF فى النظام السادس عشرى و العدد 11111111 فى النظام الثنائى .


    و من ثم فان القيمة 10101010 بالثنائى تتساوى مع AA فى السادس عشرى و تتياوى مع 170 فى النظام العشرى


    إذن اى صيغة سنستخدمها يجب ان تعطى نفس النتيجة و يجب ان نتجنب استخدام ارقام اكبر من 11111111 فى الثنائى او اكبر من FF فى السادس عشرى او اكبر من 255 فى النظام العشرى و الا سيظهر لنا المترجم Compiler رسالة تحذيرية Truncated Value و التى تفيد استخدام رقم اعلى مما يمكن ان يتعامل معه الميكروكونتروللر المستخدم و الذى يتعامل مع 8 بت فقط .


    الامر END لن يتم إدخاله على الميكروكونتروللر و لكنه مجرد مؤشر الى المترجم Compiler بأن الكود قد انتهى ,,,, و ذلك حتى نعلم ان الميكروكونتروللر يظل ينفذ الاوامر دون توقف الا اذا اعطيناه امراً بالتوقف .



    و الان و بعد تحرير الكود السابق يأتى الدور على ترجمة هذا الكود و يتم ذلك باستخدام القائمة Project و اختيار الامر Build Target او الضغط على مفتاح الوظائف “ F7 “ او اختيار علامة انشاء الهدف من قائمة الاختصارات الموجودة بالبرنامج



    هنا نتأكد من أنه لا توجد رسائل خطأ او رسائل تحذيرية ,,,, و بالتالى الكود الذى تم ادخاله صحيح


    و الان جاء الدور على مشاهدة نتيجة هذا الكود


    اولاً باستخدام البرنامج KEIL نقوم بعمل الخطوات التالية :-


    اولاً :- الذهاب الى القائمة Debug و اختيار الامر Start/Stop Debug Session

    او الضغط على مفتاحى Ctrl + F5 مباشرة

    او اختيار العلامة المكتوب عليها حرف d باللون الاحمر من شريط الاوامر المختصرة بالبرنامج


    ثانياً :- الذهاب الى القائمة peripherals و اختيار الامر I/O-Ports و منها اختيار Port 2 حيث انها الهدف الذى سبق اختياره فى الامر لاخراج بيانات المصدر عليه


    سيظهر لنا جدول يعبر عن شكل الميناء رقم 2 “ Prot 2 “ و الوضع الابتدائى للبيانات الخاجة عليها قبل التنفيذ ,,,, نجد انه يعطى 1 على الاطراف كقيمة ابتدائية


    ثالثاً :- الذهاب الى القائمة Debug و اختيار الامر Go

    او الضغط مباشرة على المفتاح F5


    هنا نشاهد نتائج تنفيذ البرنامج تماماً كما اردناها


    لانهاء عرض تنفيذ البرنامج نقوم بايقاف البرنامج من خلال تنفيذ الخطوة فى أولاً ............ الذهاب الى القائمة Debug و اختيار الامر Start/Stop Debug Session

    او الضغط على مفتاحى Ctrl + F5 مباشرة

    او اختيار العلامة المكتوب عليها حرف d باللون الاحمر من شريط الاوامر المختصرة بالبرنامج


    و الان حان الدور على نقل البرنامج من على الكمبيوتر الى الميكرومونتروللر


    نحن الآن نحتاج الى الملف بصيغة الاسمبلى و يتم الحصول عليه من خلال الذهاب الى القائمة Project ثم اختيار الامر Build All Target Files او استخدام الامر من شريط الاختصارات بالبرنامج


    بالذهاب الى المجلد الذى تم حفظ المشروع فيه سنجد الملف Project1.asm و اخر بنفس الاسم و لكن ذو امتداد hex ==== Project1.hex

    نأخذ هذا الملف و نقوم بتحميله على الميكروكونتروللر من خلال المبرمجة الخاصة بالميكروكونتروللر 8051 و البرنامج الخاص بها .

    و لقد سبق و ذكرت الى ان هناك مفاجأة الى الزملاء المشاركين بايجابية فى الدورة و ذكرت اسمائهم .... و اليوم حان وقت اظهار المفاجأة .


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


    و من ثم لن يكونوا فى حاجة الى شراء او تنفيذ مبرمجة فى الوقت الحالى او الاضطرار الى الذهاب الى الاماكن التى توفر برمجة الميكروكونتروللر بمقابل مادى معروف لدينا جميعاً ......

    اتمنى ان اكون قد وفيت بوعدى تجاه هؤلاء الزملاء و ان تكون المفاجأة سارة لهم


    نعود الى حيث كنا


    بعد ان نقوم بنقل الملف Project1.hex الى الميكروكونتروللر نقوم بتوصيل الدائرة التالية



    و يجب ملاحظة ان الحمل يتم توصيله بين خرج الميكرو و مصدر التغذية 5 فولت و ليس الارضى على اعتبار ان شرط العمل هو اخراج 0 من الميكرو و ليس 1 و هو ما يعرف بـــ Active Low تجنباً لسحب تيار عالى من الميكرو .


    و نراقب الثنائيات الضوئية و ترتيب قيم الــ 1 و الــ 0 على الخرج



    إذا عكسنا اطراف التوصيل و كانت بين الميكرو و الارضى

    سنلاحظ ان الثنائيات الضوئية التى خرج عليها القيمة 1 ستضئ و الثنائيات الضوئية التى خرج عليها القيمة 0 لن تضئ ,,,,, و كذلك قد نلاحظ ان الثنائيات التى اضائت خافته بعض الشئ

    لذلك سنقوم بعمل Buffer بين اطراف الخرج للميكروكونتروللر و الاخمال من خلال استخدام احد هذه المتكاملات 7432 == OR Gate او AND Gate ==== 7408 او اى نظام لعمل الـــ Buffer مثل الترانزيستورات مثلاً او اى نوع من انواع الـــ Buffer المشهورة و الشائعة الاستخدام


    و هنا اترك المجال مفتوحاً للزملاء .... كل من يعرف وسيلة لعمل الــ Buffer يقوم بعرضها لتعم الفائدة .


    0 Not allowed!









    محمـــــــــــــــــــد ...... بشر ليس كالبشر
    فهو لــــــــــؤلــــــــــؤة و الناس كالحجر




    مولاى صلى و سلم دائماً ابداً على حبيبك خير الناس كلهم

    .................................................. ...................................

  7. [7]
    رحال حول العالم
    رحال حول العالم غير متواجد حالياً
    عضو فعال جداً
    الصورة الرمزية رحال حول العالم


    تاريخ التسجيل: Apr 2006
    المشاركات: 356
    Thumbs Up
    Received: 4
    Given: 0

    Cool نسخة كاملة و جاهزه من البرنامج

    السلام عليكم
    الرابط التالى يوصلنا الى نسخة جاهزة للعمل من البرنامج KEIL على ان يتم نسخ المجلد الى المسار C:\

    و من ثم يكون مسار االبرنامج كالتالى
    C:\Keil\UV2\uv2.exe
    و يجب عمل Short Cut لملف التشغيل هذا على سطح المكتب


    http://www.4shared.com/file/22879209...ified=920e6616

    0 Not allowed!









    محمـــــــــــــــــــد ...... بشر ليس كالبشر
    فهو لــــــــــؤلــــــــــؤة و الناس كالحجر




    مولاى صلى و سلم دائماً ابداً على حبيبك خير الناس كلهم

    .................................................. ...................................

  8. [8]
    مصطفي عبدالغني
    مصطفي عبدالغني غير متواجد حالياً
    جديد


    تاريخ التسجيل: Aug 2007
    المشاركات: 6
    Thumbs Up
    Received: 0
    Given: 0
    في الحقيقة انا مشترك جديد واسال عن رسم تنفيذي سليم لدئرة burner لكي يتسني لي العمل في المنزل

    0 Not allowed!



  9. [9]
    مصطفي عبدالغني
    مصطفي عبدالغني غير متواجد حالياً
    جديد


    تاريخ التسجيل: Aug 2007
    المشاركات: 6
    Thumbs Up
    Received: 0
    Given: 0
    وايضا اريد ان اتعلم اساسيات عامة عن الميكروكونتروللر.

    0 Not allowed!



  10. [10]
    رحال حول العالم
    رحال حول العالم غير متواجد حالياً
    عضو فعال جداً
    الصورة الرمزية رحال حول العالم


    تاريخ التسجيل: Apr 2006
    المشاركات: 356
    Thumbs Up
    Received: 4
    Given: 0
    الآن علينا أن نعرف أن كل مجموعة أوامر تؤدى وظيفة محددة يمكن درجها تحت مسمى خاص و نطلق عليها حينئذ اسم procedure المثال التالى يوضح هذه الفكرة
    :Loop
    Move p1,#01010101b
    Sjmp loop
    End
    اسم الــ procedure هنا هو Loop
    الامر sjmp هو امر يستخدم للقفز الى مكان معين ,,,, و يستخدم مع الصيغ التالية :-
    sjmp $ 1 هنا يتم عمل قفز الى نفس المكان
    sjmp $-1 هنا يتم عمل قفز الى المكان السابق
    sjmp $+1 هنا يتم عمل قفز الى المكان التالى
    Sjmp loop
    هنا سيتم استدعاء الــ procedure المسمى loop من خلال الامر sjmp
    بالتالى تنفيذ الـ procedure المسمى loop سيتسبب فى عمل تكرار لا نهائى لمجموعة الاوامر الموجودة داخله بلا توقف .

    0 Not allowed!









    محمـــــــــــــــــــد ...... بشر ليس كالبشر
    فهو لــــــــــؤلــــــــــؤة و الناس كالحجر




    مولاى صلى و سلم دائماً ابداً على حبيبك خير الناس كلهم

    .................................................. ...................................

  
صفحة 1 من 2 12 الأخيرةالأخيرة
الكلمات الدلالية لهذا الموضوع

عرض سحابة الكلمة الدلالية

RSS RSS 2.0 XML MAP HTML