جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
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: