جدول المحتويات:

مقدمة إلى البرمجة 8051 باستخدام AT89C2051 (ضيف بطولة: Arduino): 7 خطوات (بالصور)
مقدمة إلى البرمجة 8051 باستخدام AT89C2051 (ضيف بطولة: Arduino): 7 خطوات (بالصور)

فيديو: مقدمة إلى البرمجة 8051 باستخدام AT89C2051 (ضيف بطولة: Arduino): 7 خطوات (بالصور)

فيديو: مقدمة إلى البرمجة 8051 باستخدام AT89C2051 (ضيف بطولة: Arduino): 7 خطوات (بالصور)
فيديو: How to program 8051 microcontroller using Arduino?? 2024, يوليو
Anonim
مقدمة إلى 8051 البرمجة باستخدام AT89C2051 (ضيف بطولة: Arduino)
مقدمة إلى 8051 البرمجة باستخدام AT89C2051 (ضيف بطولة: Arduino)

8051 (المعروف أيضًا باسم MCS-51) هو تصميم MCU من الثمانينيات ولا يزال شائعًا حتى اليوم. تتوفر وحدات التحكم الدقيقة الحديثة المتوافقة مع 8051 من بائعين متعددين ، بجميع الأشكال والأحجام ، مع مجموعة واسعة من الأجهزة الطرفية. في هذا الدليل ، سننظر في AT89C2051 MCU من Atmel.

AT89C2051 هو متحكم صغير (2Kbyte Flash ، 128 بايت من ذاكرة الوصول العشوائي) ورخيص (~ 1.40 دولار لكل شريحة).

  • عملية 2.7-6V
  • 15 خطوط الإدخال / الإخراج
  • 2 مؤقت (16 بت)
  • المقاطعات الداخلية والخارجية
  • UART
  • المقارنة التناظرية على الرقاقة
  • ما يصل إلى 2MIPS مع ساعة 24MHz

الخطوة 1: المتطلبات

متطلبات
متطلبات

متطلبات:

  • كمبيوتر Linux (البرنامج المطلوب: Arduino IDE، git، make، sdcc)
  • اردوينو UNO
  • شريحة AT89C2051 (حزمة DIP20)
  • مقبس ZIF ذو 20 سنًا
  • Optocoupler (يفضل إخراج MOSFET)
  • درع اردوينو للنماذج الأولية
  • 12 فولت امدادات الطاقة
  • 5V امدادات الطاقة
  • 16 ميجا هرتز الكريستال مذبذب
  • 2x 30pF مكثف
  • مكثف 100nF
  • الصمام الثنائي (على سبيل المثال: 1N400X)
  • المقاومات (1 ك ، 3 ك 3)
  • بروتوبورد
  • صداري
  • سلك نحاس

تحقق من البرامج المطلوبة:

التي بيثون 3

مما يجعل أي sdcc أي بوابة

الخطوة الثانية: بناء المبرمج

بناء المبرمج
بناء المبرمج
بناء المبرمج
بناء المبرمج
بناء المبرمج
بناء المبرمج

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

سيكون عليك برمجة لوحة المبرمجين:

1. استنساخ المستودع.

استنساخ بوابة

2. افتح ملف AT89C2051_programmer / AT89_prog / AT89_prog.ino في Arduino IDE.

3. قم ببناء وتحميل الرسم التخطيطي من Arduino IDE.

الخطوة الثالثة: تثبيت برنامج المبرمج

تثبيت برنامج المبرمج
تثبيت برنامج المبرمج
تثبيت برنامج المبرمج
تثبيت برنامج المبرمج

1. إنشاء بيئة افتراضية بيثون.

python3 -m venv venv

. venv / بن / تفعيل

2. قم بتثبيت at89overlord. at89overlord هو مبرمج مفتوح المصدر لشريحة AT89C2051 مكتوبة بواسطتي. يمكن العثور على كود المصدر هنا.

نقطة تثبيت at89overlord

3. تحقق من التثبيت.

at89overlord -h

الخطوة 4: برمجة الشريحة

برمجة الرقاقة
برمجة الرقاقة
برمجة الرقاقة
برمجة الرقاقة
برمجة الرقاقة
برمجة الرقاقة
برمجة الرقاقة
برمجة الرقاقة

