- חומרים נדרשים:
- מה הם הפרעות והיכן להשתמש בהם:
- תרשים מעגל והסבר:
- סימולציה של הפרעות במיקרו-בקר PIC:
- הסבר קוד:
- עבודה של הפרעות PIC16F877A:
במדריך זה נלמד כיצד להשתמש בהפרעה חיצונית במיקרו-בקר PIC ומדוע / היכן נצטרך אותם. זהו חלק מרצף מדריכי PIC בהם התחלנו ללמוד PIC מיקרו-בקרים מאפס; מכאן שמדריך זה מניח שאתה מכיר כיצד לתכנת PIC MCU באמצעות MPLABX וכיצד להתממשק LCD עם PIC. אם לא אנא חזור לקישורים המתאימים שלהם וקרא אותם באמצעות שוקת, כי אני מדלג על רוב המידע שכבר סוקר שם.
חומרים נדרשים:
- לוח Perf. PIC16F877A
- צג LCD 16x2
- לחץ על הכפתור
- חוטי חיבור
- לוח לחם
- פיקיט 3
מה הם הפרעות והיכן להשתמש בהם:
לפני שנכנס לתכנות להפרעות של מיקרו-בקר PIC, הבה נבין מהו למעשה הפרעה והיכן נצטרך להשתמש בהן. יתר על כן, ישנם המון סוגים של הפרעות במיקרו-בקר וב- PIC16F877A יש כ- 15 כאלה. אל לנו לבלבל את כולם לעת עתה.
כך! מהי הפרעה במיקרו-בקרים?
כפי שכולנו יודעים משתמשים במיקרו-בקרים לביצוע קבוצה של הפעלות מוגדרות מראש (מתוכנתות) המפעילות את הפלטים הנדרשים בהתבסס על הקלט. אך בעוד שהמיקרו-בקר שלך עסוק בביצוע פיסת קוד אחת יכול להיות מצב חירום שבו פיסת קוד אחרת שלך זקוקה לטיפול מיידי. יש להתייחס לפיסת קוד אחרת זו שזקוקה להתייחסות מיידית כהפרעה.
לדוגמא: הבה נבחן כי אתה משחק את המשחק המועדף עליך בנייד שלך והבקר (הנחה) בתוך הטלפון שלך עסוק בלזרוק את כל הגרפיקה הדרושה לך בכדי ליהנות מהמשחק. אבל, פתאום החברה שלך מתקשרת למספר שלך. עכשיו, הדבר הגרוע ביותר שקורה הוא הבקר הנייד שלך להזניח את שיחות החברות שלך מכיוון שאתה עסוק במשחק. כדי למנוע את הסיוט הזה אנו משתמשים במשהו שנקרא הפרעות.
הפרעות אלה תמיד יהיו רישום פעיל בכדי שפעולות מסוימות יתרחשו וכאשר הן מתרחשות הן מבצעות פיסת קוד ואז חוזרות לפונקציה הרגילה. פיסת קוד זו מכונה שגרת שירות הפסקה (ISR). פרויקט מעשי אחד שבו הפרעה היא חובה הוא "מד מהירות דיגיטלי ומעגל מד מרחק באמצעות מיקרו-בקר PIC"
במיקרו-בקרים ישנם שני סוגים עיקריים של הפרעות. הם הפרעה חיצונית והפרעה פנימית. ההפרעות הפנימיות מתרחשות בתוך המיקרו-בקר לצורך ביצוע משימה, למשל הפסקות טיימר, הפרעות ADC וכו '. הפרעות אלה מופעלות על ידי התוכנה להשלמת פעולת הטיימר או פעולת ה- ADC בהתאמה.
ההפרעה החיצונית היא זו שיכולה להיות מופעלת על ידי המשתמש. בתוכנית זו נלמד כיצד להשתמש בהפרעה חיצונית באמצעות כפתור לחיצה להפעלת הפרעה. נשתמש ב- LCD כדי להציג מספרים המצטברים בין 0 ל -1000 וכאשר מופעלת הפרעה עלינו להודיע על כך מה- ISR שגרתי לשירות הפסק ואז להמשיך בחזרה לתוספת המספרים.
תרשים מעגל והסבר:
תרשים המעגל לשימוש בהפרעות PIC16F877 ניתן בתמונה לעיל. אתה פשוט צריך לחבר את ה- LCD ל- PIC כפי שעשינו בממשק LCD-tutorial.
כעת כדי לחבר את סיכת ההפרעה, עלינו להסתכל בגליון הנתונים כדי לדעת איזה סיכה של ה- PIC משמש להפרעה חיצונית. במקרה שלנו אני n PIC16F877A 33 rd RBO הסיכה / INT משמש פסיקה חיצונית. אינך יכול להשתמש בשום סיכה אחרת פרט לסיכה זו. חיבור הפין עבור תרשים מעגל זה מוצג בטבלה שלהלן.
S. לא: |
מספר סיכה |
שם סיכה |
מחובר ל |
1 |
21 |
RD2 |
RS של LCD |
2 |
22 |
RD3 |
E של LCD |
3 |
27 |
RD4 |
D4 של LCD |
4 |
28 |
RD5 |
D5 של LCD |
5 |
29 |
RD6 |
D6 של LCD |
6 |
30 |
RD7 |
D7 של LCD |
7 |
33 |
RBO / INT |
לחץ על הכפתור |
אפשרנו נגדי משיכה פנימיים ב- PORT B, ומכאן שנוכל לחבר ישירות את סיכת RB0 לאדמה באמצעות כפתור לחיצה. כך שבכל פעם שהסיכה הזו הולכת ונמוכה תופיע הפרעה.
החיבורים יכולים להתבצע על לוח לחם כמוצג להלן.
אם עקבת אחר ההדרכות שלנו היית צריך להכיר את לוח Perf זה בו השתמשתי כאן. אם לא, אתה לא צריך לחשוב הרבה על זה פשוט עקוב אחר דיאגרמת המעגל ותקבל דברים עובדים.
סימולציה של הפרעות במיקרו-בקר PIC:
הסימולציה לפרויקט זה נעשית באמצעות פרוטאוס.
כאשר אתה מדמה את הפרויקט אתה אמור לראות רצף של מספרים מצטברים על צג ה- LCD. זה קורה בתוך הלולאה הראשית ובכל פעם שלוחצים על כפתור הלחצן LCD אמור להציג שהוא נכנס ל- ISR. אתה יכול לבצע את השינויים בקוד ולנסות לבדוק אותו כאן.
הסבר קוד:
הקוד המלא לפרויקט זה נמצא בסוף הדרכה זו. עם זאת התוכנית מחולקת לנתחים חשובים ומוסברת להלן להבנתכם הטובה יותר.
כמו כל התוכניות עלינו להתחיל את הקוד על ידי הגדרת תצורת הסיכה עבור הפינים בהם אנו משתמשים בתוכנית שלנו. גם כאן עלינו להגדיר שאנחנו משתמשים ב- RB0 / INT כסיכת הפסקה חיצונית ולא כסיכת כניסה או פלט. השורה מתחת הקוד מאפשרת הנגד למשוך למעלה הפנימי על portB ידי הפיכת 7 th ביט 0.
OPTION_REG = 0b00000000;
לאחר מכן אנו מאפשרים את ההפרעות הגלובליות / ההיקפיות ומצהירים כי אנו משתמשים ב- RB0 כסיכת הפרעה חיצונית.
GIE = 1; // אפשר הפרעה גלובלית PEIE = 1; // אפשר את ההפרעה ההיקפית INTE = 1; // אפשר RB0 כסיכת הפרעה חיצונית
לאחר שהסיכה של RB0 מוגדרת כסיכת הפסקה חיצונית, בכל פעם שהיא תהיה נמוכה, דגל ההפרעה החיצוני INTF יהפוך ל -1 והקוד בתוך פונקציית ההפרעה הריקנית יבוצע מכיוון שייקרא שגרת ה- Interrupt Service (ISR).
בטל פסיקה ISR_example () {אם (INTF == 1) // זוהה הפרעה חיצונית {Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("נכנס ISR"); INTF = 0; // נקה את דגל ההפרעה לאחר שסיימת איתו __דלא_מס (2000); Lcd_Clear (); }}
כפי שניתן לראות, שמתי את פונקציית הפסיקה כ- ISR_example. אתה יכול לתת לו שם לפי רצונך. בתוך פונקציית הפסיקה נבדוק אם דגל ה- INTF גבוה ונבצע את הפעולות הנדרשות. חשוב מאוד לנקות את דגל ההפרעה לאחר שסיימת את השגרה. רק אז התוכנית תחזור לתפקיד הראשי הריק. סליקה זו צריכה להיעשות על ידי תוכנה המשתמשת בקו
INTF = 0; // נקה את דגל ההפרעה לאחר שסיים איתו
בתוך הפונקציה הראשית, אנו רק מגדילים מספר לכל 500 אלפיות שניים ומציגים אותו על גבי מסך ה- LCD. אין לנו שום שורה ספציפית לבדיקת מצב סיכת ה- RB0. ההפרעה תישאר תמיד פעילה ובכל פעם שלוחצים על כפתור הלחץ הוא יקפוץ מהראש הראשי הריק ויבצע את השורות ב- ISR.
Lcd_Set_Cursor (2,1); Lcd_Print_String ("בתוך הלולאה הראשית"); Lcd_Set_Cursor (1,1); Lcd_Print_String ("מספר:"); Lcd_Print_Char (ch1 + '0'); Lcd_Print_Char (ch2 + '0'); Lcd_Print_Char (ch3 + '0'); Lcd_Print_Char (ch4 + '0'); __השהיית_מס (500); מספר ++;
עבודה של הפרעות PIC16F877A:
לאחר שהבנת כיצד פועלת ההפרעה תוכל לנסות זאת על החומרה ולהתעסק סביבו. תוכנית זו שניתנה כאן היא דוגמה בסיסית מאוד להפרעה חיצונית כאשר היא פשוט משנה את תצוגת מסך ה- LCD כאשר מתגלה הפרעה.
את העבודה המלאה של הפרויקט ניתן למצוא בסרטון המופיע להלן. מקווה שהבנתם לגבי הפרעות ואיפה / כיצד להשתמש בהן. אם יש לך ספקות תוכל להגיע אלי דרך הפורומים או דרך קטע ההערות.