הרשם | שאלות ותשובות | רשימת חברים | לוח שנה | הודעות מהיום | חיפוש |
|
|
כלים לאשכול | תצורת הצגה |
08-02-15, 19:38 | # 1 |
חבר וותיק
|
מחפש הסבר מפורט לגבי פסיקות (interrupt) בC במעבד 8051
שלום,
אני מחפש ללמוד על פסיקות (interrupt) בשפת C במעבד 8051, אני צריך הסבר ממש מפורט, מישהו יכול להפנות אותי למקור שיכול להסביר לי בנושא? עדיפות לעברית, כמובן שגם אנגלית תתקבל תודה רבה |
11-02-15, 11:43 | # 2 |
חבר חדש
|
גוגל מלא במדריכים והסברים על נושא כ"כ מוכר ונפוץ.
מחיפוש קצר מצאתי לך את זה - http://www.engineersgarage.com/tutor...pt-programming זה נראה מעולה. מתחיל מהסבר על מה זה interrupt ולאט לאט מקשר איך עובדים עם זה בתוכנה ומלמד על כל האוגרים של זה. (תשים לב שלמעלה בצד ימין יש תוכן עניינים לעבור בין הנושאים.) אם יש לך שאלות או שמשהו לא ברור, אתה מוזמן לשאול כאן ואני אשמח לענות
__________________
המשך יום טוב, מתן אתר חדשות האינטרנט - אפליקציית אנדרואיד אפליקציית לוח שידורים מעודכן |
11-02-15, 16:37 | # 3 | |
חבר וותיק
|
ציטוט:
|
|
11-02-15, 20:44 | # 4 | |
חבר וותיק
|
ציטוט:
לפי הקוד שכאן: http://www.engineersgarage.com/tutor...ramming?page=5 1. לפי מה נקבע הזמן שלפיו הLED נדלק\נכבה ? 2. הבנתי (לא רק מהאתר הזה) שמשהו שקשור לזמנים\תדרים מתחלק ב12, מה זה ולמה? 3. מה התפקידים של TH0 , TL0 , TR0 ו TMOD 4. מה עושה, ולמה נכתב הקוד: sbit LED = P1^0; (בשורה 4) תודה רבה בכל מקרה, אשמח אם מישהו יוכל לענות |
|
12-02-15, 15:48 | # 5 |
חבר חדש
|
נתחיל בהסבר כללי,
לכל מעבד/בקר יש גביש (מתנד) = רכיב שיוצר תדר קבוע, וקובע את קצב העבודה. C51 עובד על מיקרו-בקר 8051 שאליו מחובר (בדוגמא הזאת) גביש שמייצר תדר של 11.0592MHz. משמע, הוא מייצר בערך 11 מיליון פולסים בשניה. אבל, כדי להשלים ביצוע של פעולה אחת (לדוגמא שורת קוד באסמבלר, או פעולת ספירה יחידה בטיימר) נדרשים (לפחות) 12 פולסים בגביש. (נגדיר: מחזור מכונה) לפעולות שונות בבקר נדרשים מספר מחזורי מכונה. אבל לטיימרים המספר הזה קבוע, ואנחנו יודעים שהוא 1. זה אומר שבכל 12 פולסים של הגביש (= מחזור מכונה אחד), הטיימר יתקדם פעם אחת. לכן, לא מעניין אותנו התדר של הגביש, אלא אנחנו רוצים לקבל את התדר שבו הטיימר יעבוד - קוד:
11,059,000 / 12 = 921,583Hz כדי לדעת תוך כמה זמן מתבצעת ספירה יחידה, נחשב: קוד:
1 / 921,583 = 1.08u(=micro) s איך הגדירו את פעולת הטיימר בקוד? אני אסביר רק בנוגע לקוד הספציפי, כי יש הרבה דרכים לעבוד עם הטיימר ויקח זמן כרגע לעבור על כולם. TMOD = אוגר שמכיל את אופן פעולת הטיימרים. ב8051 אפשר להפעיל 2 טיימרים בשיטות פעולה שונות. בקוד הגדירו את האוגר הזה עם הערך 0x01 כלומר הכניסו את טיימר0 למצב פעולה 1. מצב זה קובע שהטיימר ידע לספור ערכים בגודל של 16 סיביות ואז יעצר, עד שיפעילו אותו מחדש או יכניסו לו ערך חדש לספירה. **הספירה מתבצעת כלפי מעלה, זה אומר שבכל ספירה הטיימר יתקדם +1. (ולא כלפי מטה עד 0 כמו שרגילים לחשוב). TH0 ו TH1 = קובעים את הערך שבו נמצא טיימר0. בגלל שאנחנו במצב פעולה 1, יש 16 סיביות ולכן כל אחד מהאוגרים הללו אחראי על 8 מהן. בקוד הגדירו: קוד:
TH0 = 0xFC; TL0 = 0x66; (שווה ערך ל 64614 עשרוני או 1111110001100110 בינארי) וברגע שנפעיל את הטיימר, הוא ימנה עד הערך העליון - FFFF שהוא 65535. ואז.. מגיע הרגע המיוחל TR0 = 1 = מפעיל את טיימר0 וגורם לו להתחיל לספור! איך נקבע הזמן שלפיו הלד נדלק/נכבה - אנחנו יודעים שהטיימר סופר עכשיו מ64614 עד ל 65535, כלומר הוא יספור 921 פעמים. **רק אחרי שהוא מגיע לערך העליון הוא קורא לפונקציה של הפסיקה** נכפיל את זה בזמן שלוקח לו להשלים ספירה יחידה = קוד:
921 x 1.08u = ~ 0.001s (ואז, בתוך הפונקציה של הפסיקה "טוענים" מחדש את הערך ההתחלתי לטיימר, ולכן הוא ימשיך לספור ולבצע את זה שוב ושוב ושוב כל אלפית שניה....) ** אני חייב להגיד שהתוצאה שיצאה היא ממש מוזרה, אני לא מבין מה הפואנטה לתת דוגמא ללד שמהבהב כל אלפית-שניה = אי אפשר לראות את התוצאה הזאת בעין = מבחינתך הלד יראה כאילו הוא דלוק כל הזמן ** תוכל לראות כל מה שהסברתי (ועוד), כאן - http://www.engineersgarage.com/tutor...mming-tutorial בנוגע ל P1^0, אם אני זוכר נכון זה פונה לכתובת של הסיבית הספציפית (0) בפורט P1.
__________________
המשך יום טוב, מתן אתר חדשות האינטרנט - אפליקציית אנדרואיד אפליקציית לוח שידורים מעודכן Last edited by while1; 12-02-15 at 15:54.. |
12-02-15, 21:37 | # 6 | |
חבר וותיק
|
ציטוט:
|
|
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|