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

   

الصورة الرمزية رحال حول العالم
رحال حول العالم
:: عضو فضي ::
تاريخ التسجيل: Nov 2006
الدولة: الخبر : السعودية & القاهرة : مصر
المشاركات: 155
نشاط [ رحال حول العالم ]
قوة السمعة:
قديم 27-08-2007, 08:52 PM المشاركة 9   
sun



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

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


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

اعلانات

الصورة الرمزية رحال حول العالم
رحال حول العالم
:: عضو فضي ::
تاريخ التسجيل: Nov 2006
الدولة: الخبر : السعودية & القاهرة : مصر
المشاركات: 155
نشاط [ رحال حول العالم ]
قوة السمعة:
قديم 27-08-2007, 09:58 PM المشاركة 10   
sun


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

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


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

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

الصورة الرمزية رحال حول العالم
رحال حول العالم
:: عضو فضي ::
تاريخ التسجيل: Nov 2006
الدولة: الخبر : السعودية & القاهرة : مصر
المشاركات: 155
نشاط [ رحال حول العالم ]
قوة السمعة:
قديم 29-08-2007, 11:28 AM المشاركة 11   
افتراضي




الآن علينا أن نعرف أن كل مجموعة أوامر تؤدى وظيفة محددة يمكن درجها تحت مسمى خاص و نطلق عليها حينئذ اسم procedure المثال التالى يوضح هذه الفكرة


:Loop

Move p1,#01010101b

Sjmp loop

End


اسم الــ procedure هنا هو Loop

الامر sjmp هو امر يستخدم للقفز الى مكان معين ,,,, و يستخدم مع الصيغ التالية :-

sjmp $ 1 هنا يتم عمل قفز الى نفس المكان

sjmp $-1 هنا يتم عمل قفز الى المكان السابق

sjmp $+1 هنا يتم عمل قفز الى المكان التالى


Sjmp loop


هنا سيتم استدعاء الــ procedure المسمى loop من خلال الامر sjmp

بالتالى تنفيذ الـ procedure المسمى loop سيتسبب فى عمل تكرار لا نهائى لمجموعة الاوامر الموجودة داخله بلا توقف .





elwaleed
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2006
الدولة: مصر
المشاركات: 110
نشاط [ elwaleed ]
قوة السمعة:
قديم 29-08-2007, 11:39 AM المشاركة 12   
افتراضي


جزاك الله خيرا
ولكن كيف انزل البرنامج لان الرابط لا يعطى شىء سوى اسم الملف


الصورة الرمزية رحال حول العالم
رحال حول العالم
:: عضو فضي ::
تاريخ التسجيل: Nov 2006
الدولة: الخبر : السعودية & القاهرة : مصر
المشاركات: 155
نشاط [ رحال حول العالم ]
قوة السمعة:
قديم 29-08-2007, 11:46 AM المشاركة 13   
attension


جزاك الله خيرا
ولكن كيف انزل البرنامج لان الرابط لا يعطى شىء سوى اسم الملف
http://www.4shared.com/file/22879209...ified=920e6616

عند الدخول على الرابط السابق يجب الانتظار قرابة الدقيقة حيث يظهر لك جملة Don't Like Waiting " مجرد إعلان للموقع لتشترك اشتراك دائم " ثم يظهر لك كلمة Download



elwaleed
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2006
الدولة: مصر
المشاركات: 110
نشاط [ elwaleed ]
قوة السمعة:
قديم 30-08-2007, 09:56 AM المشاركة 14   
افتراضي


جزاك الله خيرا
تم التحميل والحمد لله


mem222
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2007
المشاركات: 93
نشاط [ mem222 ]
قوة السمعة:
قديم 31-08-2007, 01:19 AM المشاركة 15   
افتراضي


جزاك الله خيرا أخي رحال حول العالم
على الشرح السهل الممتنع وجعل الله مستقرك الجنة
ولعدم توفر العناصر حتى الان اكتفيت بالبرنامج
ولكن وقعت في مشكلة
كتبت هذا الامر كما في الدرس الاخير
Move p1,#01010101b
وكان يعطيني رسالة خطأ
حاولت كثيرا حتى انني اعدت التطبيق من البداية اكثر من مرة
لمدة يومين وانا احاول
حتى جائني التصحيح منك شخصيا بأنها
Mov p1,#01010101b