1. استنساخ مشروع وميض بسيط.

مؤتمر نزع السلاح ~

git clone https://github.com/piotrb5e3/hello-8051.git cd hello-8051 /

2. بناء التطبيق.

صنع

3. قم بتوصيل Arduino بجهاز الكمبيوتر ، قم بتوصيل مزود الطاقة 12 فولت ، ضع شريحة AT89C2051 في مقبس ZIF.

4. حدد موقع منفذ Arduino التسلسلي.

ls / dev / tty *

5. تحميل ملف IntelHex المدمج على الشريحة. إذا كان منفذ Arduino الخاص بك مختلفًا عن / dev / ttyACM0 ، فيجب عليك تمرير القيمة الصحيحة باستخدام معلمة سطر الأوامر -p.

at89overlord -f./hello.ihx

الخطوة 5: التجميع

المجسم
المجسم
المجسم
المجسم
المجسم
المجسم

قم بتجميع الدائرة وفقًا للتخطيط. يمكن العثور على نسخة PDF في المستودع.

يجب أن ترى وميض LED الأخضر بتردد حوالي 0.5 هرتز.

الخطوة 6: شرح الكود

شرح الكود
شرح الكود

#يشمل

#يشمل

نبدأ بتضمين رأس AT89X051 من sdcc. يحتوي على وحدات ماكرو للتفاعل مع السجلات كما لو كانت متغيرات. نقوم أيضًا بتضمين stdint.h الذي يحتوي على تعريفات أنواع الأعداد الصحيحة uint8_t و uint16_t.

// بافتراض أن المذبذب هو 16 ميجا هرتز

#define INTERRUPTS_PER_SECOND 5208

تحدث مقاطعة عندما يفيض Timer0. تم تكوينه كمؤقت واحد 8 بت ، لذلك يحدث هذا كل 2 ^ 8 دورات معالج. تستغرق دورة المعالج الواحدة 12 دورة ساعة ، وبالتالي نصل إلى 16000000/12/2 ^ 8 = 5208.33333.

uint8_t متقلبة led_state = 0 ؛

uint16_t timer_counter = INTERRUPTS_PER_SECOND ؛

نعلن التحكم بقيادة الدولة ومتغيرات عداد المقاطعة.

Timer0_ISR (void) _interrupt (1) باطل {

عداد_مؤقت-- ؛ إذا (timer_counter == 0) {led_state =! led_state؛ timer_counter = INTERRUPTS_PER_SECOND ، }}

في كل مرة يتجاوز فيها Timer0 العداد ينخفض. إذا كانت تساوي الصفر ، تتم إعادة تعيينها ، ويتم تغيير حالة الصمام. يحدث هذا بمعدل مرة واحدة في الثانية ، مما ينتج عنه ~ 0.5 هرتز تردد وميض LED.

انت مين() {

TMOD = 0x3 ؛ // وضع المؤقت - 8 بت ، بدون مقياس مسبق. التكرار = OSCFREQ / 12/2 ^ 8 TL0 = 0 ؛ // مسح العداد TH0 = 0 ؛ // مسح السجل TR0 = 1 ؛ // ضبط جهاز ضبط الوقت للتشغيل. ET0 = 1 ؛ // ضبط المقاطعة. EA = 1 ؛ // تعيين المقاطعة العالمية. بينما (1) {if (led_state) {P1 = 0xFF ؛ } آخر {P1 = 0x00 ؛ }}}

نقوم بتكوين وحدة المؤقت وننتظر التغييرات في متغير التحكم في حالة الصمام ، TMOD هو سجل التحكم في وضع المؤقت. TL0 و TH0 هي سجلات تحكم Timer0. ET0 هو بت enable-timer0 في سجل التحكم في المؤقت (TCON). TR0 و EA هما بتات في تسجيل المقاطعة لتمكين السجل (IE).

الخطوة 7: موارد إضافية

  • ورقة بيانات AT89C2051:
  • مترجم C للأجهزة الصغيرة (sdcc):
  • موارد 8051:
  • مستودع المبرمج AT89C2051:
  • مستودع hello-8051:

موصى به: