# سلسلة مقالات كيف تستخدم Atmil ميكروكونتروللر



## ماجد عباس محمد (29 نوفمبر 2006)

الإخوة الأعزاء
اعتقد ان سلسلة الميكرو المعروفة بالكود C51 والتى منها اتميل سهلة الإستخدام لهذا بدأت هذه السلسلة لعل يكون فيها فائدة للجميع

هذه مجموعة دروس هدفها التعريف بهذا النوع من المعالجات – فتح الطريق لتعرف ما تريد ولكن بدون جهدك ستظل دوما تكتب هنا رجاء أعطونى الدائرة والبرنامج ، عندها لا فائدة من هذه الدروس

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

العائلة تشمل 89C51 ‘89C52’89S51 ‘89S52 والعديد غيرها
يمكنك دوما إنزال البيانات من موقع الشركة لتعرف الفروق بينها وكمية الذاكرة المخصصة فى كل منها 
ما يهمنا لنبدأ أن مجموعة 89x51 تحتوى ذاكرة برنامج 4ك و مجموعة 89x52 تحتوى ذاكرة برنامج 8ك والكل يحتوى ذاكرة بيانات RAM فقط 256 خانة
تحتوى عادة على أربع مداخل Ports كل منها 8 خط Bit يمكنك أن تستخدم أى خط Bit كمدخل أو مخرج أى لديك من 1 إلى 32 مدخل / مخرج
تمتاز هذه المجموعة بالبساطة أى أن كل خطوطها بسيطة لا تستخدم الخواص المتراكبة Multiplexed مما يجعل الدوائر سهلة وبسيطة ولا تعانى من مشاكل التزامن ، ولكنها تستخدم الخواص البديلة أى إما تستخدم هذا أو ذاك وليس الاثنين معا فلديك خطان إما تستخدمهما للمقاطعة Interrupt أو استخدمهما كاستخدام عادى و أيضا خطان للاتصال المتسلسل Serial Communication أو كاستخدام عادى
القطعة تحتوى 40 طرف





كما ذكرنا 4 × 8 Ports = 32 
2 كريستال + 2 تغذية + طرف للبدء RESET + طرف للبرمجة + طرف للتعامل مع الذاكرة الخارجية أو الدوائر المحيطة + طرف لتحديد ما إذا كان البرنامج سينفذ من الذاكرة الداخلية أم خارجية

أثناء البرمجة يمكنك وضع حماية لمنع قراءة البرنامج لاحقا حفاظا على حق الملكية وهى 3 مستويات
1-	منع قراءة الذاكرة الداخلية
2-	يضاف لما سبق عدم تمكين خاصية التحقق (التحقق من صحة البرنامج)
3-	يضاف لما سبق عدم إمكانية تنفيذ برامج من خارج المعالج
مجموعة المداخل أربعة تسمى PO,P1,P2,P3 وكلها قابلة للبرمجة كدخول أو خروج أو جزء دخول وأخر خروج لذلك تعطى قدرا كبيرا من المرونة واستخدام حساسات لمعالجة الماكينات أو الأجهزة المحيطة
عند البدء كلها تكون مخارج مع بعض الاختلافات الهامة والتى سنذكرها فيما يلى
عند كتابة "1" فى خانة أى خط ما من مدخل ما يتحول من إدخال إلى إخراج – سنعرف لاحقا كيف
بعد أن ذكرنا التشابهات ، فيما يلى سنذكر الاختلافات
PO
أقواها على الإطلاق حيث يمكنه أن يقود 8 مداخل TTL قياسية (التيار داخل للطرف فقط Sink – جدير بالملاحظة انه لا يخرج منه تيار Source إلا عند التعامل مع الذاكرة الخارجية)
الوحيد الذى لا يحتوى على مقاومة جذب Pull up Resistor لذلك يجب وضعها خارجيا 
يكون مدخل البيانات Data أثناء البرمجة 
أن شئت استخدام ذاكرة خارجية سيكون هذا هو مجموعة البيانات Data Buss والجزء الأدنى من قيمة العنوان Low Order Address Buss
P1
كمخرج يمكنه أن يقبل أو يمد بتيار يوازى 4 مداخل TTL قياسية Source/Sink
يحتوى على مقاومة جذب داخلية Internal Pull up Resistor أى كمدخل لا يحتاج أى إضافات 
عند البرمجة يوضع عليه الجزء الأدنى من قيمة العنوان Low Order Address Buss