تعلمت من التجربة ان حرف واحد قد يفسد البرنامج كاملا
وحفظت الخطوات التي اعدتها كثيرا

شكرا لك ولوقتك فقد افتني كثيرا

وانتظر التطبيق القادم


الصورة الرمزية رحال حول العالم
رحال حول العالم
:: عضو فضي ::
تاريخ التسجيل: Nov 2006
الدولة: الخبر : السعودية & القاهرة : مصر
المشاركات: 155
نشاط [ رحال حول العالم ]
قوة السمعة:
قديم 31-08-2007, 01:58 AM المشاركة 16   
افتراضي


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




سبق و أن ذكرنا أن الذاكرة الداخلية للميكروكونتروللر 8051 لا تتسع الا 64 كيلوبايت اما 8052 فتتسع لكود حجمه 128 كيلوبايت لذلك سنراعى دائماً حجم او سعة الكود التى سيتم كتابتها لاننا فى البداية سنتعامل فقط مع الذاكرة الداخلية للميكروكونتروللر .


On-Chip Memory




كما اوضحنا سالفاً أن الميكروكونتروللر له ذاكرة داخلية RAM 128 بايت تم تقسيمهم الى توعين ذاكرة داخلية Internal RAM و ذاكرة السجلات ذات الوظائف الخاصة Special Function Register (SFR) memory

هذه الــ 128 بايت مقسمة كالتالى :- من 00 الى 7F فى 8051

من العنوان h00 الى العنوان 07h يتواجد سجل المصفوفة رقم 0 == "register bank 0"

من العنوان 8h0 الى العنوان 0Fh يتواجد سجل المصفوفة رقم 1 == "register bank 1"

من العنوان 10h الى العنوان 17h يتواجد سجل المصفوفة رقم 2 == "register bank 2"

من العنوان 18h الى العنوان 1Fh يتواجد سجل المصفوفة رقم 3 == "register bank 3"

من العنوان 20h الى العنوان 2Fh يتواجد Bit Memory و هى المنطقة التى نتمكن فيها من التعامل مع كل بت على حدا

من العنوان 30h الى العنوان 7Fh يتواجد منطقة التداول العام General purpose و هى بسعة 80 بايت 80 bytes has to be shared between the stack and user variables و يتم تقسيمها بين المبرمج و الميكرو فيما يسمى بـ stack

Register Banks





سجل المصفوفات

لكل مصفوفة عدد 8 سجلات تأخذ الرمز R و ترقم من 0 الى 7 كالتالى

(R0, R1, R2, R3, R4, R5, R6, and R7) و عادة ما تستخدم هذه السجلات فى نقل البيانات من مكان الى اخر و المثال التالى يبين استخدام السجل R4 فى عملية اضافة او جمع تتم مع الــ Accumulator

ADD A,R4


لاجراء هذا التطبيق تعالوا نفترض افتراضات و نطبقها

سنقوم بادخال القيمة 6 الى الــ Accumulator و القيمة 3 الى R4

MOV A,#6

MOV R4,#3

ADD A,R4
الامر ADD سيقوم باضافة الرقم الموجود فى R4 الى القيمة المخزنة فى الــ Accumulator و يخزن الناتج فى الــ Accumulator


بالتالى القيمة فى الــ Accumulator ستكون 9


لدينا طريقة اخرى للتعامل مع السجل رقم 4 و هو التعامل مع العنوان الخاص به ألا و هو 04h .......... حيث اننا نتعامل مع المصفوفة رقم 0

ADD A,04h


اذا ستخدمنا هذا الامر بهذه الصيغة سنحصل على نفس النتائج

يجب الانتباه الى الميكرو بمجرد ان يعمل فهو يعتبر ان bank 0 المحجوز على العنوان 00h الى 07h هو الذى سيستخدم فهو الــ default لكن على كل حال ممكن جداً ان البرنامج يغير مسار bank 0 و يوصفه فى مكان اخر و من ثم فان العناوسن السابق الاشارة اليها سيتغير موضعها

معنى ذلك انه يجب ان نكون حذرين عند التعامل مع البت فاذا استخدمنا المصفوة 0 == bank 0 فمن الممكن تداول بيانات على المنطقة من العنوان 08h الى العنوان 1Fh و لن يحدث مشاكل .

