מדריך תכנות משובץ C עם שפת Keil

נסה את הכלי שלנו לביטול בעיות





Embedded C היא שפת התכנות הפופולרית ביותר בתחום התוכנה לפיתוח גאדג'טים אלקטרוניים. כל מעבד משויך לתוכנה משובצת. תכנות C מוטבע ממלא תפקיד מרכזי בביצוע פונקציות ספציפיות על ידי המעבד. בחיי היום יום שלנו, אנו משתמשים לעיתים קרובות במכשירים אלקטרוניים רבים כמו מכונות כביסה, טלפונים ניידים, מצלמה דיגיטלית וכן הלאה, והם יעבדו על בסיס מיקרו-בקרים שתוכנתו על ידי מוטבע C.

תכנות מערכת משובצת

תכנות מערכת משובצת



קוד ה- C שנכתב הוא אמין יותר, נייד יותר וניתן להרחבה ולמעשה, הרבה יותר קל להבנה. הכלי בראש ובראשונה הוא התוכנה המוטמעת המחליטה על פעולת מערכת משובצת. שפת התכנות Embedded C משמשת לרוב לתכנות המיקרו-בקרים.


מדריך תכנות משובץ C (8051)

לצורך כתיבת התוכנית, על המעצבים המוטבעים להיות בעלי ידע מספיק על חומרתם של מעבדים או בקרים מסוימים, שכן תכנות ה- C המוטמע היא טכניקת תכנות מלאה הקשורה לחומרה.



מדריך תכנות

מדריך תכנות

מוקדם יותר, יישומים מוטבעים רבים פותחו באמצעות תכנות ברמת הרכבה. עם זאת, הם לא סיפקו ניידות כדי להתגבר על בעיה זו עם הופעתן של שפות שונות ברמה גבוהה כמו C, COBOL ו- Pascal. עם זאת, הייתה זו שפת C שקיבלה הסכמה נרחבת פיתוח יישומי מערכות משובצות , והיא ממשיכה לעשות זאת.

מערכת משובצת מחשב

המערכת המוטמעת מוגדרת כשילוב של תוכנת תכנות C משובצת וחלקה החומרי מורכב בעיקר ממיקרו-בקרים והיא נועדה לבצע את המשימה הספציפית. סוגים אלה של מערכות משובצות נמצאים בשימוש בחיי היומיום שלנו כגון מכונות כביסה ומקליטי וידאו, מקררים וכן הלאה. המערכת המשובצת הוצגה לראשונה על ידי בקרי המיקרו 8051.

מערכת משובצת מחשב

מערכת משובצת מחשב

מבוא למיקרו-בקר 8051

המיקרו-בקר 8051 הוא מיקרו-בקר בסיסי, הוא הוצג לראשונה על ידי 'תאגיד אינטל' מאז 1970. הוא פותח על ידי ארכיטקטורת המעבד 8086. ה- 8051 היא משפחה של המיקרו-בקר, אשר פותחה על ידי יצרנים שונים כמו פיליפס, אטמל, דללים וכו '. מיקרו-בקרי 8051 שימש בהמון מוצרים משובצים מצעצועי ילדים קטנים ועד מערכות רכב גדולות.


8051 מיקרו-בקר

8051 מיקרו-בקר

מיקרו-בקר 8051 הוא 8 סיביות ארכיטקטורת 'CISC' . הוא מורכב מזיכרונות, תקשורת טורית, הפרעות, יציאות קלט / פלט וטיימר / דלפקים, מובנים לשבב משולב יחיד, שתוכנת לשלוט בהתקנים ההיקפיים שמממשקים אליו. התוכנית נשמרת בזיכרון ה- RAM של המיקרו-בקר, אך לפני כתיבת התוכנית, עלינו להיות מודעים לזיכרון ה- RAM אִרגוּן של המיקרו-בקר.

תכנות מערכת משובצת: הצהרת יסודות

כל פונקציה היא אוסף של משפטים המבצעים משימה ספציפית ואיסוף פונקציה אחת או יותר נקרא שפת תכנות. כל שפה מורכבת מכמה אלמנטים בסיסיים וכללים דקדוקיים. תכנות השפה C נועד לתפקד עם קבוצת התווים, משתנים, סוגי נתונים, קבועים, מילות מפתח, ביטויים וכן הלאה משמשים לכתיבת תוכנית C. כל אלה נחשבים תחת קובץ הכותרת או קובץ הספרייה והוא מיוצג כ-

#לִכלוֹל

פיתוח תכנות משובץ C

פיתוח תכנות משובץ C