P2
كمخرج يمكنه أن يقبل أو يمد بتيار يوازى 4 مداخل TTL قياسية Source/Sink
يحتوى على مقاومة جذب داخلية Internal Pull up Resistor أى كمدخل لا يحتاج أى إضافات 
يوضع عليه الجزء الأعلى من قيمة العنوان High Order Address Buss سواء عند البرمجة أو التعامل مع الذاكرة الخارجية 

P3
كمخرج يمكنه أن يقبل أو يمد بتيار يوازى 4 مداخل TTL قياسية Source/Sink
يحتوى على مقاومة جذب داخلية Internal Pull up Resistor أى كمدخل لا يحتاج أى إضافات 
يحتوى كل الأطراف التى يمكن استخدامها لوظائف أخرى
P3.0 RXD مدخل الاتصال التوالى 
P3.1 TXD مخرج الاتصال التوالى 
INT0 P3.2 مدخل المقاطعة Interrupt
INT1 P3.3 مدخل المقاطعة Interrupt
T0 P3.4 مدخل مؤقت خارجى
T1 P3.5 مدخل مؤقت خارجى
P3.6 WR مخرج الكتابة للذاكرة الخارجية 
P3.7 RD مخرج القراءة من الذاكرة الخارجية 

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


----------



## eng_mabdelraouf (29 نوفمبر 2006)

اخى العزيز لو امكنك وضع بعض الكتب عن تلك اللغة لكي تعم الفائدة
ولك جزيل الشكر


----------



## ماجد عباس محمد (30 نوفمبر 2006)

اخى اشكر لك ردك الجميل فقط غالبا تكون الكتب اكبر مما يسمح به المنتدى لذا يمكنك تحميل ما تريد من موقع الشركة الأم
http://www.atmel.com
اما عن المقالات فأرجو ان يوفقنى الله على ان اكمل الشرح من الجهتين - المكونات والبرمجة


----------



## خالد ماهر (30 نوفمبر 2006)

شكرا لك ياماجد على هذا المجهود

هناك جمله لم أفهمها جيدا وهى 
كمخرج يمكنه أن يقبل أو يمد بتيار يوازى 4 مداخل TTL قياسية Source/Sink
أرجو منك شرحها أكثر
وأيضا ما هو الفرق بين P0 وغيره من البورتات بالنسبه للتيار 

وجزاك الله خيرا


----------



## eng_mabdelraouf (30 نوفمبر 2006)

شكرا لك اخى ماجد على اهتمامك وجزاك الله كل خير


----------



## ماجد عباس محمد (30 نوفمبر 2006)

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


----------



## ماجد عباس محمد (1 ديسمبر 2006)

الكثير يعلمون ما هى TTL Gate بدون أن يعلموا ما بداخلها أو يأخذون التركيب على انه مادة درست دون استخلاص نتائجه لهذا أرجو معذرتى فى محاولة شرح هذه النقطة حتى يكون لما يلى معنى وليس مجرد ارقام تنسى عند الخروج من ألنت
ما يلى هو التركيب الداخلى من واقع Texas Instruments TTL Data Book ورقم القطعة SN7437 – SN7440 والفرق الأولى 2 Input NAND Gate والثانية 4 Input NAND Gate




منا نرى فالدخول هو Emitter الخاص بترانزيستور الدخول وهو ترانزيستور ذو Emitter متعدد