لكن اذا قرننا ان نتعامل مع المصفوافات 1 او 2 او 3 و سبق ان استخدمنا اماكن فى تداول البيانات تحت العنوان 20h فبكل تأكيد ستقوم هذه المصفوفات بمحو البيانات التى تداولناها تحت ذلك العنوان و الكتابة عليها




Bit Memory


كما ذكرنا آنفاً اننا من الممكن التعامل مع البت bit variables و نكتب عليها احدى القيمتين 0 او 1 و عددها 128 بت و تحتل العناوين من 00h الى 7Fh و نستخدم معهم الاوامر التالية

يستخدم لكتابة 1 داخل البت SETB

يستخدم لكتابة 0 داخل البت CLR

المثال التالى يوضح كيفية كتابة 1 على البت رقم 24h

SETB 24h


يجب الانتباه الى ان الــ 128 بت bit variables هى جزء من الذاكرة RAM و يتحلوا مواقع الذاكرة من 20h الى 2Fh بسعة 16 بايت

و من ثم إذا قمنا بادخال القيمة FFh الى الذاكرة عند العنوان 20h يا ترى ما معنى ذلك ؟؟؟؟؟؟

القيمة FFh تكافى 11111111b و بالتالى فلكى نكتبها على الذاكرة سنحتاج الى 8 خانات و حيث اننا اخترنا العنوان 20h للتخزين فهى ستأخد اول قيمة و السبع الباقين سيخزنوا فى السبع عناوين التالية .

معنى ذلك ان الأمر :-



MOV 20h,#0FFh


مكافئ لهذه الاوامر مجتمعة

SETB 00h
SETB 01h
SETB 02h
SETB 03h
SETB 04h
SETB 05h
SETB 06h
SETB 07h






يجب ملاحظة التالى ....... إذا لم تكن تضع فى اعتبارك اثناء البرمجة استخدام bit variables بالتالى يمكنك بسهولة جداً استخدام المنطقة من 20h الى 2Fh كجزء تقليدى من الذاكرة RAM و لكن اذا نويت استخدامها للتعامل على مستوى البت فكن حذر جداً فى الحفاظ على تلك المنطقة و ان تحترس ان يتم الكتابة عليها بغير قصد فتمحو البيانات التى سبق و خزنتها فيها .



خلاصة ما سبق انا المنطقة بين العناوين 00h و 7Fh هى منطقة خاصة جداً و فيها الوظائف التى يحددها المبرمج و من ثم فان باقى البرنامج سبدأ من العنوان 80 h و الذى يشير الى الميناء رقم 0 ..... فى الطبيعى تكون قيمة الخرج على كل الموانى مساوية للصفر بمعنى ان P0.0 --------- P0.7 تحمل القيمة 00000000

و اذا اردنا ان نكتب الرقم 00000001 على الميناء رقم 0 و هذه القيمة تكافئ 01h فإننا نكتب الامر التالى


MOV P0,#01h


و الذى يكافئه الامر التالى

SETB 80h


الامر الاول سيدخل 8 قيم الى الميناء رقم 0 احدهما هو الواحد و الذى سيدخل على P0.0

بينما الامر الثانى سيرسل قيمه واحدة فقط الى P0.0 دون التأثير على باقى قيم الميناء .

نلاحظ اننا قد نحتاج فعلاً للتعامل مع طرف واحد فقط فى ميناء التوصيل رقم 0 و من ثم لن يصلح معنا الامر MOV .

لاحظ ان الميكرو عادة ما يحدد مؤشر Stack Pointer (SP) يشير الى العنوان 08h مباشرة و من ثم اذا كنا ننوى التعامل مع المصفوفات 1 او 2 او 3 فيجب ان نحدد عنوان الــ Stack Pointer (SP) الى عنوان اعلى من أعلى اى عنوان سيستخدم مع احد تلك المصفوفات و الا سنفاجأ بان الــ Stack Pointer (SP) قام بمسح بياناتنا و الكتابة عليه لذلك من المفضل استخدام bit variables لتحديد عنوان مبدئى للــ Stack Pointer (SP) عند عنوان اكبر من 2Fh لضمان حماية متغيراتنا من اعادة الكتابة عليها بواسطة Stack Pointer (SP)



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