הרחבה של שפת C נקראת שפת תכנות Embedded C. בהשוואה לעיל, לתכנות המוטבע בשפה C יש כמה תכונות נוספות כגון סוגי נתונים ומילות מפתח וקובץ הכותרת או קובץ הספרייה מיוצג כ

#לִכלוֹל

מוטבעות מילות מפתח נוספות

  • sbit
  • קצת
  • SFR
  • נָדִיף
  • מגדירים מאקרו

ה- 'sbit' משמש להצהרת ה- PIN היחיד של המיקרו-בקר. לדוגמא, LED מחובר לסיכת P0.1, לא מומלץ לשלוח את הערך לסיכת היציאה ישירות, ראשית, עלינו להכריז על הסיכה עם משתנה אחר ואז לאחר שנוכל להשתמש בכל מקום בתוכנית.

תחביר: sbit a = P0 ^ 1 // מכריז על הסיכה המתאימה עם משתנה //
a = 0x01 // שלח את הערך לסיכת היציאה //

ה'סיבית 'משמש לבדיקת מצב המשתנה.

תחביר: bit c // מצהיר על משתנה הסיביות //
c = a // ערך מוקצה למשתנה c //
אם (c == 1) // בדוק את התנאי נכון או לא נכון //

{
... ..
……
}

מילת המפתח 'SFR' משמשת לגישה לרשומות ה- SFR בשם אחר. מרשם ה- SFR מוגדר כ- רישום פונקציות מיוחד , הוא מכיל את כל הרישומים הקשורים להיקף על ידי ציון הכתובת. מרשם ה- SFR מוכרז על ידי מילת המפתח SFR. מילת המפתח SFR חייבת להיות באותיות גדולות.

תחביר: יציאת SFR = 0x00 // 0x00 היא כתובת port0 שהיא מוכרזת על ידי משתנה יציאה //
פורט = 0x01 // ואז שלח את הערך לפורט 0 //
לְעַכֵּב()
יציאה = 0x00
לְעַכֵּב()

מילת המפתח 'הפכפכה' היא החשובה ביותר בפיתוח מערכות משובצות. לא ניתן היה לשנות את המשתנה שמצהיר עם ערך מילת המפתח ההפכפך. ניתן להשתמש בו ברשומות היקפיות הממופות זיכרון, משתנים גלובליים ששונו על ידי ה- ISR. מבלי להשתמש במילת המפתח ההפכפכה להעברת וקבלת הנתונים, תתרחש שגיאת קוד או שגיאת אופטימיזציה.

תחביר: נדיף int k

המאקרו הוא שם שהוא משמש כדי להכריז על גוש ההצהרות כהנחיה לפני מעבד. בכל פעם שמשתמשים בשם, הוא מוחלף בתוכן המאקרו. המאקרו מייצגים את ההגדרה #. כל סיכות היציאה מוגדרות על ידי המאקרו.

תחביר: #define dat Po // כל היציאה מוכרזת על ידי משתנה //
dat = 0x01 // נתונים שנשלחים לנמל0 //

תוכניות בסיסיות C מוטבעות

תכנות המיקרו-בקר יהיה שונה עבור כל אחת מהן סוג מערכת הפעלה . למרות שקיימות מערכות הפעלה רבות כמו לינוקס, חלונות, RTOS וכן הלאה. עם זאת, ל- RTOS יש כמה יתרונות לפיתוח מערכות משובצות. מאמר זה דן בתכנות C מוטבע בסיסי לפיתוח תכנות C מוטבע באמצעות מיקרו-בקר 8051.

שלבי תכנות מוטבעים C

שלבי תכנות מוטבעים C

  • נורית LED מהבהבת באמצעות מיקרו-בקר 8051
  • מספר המוצג בתצוגה בת 7 קטעים באמצעות מיקרו-בקר 8051
  • טיימר / חישובי מונה ותכנות באמצעות מיקרו-בקר 8051
  • חישובים ותכנית תקשורת טורית באמצעות מיקרו-בקר 8051
  • להפריע לתוכניות באמצעות מיקרו-בקר 8051
  • תכנות מקשים באמצעות מיקרו-בקר 8051
  • תכנות LCD עם מיקרו-בקר 8051

נורית LED מהבהבת באמצעות מיקרו-בקר 8051

ה- LED הוא מכשיר מוליך למחצה המשמש ביישומים רבים, בעיקר למטרת אינדיקציה. היא מוצאת מגוון עצום של יישומים כמדדים במהלך הבדיקה לבדיקת תקפות התוצאות בשלבים שונים. הם זולים מאוד וזמינים במגוון צורות, צבעים וגדלים. הנוריות משמשות לעיצוב לוחות תצוגת הודעות ותמרורי בקרת תנועה וכו '. כאן נוריות הנוריות מתממשקות עם ה- PORT0 של מיקרו-בקרי 8051.

