Intel MCS-51

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

المتحكم المصغر AT80C51

مقدمة

في الآونة الأخيرة تم تطوير شرائح الكترونية متكاملة إلى درجة كبيرة من التعقيد حيث أننا حصلنا على ما يسمى بالمعالج المصغر micro processor وهو عبارة عن شريحة الكترونية متكاملة لا فائدة منها بدون برنامج يخزن في ذاكرتها تقوم بقراءته وتنفيذ تعليماته تباعاً ولكن في المعالجات المصغرة تكمن المشكلة في ربط الذواكر مع المعالج بالإضافة إلى ربط مصدر نبضات الساعة معه حيث تظهر المشاكل في المرحلة التي تلي عملية التصميم وهي تنفيذ البرنامج المخدع للعملية التكنولوجية فقد تحدث بعض المشاكل في قراءة الذاكرة وبالتالي تنفيذ خاطئ للبرنامج وبالتالي قد نحصل على نتائج غير متوقعة من هذا التجهيز الذي قمنا بتصميمه وبناءه . لذلك ظهرت شرائح الكترونية تدعى المتحكمات المصغرة micro controller تحتوي في داخلها على كل ما يحتاجه المعالج المصغر كي يعمل بوثوقية أعلى فهي تحتوي على : •وحدة معالجة مركزية CPU :الذي يقوم بعملية تنفيذ البرنامج عن طريق جلب التعليمة من ذاكرة البرنامج وتنفيذ هذه التعليمة ( جمع ، طرح ، عمليات المقارنة .....) وكذلك الكتابة إلى ذاكرة المعطيات والتأثير على الأعلام لو لزم الأمر . •ذاكرة مخصصة للبرنامج BUILD IN : يخزن فيها التعليمات بعد تحويلها بواسطة برنامج خاص إلى صيغة HEXA ولها ممر خاص بها من أجل عنونة حجراتها الذاكرية . •ذاكرة معطيات BUILD IN : خاصة بتخزين قيم تهمها أثناء تنفيذ البرنامج حيث يقوم المعالج المركزي بقراءة هذه الحجرات لاستخدامها حسب ما يمليه عليه البرنامج كما يقوم بالكتابة إليها وكذلك الأمر بالنسبة لها فلها ممر خاص بعنونة حجراتها الذاكرية . ملاحظة : نلاحظ هنا أن ممر ذاكرة المعطيات منفصل تماماً عن ممر ذاكرة البرنامج وهذا مفيد من أجل زيادة سرعة تنفيذ البرنامج بالإضافة إلى ضمان عدم حدوث تداخل بينهما وتدعى هذه البنية ببنية هارفارد Harvard وهي مميزة عن طريقة بناء المعالجات المصغرة التي تدعى ب بنية فون نيومان von-newman التي يكون فيها ممر ذاكرتي البرنامج والمعطيات نفسه لكليهما وبالتالي فهو أبطأ ومعرض لحدوث أخطاء في الوصول إلى الحجرات الذاكرية .