حسب الدائرة هناك 4 دايود بين الدخول والطرف السالب هى حماية فقط ضد انعكاس الفولت (دخول سالب الجهد)

لذا نرى أن عندما يكون الدخول Logic1 أى +5فولت لا يمكن أن يمر تيار دخولا للطرف Input إلا فقط ما يسمى Leakage current وهو بالميكرو أمبير ومهمل القيمة
عندما يكون الدخول Logic O أى صفر فولت يخرج التيار من طرف ألـ Input للخارج و ما لم تستطيع الدائرة الخارجية امتصاصه Sink it يصبح ترانزيستور الدخول Off وكان الطرف Logic1
قيمة التيار تحسب من قيمة المقاومة R1 وجهد بين Emitter - Base وهذه المقاومة تختار بحيث يصبح التيار قياسيا موحدا معلوما واصبح اسمه Standard TTL input ويساوى 1.6 مللى أمبير
عندما يكون الدخل موزعا على عدد من أقسام الوحدة مثل Counter – Shift Register يوضع فى هذا الطرف داخليا Buffer لجعل الدخول موحدا دائما
مع التطور والسعى وراء سرعة اكبر ظهرت العديد من العائلات مثل H – S – L – LS – ALS – F وكان أقربها للقياسى هو عائلة LS حيث زادت فى السرعة مع انخفاض التيار ولذا اعتبر البديل المنتظر للعائلة الأساسية واعتبر تيار دخولها أيضا قياسيا وهو 0.4 مللى أمبير

إذا ذكر فى مواصفات مخرج ما انه Can Drive n TTL inputs فهذا معناه أن المخرج يمكنه أن يمتص Sink تيارا خارجا من عدد n من TTL inputs أى n × 1.6 مللى أمبير ولكنه لا يستطيع أن يصدر أو يخرج منه تيار اقل من ذلك بكثير حيث انه غير مطلوب للــ TTL inputs – وبالمثل مواصفات مخرج ما انه Can Drive n TTL-LS inputs فهذا معناه أن المخرج يمكنه أن يمتص تيارا خارجا من عدد n من TTL-LS inputs أى n × 0.4 مللى أمبير ولكنه لا يستطيع أن يصدر أو يخرج منه تيار اقل

المخارج التى يمكنها إصدار تيار للخارج تسمى Source أما التى تمتص التيار تسمى Sink وعلى هذا فعندما يذكر أن هذا المخرج Can Source/Sink يعنى التيار يمكن أن يخرج أو يدخل
بمعنى آخر يمكنه أن يتعامل مع أحمال تتصل بالأرضى أو أحمال تتصل بالطرف الموجب VCC
من الرسم أيضا يتضح معنى هذا الكلام – إذ انه أساسا حجم وبالتالى قدرة (أمبير) كل من Q3,Q4 ونظرا لأن تيار طرف الدخول خارجا منه لذا يتحتم أن يمر فى OUTPUT Y للوحدة السابقة لها فى مسار الإشارة من الخرج إلى الأرضى وعليه وجب أن يكون Q4 اكبر مساحة من Q3 وهذا بالضبط ما يحدد ما إذا كان المخرج قادر على تحمل التيار داخل إليه فقط أم الاتجاهين
السؤال الثانى سارد عليه فور الإنتهاء من كتابته وشكرا


----------



## ماجد عباس محمد (2 ديسمبر 2006)

