ממשק LED הוא הדבר הראשון, שינסו לעשות תוך כדי התחלה עם כל מיקרו-בקר. אז הנה במדריך זה אנו הולכים לממשק נורית LED עם מיקרו-בקר 8051 ונכתוב תוכנית C כדי להבהב את ה- LED. השתמשנו במיקרו-בקר פופולרי מאוד AT89S52, ממשפחת 8051, על ידי ATMEL.
לפני שנפרט, עלינו לקבל מושג קצר על מיקרו-בקר AT89S52. זהו מיקרו-בקר 40 פינים, ויש לו 4 יציאות (P0, P1, P2, P3), לכל יציאה 8 פינים. אנו יכולים להחשיב כל יציאה כרישום של 8 סיביות, מנקודת מבט התוכנה. כל סיכה בעלת קו קלט / פלט אחד, פירושה שכל סיכה יכולה לשמש לקלט וגם לפלט, קרי לקריאת נתונים מכשיר כלשהו כמו חיישן או לספק את הפלט שלו למכשיר פלט כלשהו. לחלק מהסיכות יש את הפונקציונליות הכפולה, אשר הוזכרה בסוגריים בתרשים הפינים שלהלן. כפול פונקציונלי כמו להפסקות, מונים, טיימרים וכו '.
ל- AT89S52 שני סוגים של זיכרון, הראשון הוא זיכרון RAM בעל 256 ביט זיכרון והשני הוא EEPROM (זיכרון קריאה בלבד למחיקה אלקטרונית וניתן לתכנות) שיש בו 8,000 בתים זיכרון. RAM משמש לאחסון הנתונים במהלך ביצוע תוכנית ו- EEPROM משמש לאחסון התוכנית עצמה. EEPROM הוא זיכרון ההבזק בו השתמשנו לצרוב את התוכנית.
תרשים מעגל והסבר
אנו משתמשים בסיכה אחת של יציאה 1 כדי לחבר את ה- LED. בשנת C מוטבע תכנות נוכל לגשת PIN 1 של נמל 1 באמצעות P1_0. חיברנו מתנד קריסטל בתדר 11.0592MHz ל- PIN 19 ו- 18 כלומר XTAL1 ו- XTAL2. מתנד קריסטל משמש להפקת פעימות שעון, ודופק שעון משמש כדי לספק את הממוצע לחישוב תזמון, אשר חובה לסנכרן את כל האירועים. סוג זה של גבישים המשמשים כמעט בכל ציוד דיגיטלי מודרני כמו במחשבים, שעונים וכו 'הקריסטל הנפוץ ביותר הוא קוורץ. זהו מעגל מתנד מהדהד וקבלים משמשים לתנודת הגביש, אז חיברנו לכאן קבלים 22pf. אתה יכול לקרוא על "מעגלי תהודה" כדי לדעת יותר.
דיאגרמת מעגל עבור LED התממשקות עם 8051 מיקרו-בקר 89S52 מוצג באיור לעיל. סיכה 31 (EA) מחוברת ל- Vcc, שהוא סיכה נמוכה פעילה. זה צריך להיות מחובר ל- Vcc כאשר איננו משתמשים בזיכרון חיצוני כלשהו. סיכה 30 (ALE) וסיכה 29 (PSEN) משמשים לחיבור מיקרו-בקר לזיכרון החיצוני וסיכה 31 אומרת למיקרו-בקר להשתמש בזיכרון חיצוני, כאשר הוא מחובר לקרקע. איננו משתמשים בשום זיכרון חיצוני ולכן חיברנו את Pin31 ל- Vcc.
פין 9 (RST) הוא ה- PIN לאיפוס, המשמש לאיפוס המיקרו-בקר והתוכנית מתחילה שוב מההתחלה. הוא מאפס את המיקרו-בקר כאשר הוא מחובר ל- HIGH. השתמשנו במעגלי איפוס סטנדרטיים, נגד 10k אוהם וקבל 1uF לחיבור סיכת RST.
עכשיו החלק המעניין כאן הוא שאנחנו מחברים את ה- LED ברוורס, פירושו רגל שלילית עם ה- PIN של המיקרו-בקר, מכיוון שהמיקרו-בקר לא מספק מספיק כוח כדי להדליק נורית, אז הנה ה- LED פועל על ההיגיון השלילי כמו מתי, סיכה P1_0 היא 1 ואז ה- LED יכוון כיבוי וכאשר פלט הסיכה הוא 0 אז ה- LED יופעל. כאשר פלט ה- PIN הוא 0, הוא מתנהג כמו קרקע ונורית LED.
הסבר קוד
הכותרת REGX52.h נכללה כדי לכלול את הגדרות הרישום הבסיסיות. ישנם סוגים רבים של משתנים וקבועים ב- C מוטבעים כמו int, char, int חתום, float וכו ', אתה יכול ללמוד אותם בקלות. כאן אנו משתמשים ב- int לא חתום שהטווח שלו הוא בין 0 ל -65535. אנו משתמשים ב- "for loop" ליצירת עיכוב, כך שהנורית תידלק למשך זמן מה (P1_0 = 0, לוגיקת LED שלילית) ו- OFF (P1_0 = 1, לוגיקת LED שלילית) לזמן מתעכב. בדרך כלל כאשר "עבור לולאה" פועל פי 1275 פעמים זה נותן עיכוב של 1 ms, אז יצרנו פונקציית 'עיכוב' ליצירת DELAY וקראנו לו מהתוכנית הראשית (main ()). אנו יכולים להעביר זמן DELAY (ב ms) תוך קריאה לפונקציה "עיכוב" מהפונקציה הראשית. בתוכנית, "אמנם (1)" פירושו שהתוכנית תבוצע לאין ערוך.
אני מסביר בקצרה איך 1275 פעמים ריצה של לולאה "עבור" נותנת עיכוב של 1ms:
בשנת 8051, מחזור אחד של מכונה דורש לבצע 12 פעימות קריסטל ויש לנו קריסטל 11.0592Mhz.
אז הזמן שנדרש למחזור מכונה אחד: 12 / 11.0592 = 1.085us
אז 1275 * 1.085 = 1.3ms, 1275 פעמים של "לולאה" נותן עיכוב של כמעט 1ms.
את עיכוב הזמן המדויק המופק על ידי תוכנית "C" קשה מאוד לחשב, כאשר מודדים באמצעות אוסצילוסקופ (CRO), עבור (j = 0; j <1275; j ++) נותנים עיכוב של כמעט 1 ms.
כדי שנוכל להבין פשוט על ידי ממשק LED עם מיקרו-בקר 8051, שעם קידוד פשוט זה נוכל לקיים אינטראקציה ולשלוט בחומרה באמצעות תוכנה (תכנות) באמצעות מיקרו-בקר. כמו כן אנו יכולים לתפעל כל יציאה וסיכה של מיקרו-בקר באמצעות תכנות.