נורית LED מהבהבת באמצעות מיקרו-בקר 8051

נורית LED מהבהבת באמצעות מיקרו-בקר 8051

1. 01010101
10101010

# כלול // קובץ כותרת //
void main () // נקודת הסטטוס של ביצוע התוכנית //
{
לא חתום int i // סוג נתונים //
ואילו (1) // לולאה רציפה //
{
P0 = 0x55 // שלח את ערך ההקסה ליציאה 0 //
עבור (i = 0i<30000i++) //normal delay//
P0 = 0x3AA // שלח את ערך ההקסה ליציאה0 //
עבור (i = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10,000,000

#לִכלוֹל

ריק ראשי ()

{

unsignedint i

char לא חתום j, b

בעוד (1)

{

P0 = 0x01

b = P0

עבור (j-0j<3000j++)

עבור (j = 0j<8j++)

{

b = b<<1

P0 = ב

עבור (j-0j<3000j++)

}

}

}

3. 00001111

11110000

#לִכלוֹל

ריק ראשי ()

{

unsignedint i

בעוד (1)

{

P0 = 0x0F

עבור (j-0j<3000j++)

P0 = 0xF0

עבור (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#לִכלוֹל

ריק ראשי ()

{

unsignedint i

char לא חתום j, b

בעוד (1)

{

P0 = 0x01

b = P0

עבור (j-0j<3000j++)

עבור (j = 0j<8j++)

0x01

P0 = ב

עבור (j-0j<3000j++)

}

}

הצגת מספרים בתצוגה של 7 קטעים באמצעות מיקרו-בקר 8051

ה מציג 7 קטעים הוא התצוגות האלקטרוניות הבסיסיות, המשמשות במערכות רבות להצגת המידע המספרי. הוא מורכב משמונה נוריות LED המחוברות באופן רציף כדי להציג ספרות מ -0 עד 9, כאשר שילובים נאותים של נוריות מופעלות. הם יכולים להציג ספרה אחת בלבד בכל פעם.

הצגת מספרים בתצוגה של 7 קטעים באמצעות מיקרו-בקר 8051

הצגת מספרים בתצוגה של 7 קטעים באמצעות מיקרו-בקר 8051

1. WAP כדי להציג את המספרים בטופס '0 עד F' בארבע תצוגות 7 קטעים?

#לִכלוֹל
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
ריק ראשי ()
{
לא חתום n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
לא חתמת אותך, י
a = b = c = d = 1
בעוד (1)
{
עבור (i = 0i<10i++)
{
P2 = n [i]
עבור (j = 0j<60000j++)
}
}
}

2. WAP כדי להציג את המספרים מ- 00 עד 10 'בתצוגות 7 מגזינים?

#לִכלוֹל
sbit a = P3 ^ 0
sbit b = P3 ^ 1
חלל תצוגה 1 ()
חלל תצוגה 2 ()
עיכוב בטל ()
ריק ראשי ()
{
לא חתום n [10] = {0 × 40,0xF9,0 × 24,0 × 30,0 × 19,0 × 12,0 × 02,0xF8,0xE00,0 × 10}
לא חתמת אותך, י
ds1 = ds2 = 0
בעוד (1)
{
עבור (i = 0, i<20i++)
display1 ()
display2 ()
}
}
חלל תצוגה 1 ()
{
a = 1
b = 0
P2 = s [ds1]
לְעַכֵּב()
a = 1
b = 0
P2 = s [ds1]
לְעַכֵּב()
}
חלל תצוגה 2 ()
{
ds1 ++
אם (ds1> = 10)
{
ds1 = 0
ds2 ++
אם (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
עיכוב בטל ()
{
unsignedint k
עבור (k = 0k<30000k++)
}

טיימר / דלפק חישובים ותכנית באמצעות מיקרו-בקר 8051

העיכוב הוא אחד הגורמים החשובים בפיתוח תוכנת היישומים. עם זאת, העיכוב הרגיל לא ייתן את התוצאה היקרה להתגבר על בעיה זו ליישום עיכוב הטיימר. ה טיימרים ודלפקים הם רכיבי חומרה של המיקרו-בקר, המשמש ביישומים רבים כדי לספק את עיכוב הזמן היקר עם פעימות ספירה. שתי המשימות מיושמות על ידי טכניקת התוכנה.

עיכוב טיימר

WAP לייצר עיכוב זמן של 500us באמצעות T1M2 (טיימר 1 ומצב 2)?

#לִכלוֹל

ריק ראשי ()
{
char לא חתומה
TMOD = 0x20 // הגדר את מצב הטיימר //
עבור (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // הגדר את עיכוב הזמן //
TH1 = 0x00
TR1 = 1 // טיימר על //
בעוד (TF1 == 0) // בדוק את ביט הדגל //
TF1 = 0
}
TR1 = 0 // טיימר כבוי //
}

עיכוב לולאה רגיל

עיכוב בטל ()

{
unsignedint k
עבור (k = 0k<30000k++)
}

חישובי תקשורת סדרתיים ותכנית באמצעות מיקרו-בקר 8051

תקשורת טורית משמשת בדרך כלל להעברה ולקבלת האות. המיקרו-בקר 8051 מורכב תקשורת טורית של UART האותות המועברים ומתקבלים באמצעות סיכות Rx ו- Tx. ה- UART לוקח בתים של נתונים ושולח את הסיביות הבודדות באופן רציף. הרשמים הם דרך לאסוף ולאחסן את הנתונים בזיכרון. UART הוא פרוטוקול חצי דופלקס. חצי דופלקס פירושו העברת וקבלת הנתונים, אך לא בו זמנית.

חישובי תקשורת סדרתיים ותכנית באמצעות מיקרו-בקר 8051

חישובי תקשורת סדרתיים ותכנית באמצעות מיקרו-בקר 8051

1. WAP כדי להעביר את התו 'S' לחלון הסדרתי להשתמש ב- 9600 כקצב השידור?

28800 הוא קצב השידור המרבי של מיקרו-בקר 8051

28800/9600 = 3

קצב השידור '3' נשמר בטיימרים

#לִכלוֹל

ריק ראשי ()

{
SCON = 0x50 // התחל את התקשורת הטורית //
TNOD = 0x20 // בחר את מצב הטיימר //
TH1 = 3 // טען את קצב השידור //
TR1 = 1 // טיימר פועל //
SBUF = ’S’ // אחסן את התו במרשם //
ואילו (TI == 0) // בדוק את רישום ההפרעה //
TI = 0
TR1 = 0 // כבוי הטיימר //
ואילו (1) // לולאה רציפה //
}

2. WAP כדי לקבל את הנתונים מהיפר-טרמינל ולשלוח את הנתונים ל- PORT 0 של המיקרו-בקר באמצעות 9600 baud?

28800 הוא קצב השידור המרבי של מיקרו-בקר 8051

28800/9600 = 3

קצב השידור '3' נשמר בטיימרים

#לִכלוֹל

ריק ראשי ()
{
SCON = 0x50 // התחל את התקשורת הטורית //
TMOD = 0x20 // בחר את מצב הטיימר //
TH1 = 3 // טען את קצב השידור //
TR1 = 1 // טיימר פועל //
PORT0 = SBUF // שלח את הנתונים מ- SBUF לנמל0 //
ואילו (RI == 0) // בדוק את רישום ההפרעה //
RI = 0
TR1 = 0 // כבוי הטיימר //
ואילו (1) // לעצור את התוכנית כשמתקבלת התו //
}

להפריע לתוכניות באמצעות מיקרו-בקר 8051

ההפרעה היא אות שמאלץ לעצור את התוכנית הנוכחית ולהפעיל את התוכנית השנייה באופן מיידי. המיקרו-בקר 8051 מספק 6 הפרעות שהן פנימיות וחיצוניות להפריע למקורות . כאשר ההפרעה מתרחשת המיקרו-בקר מושהה את המשימה הנוכחית ומטפל בהפסקה על ידי ביצוע ה- ISR ואז המיקרו-בקר חוזר למשימה האחרונה.

WAP לביצוע פעולת משמרת שמאלה כאשר מתרחש הפסקת טיימר 0 ואז לבצע את פעולת ההפרעה עבור ה- P0 בפונקציה הראשית?

#לִכלוֹל

חרם לא חתום ב

חלל טיימר 0 () להפריע 2 // נבחר טיימר 0 להפסיק //
{
b = 0x10
P1 = ב<<2
}
ריק ראשי ()
{
חרם לא חתום, אני
IE = 0x82 // אפשר את הפסקת הטיימר 0 //
TMOD = 0x01
TLo = 0xFC // טיימר הפסקה //
TH1 = 0xFB
TR0 = 1
a = 0x00
בעוד (1)
{
עבור (i = 0i<255i++)
{
a ++
פו = א
}
}
}

תכנות מקשים באמצעות מיקרו-בקר 8051

לוח המקשים של המטריצה ​​הוא מכשיר למיתוג אנלוגי, המשמש ביישומים מוטבעים רבים כדי לאפשר למשתמש לבצע את המשימות הדרושות. א מקלדת מטריצה מורכב ממערך מתגים בפורמט מטריצה ​​בשורות ועמודות. השורות והעמודות מחוברים למיקרו-בקר כך ששורת המתגים מחוברים לסיכה אחת והמתגים בכל עמודה מחוברים לסיכה אחרת ואז מבצעים את הפעולות.

תכנות מקשים באמצעות מיקרו-בקר 8051

תכנות מקשים באמצעות מיקרו-בקר 8051

1. WAP כדי להחליף את הנורית על ידי לחיצה על המתג

#לִכלוֹל
sbit a = P3 ^ 0
sbit b = P3 ^ 1
sbit c = P3 ^ 2
sbit d = P3 ^ 3
עיכוב בטל ()
ריק ראשי ()
{
בעוד (1)
{
a = 0
b = 1
c = 1
d = 1
לְעַכֵּב()
a = 1
b = 0
c = 1
d = 1
עיכוב בטל ()
{
char לא חתומה
TMOD = 0x20 // הגדר את מצב הטיימר //
עבור (i = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // הגדר את עיכוב הזמן //
TH1 = 0x00
TR1 = 1 // טיימר על //
בעוד (TF1 == 0) // בדוק את ביט הדגל //
TF1 = 0
}
TR1 = 0 // טיימר כבוי //
}

2. WAP כדי להפעיל את ה- LED על ידי לחיצה על המקש '1' בלוח המקשים?

#לִכלוֹל

sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
sbit LED = P0 ^ 1

ריק ראשי ()
{

r1 = 0
אם (c1 == 0)
{

נורית = 0xff
}
}

3. WAP כדי להציג את המספר 0,1,2,3,4,5 בקטע השבע על ידי לחיצה על המקש המתאים בלוח המקשים?

#לִכלוֹל

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

ריק ראשי ()

{

r1 = 0 a = 1

אם (c1 == 0)

{

a = 0xFC

}

אם (c2 == 0)

{

a = 0x60

}

אם (c3 == 0)

{

a = 0xDA

}

אם (c4 == 0)

{

a = 0xF2

}

}

תכנות LCD עם מיקרו-בקר 8051

ה תצוגת אל סי די הוא מכשיר אלקטרוני, המשמש לעתים קרובות ביישומים רבים להצגת המידע בפורמט טקסט או תמונה. ה- LCD הוא תצוגה שיכולה להציג תווים בקלות על גבי המסך שלה. צג ה- LCD מורכב מקווי נתונים של 8 וקווי שליטה 3 המשמשים לממשק למיקרו-בקר.

תכנות LCD עם מיקרו-בקר 8051

תכנות LCD עם מיקרו-בקר 8051

WAP כדי להציג את 'ערכות EDGEFX' בתצוגת LED?

#לִכלוֹל
#define kam P0

voidlcd_initi ()
voidlcd_dat (תו לא חתום)
voidlcd_cmd (תו לא חתום)
עיכוב בטל ()
תצוגה בטלה (תווים לא חתומים, תווים לא חתומים)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit ב = P2 ^ 2
ריק ראשי ()
{

lcd_initi ()
lcd_cmd (0x80)
עיכוב (100)
lcd_cmd (0xc0)
תצוגה ('ערכות edgefx', 11)
בעוד (1)
}

תצוגה בטלה (תווים לא חתומים, תווים לא חתומים)
{
לא חתום w
עבור (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
עיכוב (100)
lcd_cmd (0 × 38)
עיכוב (100)
lcd_cmd (0 × 06)
עיכוב (100)
lcd_cmd (0x0c)
עיכוב (100)
}
voidlcd_dat (char dat לא חתום)
{
מסרק = זה
rs = 1
rw = 0
ב = 1
עיכוב (100)
ב = 0
}
}
voidlcd_cmd (cmd char לא חתום)
{
בא = cmd
rs = 0
rw = 0

ב = 1
עיכוב (100)
ב = 0
}
עיכוב ריק (לא חתום int n)
{

לא חתום א
עבור (a = 0a}

מקווה שמאמר זה נותן מידע בסיסי אודות תכנות מערכות משובצות באמצעות מיקרו-בקר 8051 עם מספר תוכניות לדוגמא. להדרכה מפורטת של תכנות C מוטבע, אנא פרסם את הערותיך ושאלותיך בסעיף ההערות למטה.