•نوافذ الدخل والخرج Build in Input / Output Ports : وهي عبارة عن أقطاب خاصة بالتحكم يمكن تعين وظيفتها كمداخل أو مخارج من خلال البرمجة فإذا قمنا ببرمجتها على أنها مداخل تصبح بمثابة عيون للنظام لمراقبة المفاتيح أو الكباسات الموصولة عليها أو غير ذلك من المعطيات التي يمكن وصلها إلى دخل المتحكم . وإذا برمجناها على أنها مخارج تصبح قادرة على تمرير الأوامر إلى الوسط الخارجي (أي إلى منفذات الأوامر ) تمرر إما الصفر أو الواحد المنطقي (أرضي أو Vcc) ومن الممكن أن يكون للقطب الواحد أكثر من وظيفة حسب نوع المتحكم . وهذه من مزايا القوة الرائعة التي يتمتع بها المتحكم المصغر حيث ألغى الحاجة إلى استخدام شرائح خارجية خاصة بالدخل والخرج PIO (peripherals input output ) . •مؤقتات داخلية built in timer : وهذا من مزايا المتحكم القوية أيضاً يحتوي على مؤقت واحد أو أكثر حسب نوعه والشركة المصنعة له وهو عبارة عن مؤقت قابل للبرمجة لاستخدامه في إجراء تزامن ما للأحداث التي تتم معالجتها (مثلاً أريد أن أفعل خرج لفترة معينة ثم أقوم بإطفاء هذا الخرج ثم تفعيل خرج آخر لفترة معينة أيضاً وهذا ما يتحقق معنا من خلال استثمار المؤقت الموجود في المتحكم لهكذا تطبيق . •وحدات اتصالات تسلسلية UART : وهي عبارة عن طرفية موجودة ضمن المتحكم خاصة بمعالجة العمليات الاتصال مع العالم الخارجي (مثلاً حاسب أو متحكم آخر ......) •أقطاب خاصة بالمقاطعات : وظيفتها الرئيسية هي تحسس حدوث تغير للحالة المنطقية عليها لاستدعاء روتين خدمة مقاطعة خاص بها ومن الممكن أن تمكن هذه المقاطعة أو تلغي تمكنها برمجياً . •مؤقت الحراسة watchdog timer : وهو عبارة عن مؤقت خاص بالمتحكم يقوم بمراقبة زمن تنفيذ التعليمات فإن تجاوزت الزمن المسموح به يقوم بتصغير المتحكم ويجبره على العودة لبداية البرنامج (يعطى إشارة تصغير لمتحكم )

ملاحظة : هناك العديد من الشركات المصنعة للمتحكمات المصغرة نذكر منها على سبيل المثال : Atmel ، Microchip ، Mitsubishi ، Siemens ، Motorola ، Intel . ونحن الآن سوف نقوم بدراسة المتحكم Atmel 8051 .

النواة The Core

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

شكل يوضح البنية العامة للمتحكم 8051 .

أولاً – وحدة المعالجة المركزية CPU ووحدة الحساب والمنطق ALU

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

وحدة المعالجة المركزية CPU

تعتبر وحدة المعالجة المركزية بمثابة الدماغ البشري في شريحة المتحكم وهي مسؤولة عن : 1-جلب التعليمة المراد تنفيذها fetching 2-فك تشفير هذه التعليمة Decoding 3-تنفيذ هذه التعليمة Executing و تستعين وحدة المعالجة المركزية CPUبوحدة الحساب و المنطق ALU من أجل إتمام تنفيذ التعليمة – تنفيذ العمليات الحسابية و المنطقية – وتتحكم وحدة المعالجة المركزية بما يلي: 1-ممر عنونة ذاكرة البرنامج 2-ممر عنونة ذاكرة المعطيات 3-الوصول إلى المكدس

وحدة الحساب و المنطق ALU

يمتلك المتحكم 8051 وحدة حساب و منطق ثمانية بت بالإضافة إلى المراكم A المراكم : هو مسجل ثماني الخانة يستخدم في العمليات التي تنفذها وحدة الحساب و المنطق . وظائف وحدة الحساب و المنطقALU و الأعلام: تتمكن الوحدة ALU من تنفيذ عمليات الجمع و الطرح و عمليات الإزاحة و المقارنة المنطقية XOR,AND,OR . غالباً ما تكون العمليات الرياضية و المنطقية ذات طرفين و في بعض الأحيان ذات طرف وحيد. تقوم الوحدة ALU بالتأثير على الأعلام OV,AC,C الموجودة في مسجل الحالة . (Program Status Word) PSW

ثانياً- ذاكرة المتحكم

مقدمة : يوجد في المتحكم قسمان أساسيان في الذاكرة هما ذاكرة البرنامج Program memory وذاكرة المعطيات data memory ولكل قسم ممر bus خاص به لذلك من الممكن الوصول إليها خلال نفس دورة التعليمة وهذا ما تعرفنا عليه في بنية هارفاردHarvard architecture تنظيم ذاكرة البرنامج: تتألف ذاكرة البرنامج في هذا المتحكم من 4 Kbyte داخل المتحكم ومن الممكن توسعتها حتى 64 Kbyte بإضافة ذاكرة خارج المتحكم و الواقع هناك أنواع لذاكرة البرنامج فقد تكون نوع ROM وفي هذه الحالة لا نستطيع أن ندخل البرنامج إلى الشريحة بأنفسنا و إنما علينا أن نعطي برنامجنا للمصنع ليصنعوا لنا المتحكم و في داخله البرنامج الذي قمنا بكتابته موجود على الذاكرة الداخلية ROM فهي كما نعلم تبرمج لمرة واحدة فقط لأنها قابلة للقراءة فقط. وعملياً من الممكن الحصول على متحكم ذو ذاكرة برنامج من النوع EPROM أي قابلة للقراءة فقط و قابلة للبرمجة كهربائياً Electrical Programmable ROM و لمرة واحدة. ومن الممكن الحصول على متحكم ذو ذاكرة برنامج من النوع EEPROM وهي ذاكرة ROM قابل للبرمجة والمحي كهربائياً Programmable ROM Electrical Erasable وهي مفيدة جداً في عمليات اختبار عمل البرنامج فنحن عملياً نقوم بالعمل على متحكمات ذات ذاكرة EEPROM كي نتمكن من اختبار برنامجنا إن كان يحقق الغرض المطلوب منه أم لا ، فهنا من الممكن أن نغير البرنامج و نعيد إرساله إلى المتحكم عبر المبرمجة المخصصة له و هكذا حتى يحقق الهدف المرجو من استخدام المتحكم.

المبرمجة

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

عداد البرنامج PC

و عبارة عن مسجل خاص مستقل عن ذاكرة المعطيات الخاصة بالمتحكم وهو ذو عرض 16bit ويعنون حجرات ذاكرة البرنامج وبما أن عرضه 16bit فهو قادر على عنونة 64 Kbyte من ذاكرة البرنامج . وعند استخدام تعليمتي push & pop فأن هذا المسجل يخزن في المكدس................... ما هي مراحل تخزين المكدس ؟ ................ و كذلك لا بد من تخزين قيمة عداد البرنامج PC عند حدوث مقاطعة كي يعرف المعالج العنوان الذي عليه العودة إليه عند انتهاء تنفيذ روتين خدمة المقاطعة .

المكدس Stack Pointer

وهو عبارة عن منطقة من ذاكرة المعطيات الداخلية في المتحكم و بالتالي فهو بعرض 8bit ويعمل حسب الآلية التي تدعى ( Last In Fist out : LIFO ) حيث أنه من الممكن مسك قيمة عداد البرنامج PC عند حدوث لعملية استدعاء لروتين فرعي أو روتين خدمة مقاطعة كما يمكن تخزين واستعادة المعطيات خاصةً مسجل الحالة PSW بواسطة تعليمات POP ، PUSH . وعند الحديث عن المكدس لا بد من التذكير بمؤشر المكدس Stack Pointer وهو عبارة عن مؤشر يشير إلى قمة المكدس والقيمة الافتراضية له هي 7 بعد حدوث عملية تصفير للشريحة power on reset ، أي إجراء عملية push الأولى فإن القيمة تخزن بدءاً من العنوان 8 ويزداد مؤشر المكدس بمقدار1. وكذلك أعظم قيمة يستطيع الوصول إليها هي 127 لأنه من المعلوم أن ذاكرة المعطيات بطول 128 بايت طبعاً منطقة الذاكرة التي تدعى SFR لا يمكنه الوصول إليها أبداً فهي مخصصة لوظائف خاصة ومعرفة مسبقاً من الشركة المصنعة للشريحة . وكذلك يجب الانتباه عند التعامل مع حيز ذاكرة المعطيات GPRs والمكدس معاً كي لا نضيع المعطيات الموجودة في تلك الحجرات الذاكرية وذلك باختيار البنك المناسب ( أي يجب علينا الانتباه لاختيار بنوك الذاكرة عند استخدام تعليمة push في هذه المنطقة من الذاكرة).

المسجل Data Pointer DPTR

هو عبارة عن مسجل ممكن الوصول إليه كبايتين معاً (16 bit) وهو مؤلف من قسمين DPH &DPL

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


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

المسجل المساعد B

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

المؤقتات Timers

لدينا مؤقتين في المتحكم وهما Timer0 و Timer1 :

مواصفاته

1.المؤقتات تعد بشكل تصاعدي . 2.لكل مؤقت مسجلين طول كل منها بايت واحد .

شرح أقطاب المتحكم (PIN Description )

ترتيب الأقطاب ( PIN Configurations )

1.Vcc : جهد التغذية . 2.GND : الأرضي . 3.النافذة P0 : تمتلك النافذة P0 ثمانية أقطاب ثنائية الاتجاه تستخدم كأقطاب دخل \ خرج ذات مصرف مفتوح عند استخدامها كنافذة خرج فإن كل قطب من أقطاب هذه النافذة يستطيع قيادة ثمانية مداخل TTL . تتم الكتابة على أقطاب النافذة P0 خلال الدورة الأولى ، حيث تستطيع استخدام أقطاب هذه النافذة كمداخل ذات ممانعة عالية . و يمكن ترتيب عمل هذه النافذة P0 كي تقوم بوظيفة مضاعفة كخطوط عنوان \ معطيات سفلية خلال الولوج لذاكرة البرنامج الخارجية و ذاكرة المعطيات الخارجية ، تمتلك أقطاب النافذة P0 مقاومة رفع داخلية ( PULL-UP ) فقط في هذا النمط . الشكل التالي يوضح البنية الالكترونية الداخلية لأقطاب النافذة P0 .

4.النافذة P1 : تمتلك النافذة P1 ثمانية أقطاب ثنائية الاتجاه تستخدم كأقطاب دخل \ خرج مزودة بـ (Pull-ups) داخلي . و عند استخدام هذه النافذة كنافذة خرج فإنها تستطيع قيادة أربعة مداخل TTL . تتم الكتابة على أقطاب النافذة P1 خلال الدورة الأولى ، حيث تسحب أقطابها إلى المنطق العالي بسبب وجود مقاومة الرفع الداخلية (PULL-UP ) . و يمكن استخدامها كنافذة دخل و عند استخدام النافذة P1 كنافذة دخل فإن أقطاب النافذة P1 المسحوبة خارجيا" إلى المنطق المنخفض سوف تولد تيارا" (IIL ) بسبب وجود مقاومة الرفع الداخلية (PULL-UP ).

الشكل التالي يوضح البنية الالكترونية الداخلية لأقطاب النافذة P1 .

5.النافذة P2 : تمتلك النافذة P2 ثمانية أقطاب ثنائية الاتجاه تستخدم كأقطاب دخل \ خرج مزودة بـ (Pull-ups) داخلي . و عند استخدام هذه النافذة كنافذة خرج فإنها تستطيع قيادة أربعة مداخل TTL . تتم الكتابة على أقطاب النافذة P2 خلال الدورة الأولى ، حيث تسحب أقطابها إلى المنطق العالي بسبب وجود مقاومة الرفع الداخلية (PULL-UP ) . و يمكن استخدامها كنافذة دخل و عند استخدام النافذة P2 كنافذة دخل فإن أقطابها التي تكون في البداية مسحوبة إلى المنطق المنخفض خارجيا" سوف تولد تيارا" (IIL ) بسبب وجود مقاومة الرفع الداخلية (PULL-UP ). ترسل النافذة P2 بايت العنوان العالي خلال الإحضار من ذاكرة البرنامج الخارجية و خلال الولوج إلى ذاكرة المعطيات الخارجية التي تستخدم عنوان بطول 16 bit من البرنامج.

الشكل التالي يوضح البنية الالكترونية الداخلية لأقطاب النافذة P2 .

6.النافذة P3 : تمتلك النافذة P3 ثمانية أقطاب ثنائية الاتجاه تستخدم كأقطاب دخل \ خرج مزودة بـ (Pull-ups) داخلي . و عند استخدام أقطاب هذه النافذة كأقطاب خرج فإنها تستطيع قيادة أربعة مداخل TTL تتم عملية الكتابة على النافذة P3 خلال الدورة الأولى ، حيث تسحب أقطاب هذه النافذة إلى المنطق العالي بسبب وجود الـ(PULL-UP ) الداخلي . و يمكن استخدامها كنافذة دخل و عند استخدام النافذة P3 كنافذة دخل فإن أقطاب النافذة P1 المسحوبة خارجيا" إلى المنطق المنخفض سوف تولد تيارا" (IIL ) بسبب وجود الـ (PULL-UP ) الداخلي.

الشكل التالي يوضح البنية الالكترونية الداخلية لأقطاب النافذة P3 .

ملاحظة هامة :

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

7.قطب التصفير RST : يؤدي المنطق العالي على هذا القطب لمدة دورتي آلة مع استمرار عمل الهزاز إلى تصفير (RESET ) المتحكم أي العودة إلى بداية البرنامج و بدء التنفيذ من أول تعليمة فيه.

8.ALE / PROG : يستخدم هذا القطب كنبضة خرج لتمكين ماسك العنوان من أجل مسك بايت العنوان المنخفض خلال الولوج لذاكرة البرنامج الخارجية ، كما يستخدم هذا القطب أيضا"دخل لنبضة البرنامج (PROG ) خلال برمجة ذاكرة البرنامج الوميضية. إن العمل الطبيعي للقطب ALE هو إرسال معدل ثابت من النبضات مقداره 1/6 من تردد الهزاز المستخدم ، ويمكن استخدامه من أجل عمليات التزامن الخارجية لأهداف التواقت . و ما يجب ذكره أننا نحصل على نبضة على نبضة ALE واحدة خلال كل ولوج لذاكرة المعطيات الخارجية. أما إذا أردنا إيقاف عمل القطب ALE فإننا نقوم بتفعيل الخانة bit0 من حيز مسجلات الوظائف الخاصة عند الموقع 8Eh ، فعند تفعيل هذه الخانة فإن القطب ALE يمكّن ( يفعّل) فقط خلال تنفيذ التعليمة MOVX أو التعليمة MOVC . و في كل الحالات الأخرى يسحب القطب ALE إلى المنطق العالي ، و لا تؤثر الخانة bit0 على عمل المتحكم إذا كان في نمط التنفيذ الخارجي.

9.PSEN : و هو عبارة عن قطب تمكين تخزين البرنامج يعطي نبضة قراءة لذاكرة البرنامج الخارجية. عندما ينفذ المتحكم AT80C51 من ذاكرة البرنامج الخارجية, فإن القطب PSEN يفعّل مرتين لكل دورة آلة.

10.EA / VPP : هو قطب تمكين الولوج الخارجي ، و يجب ربط القطب EA إلى الأرضي GND لتمكين المتحكم من إحضار شيفرات التعليمات من ذاكرة البرنامج الخارجية التي تبدأ من العنوان 0000h إلى العنوان FFFFh . و ما يجب ملاحظته أنه يوجد خانة قفل مبرمجة سوف تمسك القطب EA داخليا" إلى الصفر. و عندما نربط القطب EA إلى جهد التغذية VCC فإن المتحكم ينفذ البرنامج من الذاكرة الداخلية الوميضية. كما يستقبل هذا القطب أيضا" جهد تمكين البرمجة 12V (VPP ) خلال عملية برمجة ذاكرة المتحكم الوميضية.

11.XLAT1 : مدخل لاستقبال نبضات الساعة من الهزاز الخارجي ، و هو مدخل دارة نبضات الساعة الداخلية.

12.XLAT2 : و هو مخرج مضخم الهزاز العاكس.

ملاحظة:

في حال استخدام هزازة لتوليد نبضات الساعة للمتحكم فإننا نضعها بين القطبين (( XLAT1 & XLAT2 .

وحدات الإدخال

أشهر وحدات الإدخال : 1.لوحة المفاتيح Keypad . 2.الحساسات الحرارية .

وحدات الخرج

أشهر وحدات الخرج : 1.ديودات ضوئية . 2.المظهرات ذات السبع قطع(7seg) . 3.LCD .