معذرة للإطالة والإسهاب فى الشرح فأنا أضع فى اعتبارى أن هناك من سيقرأ هذا ويحتاج هذه المعلومة أيضا
الفرق بين PO و باقى المنافذ
لنعد مرة أخرى للرسم السابق , عندما يكون الخرج HI يكون Q4 Offإذن ماذا يجعل النقطة Y تأخذ قيمة 5 فولت ؟ أن Q3 يقوم بوظيفة Pull Up أى يوصلها بالـجهد الموجب حتى فى وجود حمل متصل بالأرضى وفى الوحدات التى لا يكون بها Q3 كما نعلم كلنا تسمى Open Collector وفى تقنية CMOS تسمى Open Drain وهى لا تعمل بدون مقاومة خارجية توصل بالطرف الموجب للتغذية 
PO عندما يبرمج كخرج يصبح Open Drain أى يحتاج لمقاومة خارجية موصلة إلى +5فولت لتجعل الطرف يتحرك بين صفر و +5 فولت ويمكنه أيضا أن يقود 8 TTL inputs ومن المناقشة السابقة يستطيع كل خط من الثمانية لمدخل PO يستطيع أن يقبل 8×1.6 = 12.8 مللى أمبير
هناك نقطة يجب عدم إغفالها هنا ليست فى هذه القطعة ولكن بالنسبة لأى قطعة الكترونية نتعامل معها وهى

فى المثال السابق لدينا 8 خطوط للمدخل PO وكل منها يتحمل 12 مللى أمبير والسؤال هو هل يمكن تحميل الثمانية معا كل منها بـ 12 مللى ؟
هذه الحالة متكررة فى كثير مكن القطع مثل المكبر LM324 حيث يمكن للمخارج الأربعة له أن تتحمل شوورت للأرضى أو VCC+ لكن هناك دائما تحذير
Device Dissipation هو محور المشكلة لأته ببساطة قدرة العبوة الإيبوكسى أو السيراميك على التخلص من الحرارة المتولدة وإلا سترتفع الحرارة لحدود التلف الدائم – ولكل نوع من هذه العبوات لها قدرة مختلفة على إشعاع الحرارة لذلك يجب مراعاة أن فى حالة التحميل على المداخل تحسب الطاقة المتولدة ويجب الأ تزيد عن القيمة المذكورة
قد نسأل إذن لماذا يتحمل هذه القيمة ونحترس فى استخدامها
الفكرة انك إذا استخدمت PO فى برنامج خارج المايكرو والتعامل مع ذاكرة خارجية فالأمر مقبول لأن طبيعة التعامل مع هذه الأشياء لحظية – نضع العنوان ثم نقرا البيان ونغير العنوان فى حوالى المايكرو ثانية - أما للتحكم فى الدوائر المحيطة فربما يظل الأمر ثابتا لحين إشعار آخر مثلا من بدء التشغيل لنهايته


----------



## magdy77 (23 ديسمبر 2006)

تسلم يا غالي في انتظار المزيد


----------



## ماجد عباس محمد (10 مارس 2008)

