תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
8051 (המכונה גם MCS-51) הוא עיצוב MCU משנות ה -80 שנותר פופולרי כיום. בקר מיקרו-בקרים מודרני תואם 8051 זמין מספקים רבים, בכל הצורות והגדלים, ועם מגוון רחב של ציוד היקפי. במדריך זה נסתכל על AT89C2051 MCU מאטמל.
AT89C2051 הוא מיקרו -בקר קטן (2Kbyte, 128byte RAM) וזול (~ $ 1.40 לכל שבב).
- פעולה 2.7-6V
- 15 קווי I/O
- 2 טיימרים (16 ביט)
- הפרעות פנימיות וחיצוניות
- UART
- משווה אנלוגי על שבב
- עד 2MIPS עם שעון 24MHz
שלב 1: דרישות
דרישות:
- מחשב Linux (תוכנה נדרשת: Arduino IDE, git, make, sdcc)
- ארדואינו UNO
- שבב AT89C2051 (חבילת DIP20)
- שקע ZIF 20 פינים
- מצמד אופטי (רצוי פלט MOSFET)
- מגן אב טיפוס של Arduino
- ספק כוח 12V
- ספק כוח 5V
- מתנד קריסטל 16MHz
- 2 קבלים 30pF
- קבל 100nF
- דיודה (למשל: 1N400X)
- נגדים (1K, 3K3)
- פרוטובארד
- מגשרים
- חוט נחושת
בדוק אם קיימת תוכנה נדרשת:
איזה פייתון 3
שעושים איזה sdcc איזה git
שלב 2: בניית המתכנת
חלק זה יהיה קצר, כפי שבניתי את מגן התכנות שלי לפני זמן מה. צירפתי את הסכימה והתמונות של הלוח המורכב. קובץ ה- PDF של הסכימה ניתן למצוא במאגר.
יהיה עליך לתכנת את לוח המתכנתים:
1. שיבוט את המאגר.
שיבוט git
2. פתח את הקובץ AT89C2051_programmer/AT89_prog/AT89_prog.ino ב- Arduino IDE.
3. בנה והעלה את הסקיצה מה- Arduino IDE.
שלב 3: התקנת תוכנת מתכנת
1. צור סביבה וירטואלית של פייתון.
python3 -m venv venv
. venv/bin/activ
2. התקן את at89overlord. at89overlord הוא מתכנת קוד פתוח לשבב AT89C2051 שנכתב על ידי. קוד המקור שלו ניתן למצוא כאן.
pip להתקין at89overlord
3. אמת את ההתקנה.
at89overlord -h
שלב 4: תכנות הצ'יפ
1. שיבוט פרויקט מצמוץ פשוט.
תקליטור ~
שיבוט git https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. בנה את האפליקציה.
עשה
3. חבר את Arduino למחשב האישי, חבר את אספקת 12V, הנח את שבב AT89C2051 בשקע ה- ZIF.
4. אתר את היציאה הטורית של Arduino.
ls /dev /tty*
5. העלה קובץ IntelHex בנוי לשבב. אם היציאה של Arduino שלך שונה מ /dev /ttyACM0 עליך להעביר את הערך הנכון עם פרמטר שורת הפקודה -p.
at89overlord -f./hello.ihx
שלב 5: הרכבה
הרכיב את המעגל על פי סכמטי. ניתן למצוא גרסת PDF במאגר.
אתה אמור לראות את הבזק הלד הירוק בתדירות של סביב 0.5 הרץ.
שלב 6: הסבר קוד
#לִכלוֹל
#לִכלוֹל
אנו מתחילים בהכללת הכותרת AT89X051 מ- sdcc. הוא מכיל פקודות מאקרו לאינטראקציה עם רגיסטרים כאילו היו משתנים. אנו כוללים גם stdint.h המכיל הגדרות של סוגי uint8_t ו- uint16_t שלמים.
// בהנחה שהמתנד הוא 16MHz
#הגדר INTERRUPTS_PER_SECOND 5208
הפרעה מתרחשת כאשר טיימר 0 עולה על גדותיו. הוא מוגדר כטיימר יחיד של 8 ביט, כך שזה קורה כל 2^8 מחזורי מעבד. מחזור מעבד אחד לוקח 12 מחזורי שעון, וכך אנו מגיעים ל 16000000/12/2^8 = 5208.33333.
uint8_t led_state נדיף = 0;
uint16_t timer_counter נדיף = INTERRUPTS_PER_SECOND;
אנו מכריזים על בקרת המדינה המובילה ומפריעים למשתני נגד.
טיימר void0_ISR (void) _interrupt (1) {
שעון_ Timer--; if (timer_counter == 0) {led_state =! led_state; timer_counter = INTERRUPTS_PER_SECOND; }}
בכל פעם שהטיימר 0 עולה על גדותיו, המונה יורד. אם הוא שווה לאפס הוא מתאפס, ומצב ה- LED משתנה. זה קורה בערך פעם בשנייה, וכתוצאה מכך תדר מהבהב של ~ 0.5Hz LED.
int main () {
TMOD = 0x3; // מצב טיימר - 8 סיביות, ללא מכשיר מראש. freq = OSCFREQ/12/2^8 TL0 = 0; // ניקוי מונה TH0 = 0; // נקה רשום TR0 = 1; // הגדר טיימר להפעלה. ET0 = 1; // הגדר הפרעה. EA = 1; // הגדר הפרעה גלובלית. בעוד (1) {if (led_state) {P1 = 0xFF; } אחר {P1 = 0x00; }}}
אנו מגדירים את מודול הטיימר ומחכים לשינויים במשתנה הבקרה של מצב ה- LED. TMOD הוא רשם בקרת מצב הטיימר. TL0 ו- TH0 הם אוגרי בקרת טיימר 0. ET0 הוא ביט ההפעלה של טיימר 0 ברשם בקרת הטיימר (TCON). TR0 ו- EA הם סיביות ברשם האפשרויות להפריע (IE).
שלב 7: משאבים נוספים
- גיליון נתונים של AT89C2051:
- מהדר מכשיר קטן C (sdcc):
- 8051 משאבים:
- מאגר מתכנת AT89C2051:
- מאגר hello-8051: