واجهة LED هي أول شيء ، سيحاول المرء القيام به أثناء البدء في أي متحكم. لذلك هنا في هذا البرنامج التعليمي ، سنقوم بتوصيل مصباح LED مع متحكم 8051 ، وسنكتب برنامج C لميض مؤشر LED. لقد استخدمنا متحكمًا دقيقًا AT89S52 شائعًا جدًا ، من عائلة 8051 ، بواسطة ATMEL.
قبل الخوض في التفاصيل ، يجب أن نحصل على فكرة موجزة عن الميكروكونترولر AT89S52. إنه متحكم 40 سنًا ، وله 4 منافذ (P0 ، P1 ، P2 ، P3) ، كل منفذ به 8 دبابيس. يمكننا اعتبار كل منفذ بمثابة سجل 8 بت ، من وجهة نظر البرنامج. كل دبوس يحتوي على خط إدخال / إخراج واحد ، يعني أنه يمكن استخدام كل دبوس للإدخال وكذلك للإخراج ، أي لقراءة البيانات من بعض الأجهزة مثل المستشعر أو لتوفير مخرجاته لبعض أجهزة الإخراج. تحتوي بعض المسامير على الوظيفة المزدوجة ، والتي تم ذكرها بين قوسين في الرسم التخطيطي أدناه. وظيفيًا مزدوجًا مثل المقاطعة والعدادات وأجهزة ضبط الوقت وما إلى ذلك.
يحتوي AT89S52 على نوعين من الذاكرة ، الأول هو ذاكرة الوصول العشوائي (RAM) التي تحتوي على 256 بايت من الذاكرة والثاني هو EEPROM (ذاكرة القراءة فقط القابلة للمسح الإلكتروني والقابلة للبرمجة) التي تحتوي على 8 كيلو بايت من الذاكرة. تُستخدم ذاكرة الوصول العشوائي (RAM) لتخزين البيانات أثناء تنفيذ البرنامج وتستخدم ذاكرة EEPROM لتخزين البرنامج نفسه. EEPROM هي ذاكرة الفلاش التي استخدمناها لنسخ البرنامج فيها.
مخطط الدائرة وشرحها
نحن نستخدم دبوس واحد من المنفذ 1 لتوصيل LED. في برمجة C المدمجة ، يمكننا الوصول إلى رقم التعريف الشخصي رقم 1 للمنفذ 1 باستخدام P1_0. لقد قمنا بتوصيل مذبذب بلوري بتردد 11.0592 ميجا هرتز برقم التعريف الشخصي PIN 19 و 18 ، أي XTAL1 و XTAL2. يُستخدم المذبذب البلوري لتوليد نبضات الساعة ، ويتم استخدام نبض الساعة لتوفير متوسط حساب التوقيت ، وهو أمر إلزامي لمزامنة جميع الأحداث. يستخدم هذا النوع من البلورات في كل المعدات الرقمية الحديثة تقريبًا مثل أجهزة الكمبيوتر والساعات وما إلى ذلك. الكريستال الأكثر شيوعًا هو الكوارتز. إنها دائرة مذبذب رنيني والمكثفات تستخدم لتذبذب البلورة ، لذلك قمنا بتوصيل مكثفات 22pf. يمكنك أن تقرأ عن "دوائر الطنين" لمعرفة المزيد.
يظهر الرسم التخطيطي لدائرة تفاعلية LED مع متحكم 8051 89S52 في الشكل أعلاه. يتم توصيل Pin 31 (EA) بـ Vcc ، وهو دبوس منخفض نشط. يجب توصيل هذا بـ Vcc عندما لا نستخدم أي ذاكرة خارجية. يتم استخدام Pin 30 (ALE) و pin 29 (PSEN) لتوصيل متحكم دقيق بالذاكرة الخارجية ويخبر Pin 31 المتحكم الدقيق باستخدام الذاكرة الخارجية ، عند الاتصال بالأرض. نحن لا نستخدم أي ذاكرة خارجية لذلك قمنا بتوصيل Pin31 بـ Vcc.
Pin 9 (RST) هو إعادة تعيين PIN ، ويستخدم لإعادة تعيين متحكم ويبدأ البرنامج مرة أخرى من البداية. يعيد ضبط الميكروكونترولر عند توصيله بـ HIGH. لقد استخدمنا دائرة إعادة تعيين قياسية ومقاوم 10 كيلو أوم ومكثف 1 فائق التوهج لتوصيل دبوس RST.
الآن الجزء المثير للاهتمام هنا هو أننا نقوم بتوصيل LED بشكل عكسي ، يعني الساق السالبة برقم التعريف الشخصي للمتحكم الدقيق ، لأن الميكروكونترولر لا يوفر طاقة كافية لتوهج مؤشر LED ، لذلك يعمل المصباح هنا على المنطق السلبي مثل متى ، دبوس P1_0 هو 1 ثم سيتم ضبط مؤشر LED على وضع الإيقاف وعندما يكون خرج الدبوس 0 ، فسيتم تشغيل LED. عندما يكون خرج PIN هو 0 ، فإنه يتصرف مثل توهج الأرض و LED.
شرح الكود
تم تضمين الرأس REGX52.h لتضمين تعريفات السجل الأساسية. هناك العديد من أنواع المتغيرات والثوابت في لغة C المضمنة مثل int ، char ، int غير الموقعة ، float ، إلخ ، يمكنك تعلمها بسهولة. نحن هنا نستخدم int غير موقعة يتراوح مداها من 0 إلى 65535. نحن نستخدم "for loop" لإنشاء تأخير ، بحيث يكون LED قيد التشغيل لبعض الوقت (P1_0 = 0 ، منطق LED سلبي) وإيقاف (P1_0 = 1 ، منطق LED سلبي) للوقت المتأخر. بشكل عام ، عندما يتم تشغيل "for loop" لمدة 1275 مرة ، فإنه يعطي تأخيرًا قدره 1 مللي ثانية ، لذلك قمنا بإنشاء وظيفة "تأخير" لإنشاء DELAY واستدعيناها من البرنامج الرئيسي (main ()). يمكننا تمرير وقت التأخير (بالمللي ثانية) أثناء استدعاء وظيفة "التأخير" من الوظيفة الرئيسية. في البرنامج ، "while (1)" تعني أن البرنامج سينفذ بلا حدود.
سأشرح بإيجاز ، كيف أن تشغيل 1275 مرة من حلقة "for" يعطي تأخيرًا قدره 1 مللي ثانية:
في 8051 ، تتطلب دورة آلة واحدة تنفيذ 12 نبضة بلورية ، وقد استخدمنا بلورة 11.0592 ميجا هرتز.
إذن الوقت اللازم لدورة آلة واحدة: 12 / 11.0592 = 1.085us
إذن 1275 * 1.085 = 1.3 مللي ثانية ، 1275 مرة من حلقة "for" تعطي ما يقرب من 1 مللي ثانية من التأخير.
من الصعب للغاية حساب التأخير الزمني الدقيق الناتج عن برنامج "C" ، عند القياس من راسم الذبذبات (CRO) ، لـ (j = 0 ؛ j <1275 ؛ j ++) يعطي تأخيرًا يقارب 1ms.
لذلك يمكننا أن نفهم ببساطة عن طريق ربط LED مع متحكم 8051 ، أنه من خلال ترميز بسيط ، يمكننا التفاعل والتحكم في الأجهزة من خلال البرنامج (البرمجة) باستخدام متحكم دقيق. كما يمكننا معالجة كل منفذ ودبوس من متحكم دقيق من خلال البرمجة.