لنعرف كيف ننفذ ما سبق أى نخصص أى الأطراف تكون مداخل وأيها مخارج ربما يكون من الأفضل معرفة شئ عن التركيب الداخلى
لاحظت فى الكثير من الحالات أن البعض لا يفرق بين الميكروبروسيسور و الميكرو كونتروللر و الجهاز المسمى PLC و ربما يكون من المفيد توضيح هذه الفروق الآن
الأول ميكرو بروسيسور up وهو الجزء الأساسى فى الحاسبات و لا يقوم بشىء بدون أجزاء أخرى مساعدة ولا يحتوى غالبا على ذاكرة للمستخدم و تكون الذاكرة داخله فقط لاستخدامه الذاتى فمثلا لا نستطيع أن نستخدم أمرا لحفظ بيانات داخل ألكاش داخل البينتيوم وهو يحتوى على وحدة تحكم تنفذ أوامر البرنامج ووحدة حساب و منطق لتنفيذ العمليات الحسابية و العمليات المنطقية (التى ينتج عنها إما صح أو خطأ مثل هل أ اكبر من ب ؟ - كما يحتوى على مجموعة من المسجلات Registers و المراكمات Accumulators و الفرق أن نتيجة عملية حسابية يمكن أن تذهب للأخير فقط مثلا نجمع محتوى مسجل أ مع مسجل ب يجب أن تذهب النتيجة لمراكم و ليس إلى أى منها 
استخدامه يتطلب دوائر تحليل شفرات Decoders حتى تتمكن من التعامل مع أى شىء خارجى لذا فهو صعب فى استخدامه لكن طاقاته هائلة مثل المستخدم فى حاسبك الحالى
الثانى وهو الميكرو كونتروللر عبارة عن ميكرو بروسيسور مضاف إليه ذاكرة للبرنامج و أخرى للبيانات و بعضها قد يحتفظ بالبيانات عند انقطاع التيار عنه كما يحتوى على دوائر لتوفير أطراف يستخدمها المبرمج للتعامل المباشر مع العالم الخارجى مثلا باستخدام ترانزيستور و ريلاى لتشغيل أشياء مباشرة وهو لذلك أسهل كثيرا جدا فى الاستخدام ولكن طاقته أقل كثيرا من الأول من حيث السرعة والإمكانات
الثالث PLC وهى اختصار Programmable Logic Controller عبارة عن ميكرو كونتروللر مضافا إليه ما يلزم من ترانزستورات و ريلاى أو ثايريستورات الخ للتحكم فى الأجهزة المحيطة
نظرا لأن الأخير عبارة عن ميكرو كونتروللر بكامل دوائره لذا يجب أن نحدد مسبقا كم طرف تحول إلى مداخل للقياس و كم يبقى مخارج للتحكم فمثلا لو استخدمنا الوحدة 89C52 فهى تحتوى 48 طرف
هل نستخدم أطراف الاتصال التسلسلى RS232 ؟ هل نستخدم طرف المقاطعة لهذا الهدف ؟ هل نستخدم العدادات الداخلية ؟ ثم كم من الباقى نجعله دخول و كم نجعله تحكم (خروج) 
لهذا يكون من الصعب على المستخدم أن يبرمج هذه الوحدة خاصة لا يتوقع منه أن يكون مبرمجا من الأصل - لذا يصنع الشركات التى تنتج وحدات PLC برنامجا ذو طبيعة رسوميه بها أشكال للمفاتيح و الحساسات و الخريطة التى يريد المستخدم أن تكون خطوات التنفيذ عليها و هذا البرنامج يولد الشفرات الخاصة لبرمجة وحدة PLC و يقوم ببرمجتها أيضا و بناء على طراز الوحدة يحذرك إن حاولت استخدام عدد أكبر من المخصص كمخل أو مخرج فى هذا الطراز
مثلا يمكن أن استخدم الوحدة 89C52 لعمل عدة موديلات من خمسة مداخل و خمسة مخارج ألى 15 من كل و تتراوح فى السعر حسب تجهيز كل منها

الآن نتحدث عن تركيب الميكرو من سلسلة 89C5x 
كما سبق عرفنا أن بداخله وحدة تحكم و ذاكرة للبرنامج وأخرى للبيانات و مراكم واحد اسمه Accumulator A و ثمانية مسجلات Registers
يوجد بداخلة أيضا 128 خانة ذاكرة تسمى مسجل الوظائف الخاصة Special Function Register SFR وهى تحتل المواقع (العنوان) من 128 إلى 255 و قبل أن تسأل عن موقف الذاكرة 256 أقول أنها على التوازى
فلو استخدمت الأمر حفظ فى خانة رقم 200 فهى تعنى الخانة 200 من المسجل أما إن استخدمت أمر للحفظ الغير مباشر كأن تضع فى المراكم رقم 200 ثم تنفذ الأمر حفظ عند العنوان المخزون فى المراكم هنا تذهب للذاكرة
و الذاكرة من 0 الى 127 لا شىء معها و يمكنك الكتابة بها كيفما شئت 
لا داعى للقلق لأن البرامج التى تستخدم لكتابة الكود (برمجة اتميل) تفرق بسهولة بين هذه الفروق لأنها تعطى كل خانة من SFR اسما يعبر عن وظيفتها – هذا المثال أرجو أن يوضح ما أقول
لكل مدخل Port خانة مخصصة من SFR و الخانة كما نعلم 8 خط 8 bit كل منها لخط من المدخل Port 
فلا داعى لأن نتذكر أيها خاص بالمدخل P0 وهى رقم 80 (نظام ستة عشر ) أو 128 نظام عشرى
الوحدة تستخدم أسلوب شركة انتل للبرمجة أى أن الأمر MOV يستخدم لنسخ البيانات من المصدر للهدف ولكن لا ينقلها بمعنى لا تلغى من المصدر فمثلا
MOV P0,01010101
يترجم لأنك تريد التحكم فى المدخل P0 و ستترك الأطراف P0.0 P0.2,P0.4 etc مداخل كما هى و تغير P0.1,P0.3,P0.5 etc إلى مخارج 
تذكر أننا نبدأ العد P0.0 , P0.1, P0.2
كما أن هناك أوامر تتعامل مع الخط الواحد Bit فيمكنك أن تغير طرف معين من مدخل إلى مخرج والعكس




معذرة أود تصحيح معلومة كتبتها خطأ فى المرة السابقة
عند البدء – يخزن الميكرو مجموعة من 11111111 فى كل مدخل من الأربع مداخل وهذا يجعلها إدخال أى تقرأ من العالم الخارجى وعند وضع صفر لأى خط يتحول لإخراج
فى المرة القادمة إن شاء الله سنرى جدول لهذا SFR و معنى كل خانة به و من المريح أن نعلم أن أغلبه غير مستخدم حتى لا نشعر بالقلق من محاولة معرفة 128 خانة و ما تعنيه كل منها فقط 27 خانة قيد الاستخدام


----------



## الليـث (19 مارس 2008)

السلام عليكم

مشكور جدا جدا على هذا الشرح الوافي جعله الله في ميزان حسناتك

ولكن ارجو التكرم بطرح امثلة عملية على هذا المعالج ولتكن مثلا كيفية عمل مبرمجة لهذا المعالج 

مع شديد الاحترام

يعطيك الف عافية


----------



## ماجد عباس محمد (23 مارس 2008)

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


----------



## روح الملائكة (25 مارس 2008)

مشكور كثير على المعومات المفيدة


----------



## احمد رونى (10 مايو 2009)

اخى الكريم ان هذا الشرح غايه الروعه فأرجو منك ان تستمر فى هذا الشرح
وجزاك الله خيرا


----------



## ماجد عباس محمد (10 مايو 2009)

أشكر اهتمامك أخى أحمد و إن شاء الله سأكمل


----------



## احمد رونى (10 مايو 2009)

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


----------



## eng.ahmedrabiaa (10 مايو 2009)

شكرا جزيلا لك
ولكن ما هو ال hardware الازم لتحويل هذه القدرة الصغيرة الى القدرة الكافية لتحكم فى ريلاى يقوم بتوصيل وفصل تيار ذا 220 فولت


----------



## thothefali (4 يونيو 2009)

بارك الله فيك ورحم الله والديك


----------



## ماجد عباس محمد (4 يونيو 2009)

eng.ahmedrabiaa قال:


> شكرا جزيلا لك
> ولكن ما هو ال hardware الازم لتحويل هذه القدرة الصغيرة الى القدرة الكافية لتحكم فى ريلاى يقوم بتوصيل وفصل تيار ذا 220 فولت


 
باستخدام هذه الدائرة





المقاومة 1 ك أوم


----------



## بلال رباع (5 يونيو 2009)

ابدعت يا اخ ماجد عباس​


----------



## samoha-991 (20 مارس 2013)

جزاكم الله خيرا على المعلومات القيمة


----------

