إنتل MCS-51

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

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

و نلاحظ هنا أن ممر ذاكرة المعطيات منفصل تماماً عن ممر ذاكرة البرنامج وهذا مفيد من أجل زيادة سرعة تنفيذ البرنامج بالإضافة إلى ضمان عدم حدوث تداخل بينهما وتدعى هذه البنية ببنية هارفارد وهي مميزة عن طريقة بناء المعالجات المصغرة التي تدعى باسم بنية فون نيومان التي يكون فيها ممر ذاكرة البرنامج والمعطيات نفسه لكليهما وبالتالي فهو أبطأ ومعرض لحدوث أخطاء في الوصول إلى الحجرات الذاكرية.
 نوافذ الدخل والخرج 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- ممر عنونة ذاكرة المعطيات
 الوصول إلى المكدس

وحدة الحساب والمنطق 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.

مراجع 

متحكمات دقيقة
هندسة الإلكترونيات