הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

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

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 08-02-15, 19:38   # 1
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

מחפש הסבר מפורט לגבי פסיקות (interrupt) בC במעבד 8051

שלום,
אני מחפש ללמוד על פסיקות (interrupt) בשפת C במעבד 8051, אני צריך הסבר ממש מפורט,
מישהו יכול להפנות אותי למקור שיכול להסביר לי בנושא?
עדיפות לעברית, כמובן שגם אנגלית תתקבל

תודה רבה
  Reply With Quote
ישן 11-02-15, 11:43   # 2
while1
חבר חדש
 
מיני פרופיל
תאריך הצטרפות: Jan 2015
הודעות: 34
Send a message via Skype™ to while1

while1 לא מחובר  

גוגל מלא במדריכים והסברים על נושא כ"כ מוכר ונפוץ.
מחיפוש קצר מצאתי לך את זה -
http://www.engineersgarage.com/tutor...pt-programming
זה נראה מעולה. מתחיל מהסבר על מה זה interrupt ולאט לאט מקשר איך עובדים עם זה בתוכנה ומלמד על כל האוגרים של זה.
(תשים לב שלמעלה בצד ימין יש תוכן עניינים לעבור בין הנושאים.)


אם יש לך שאלות או שמשהו לא ברור, אתה מוזמן לשאול כאן ואני אשמח לענות
  Reply With Quote
ישן 11-02-15, 16:37   # 3
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

ציטוט:
נכתב במקור על ידי while1 צפה בהודעה
גוגל מלא במדריכים והסברים על נושא כ"כ מוכר ונפוץ.
מחיפוש קצר מצאתי לך את זה -
http://www.engineersgarage.com/tutor...pt-programming
זה נראה מעולה. מתחיל מהסבר על מה זה interrupt ולאט לאט מקשר איך עובדים עם זה בתוכנה ומלמד על כל האוגרים של זה.
(תשים לב שלמעלה בצד ימין יש תוכן עניינים לעבור בין הנושאים.)


אם יש לך שאלות או שמשהו לא ברור, אתה מוזמן לשאול כאן ואני אשמח לענות
תודה רבה אני אעבור על זה מאוחר יותר, מאמין שזה מספיק
  Reply With Quote
ישן 11-02-15, 20:44   # 4
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

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

לפי הקוד שכאן: http://www.engineersgarage.com/tutor...ramming?page=5

1. לפי מה נקבע הזמן שלפיו הLED נדלק\נכבה ?
2. הבנתי (לא רק מהאתר הזה) שמשהו שקשור לזמנים\תדרים מתחלק ב12, מה זה ולמה?
3. מה התפקידים של TH0 , TL0 , TR0 ו TMOD
4. מה עושה, ולמה נכתב הקוד: sbit LED = P1^0; (בשורה 4)

תודה רבה בכל מקרה, אשמח אם מישהו יוכל לענות
  Reply With Quote
ישן 12-02-15, 15:48   # 5
while1
חבר חדש
 
מיני פרופיל
תאריך הצטרפות: Jan 2015
הודעות: 34
Send a message via Skype™ to while1

while1 לא מחובר  

נתחיל בהסבר כללי,

לכל מעבד/בקר יש גביש (מתנד) = רכיב שיוצר תדר קבוע, וקובע את קצב העבודה.

C51 עובד על מיקרו-בקר 8051 שאליו מחובר (בדוגמא הזאת) גביש שמייצר תדר של 11.0592MHz.
משמע, הוא מייצר בערך 11 מיליון פולסים בשניה.

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

לפעולות שונות בבקר נדרשים מספר מחזורי מכונה.
אבל לטיימרים המספר הזה קבוע, ואנחנו יודעים שהוא 1.
זה אומר שבכל 12 פולסים של הגביש (= מחזור מכונה אחד), הטיימר יתקדם פעם אחת.

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

קוד:
11,059,000 / 12 = 921,583Hz
משמע, הטיימר יפעל 921,583 פעמים בשניה. כלומר, אם היינו סופרים מ0 - אז תוך שניה היינו מגיעים ל921,583.

כדי לדעת תוך כמה זמן מתבצעת ספירה יחידה, נחשב:

קוד:
1 / 921,583 = 1.08u(=micro) s
כלומר, בערך כל 1 מיקרו-שניה הטיימר יתקדם ב1.

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

TMOD = אוגר שמכיל את אופן פעולת הטיימרים.
ב8051 אפשר להפעיל 2 טיימרים בשיטות פעולה שונות.
בקוד הגדירו את האוגר הזה עם הערך 0x01 כלומר הכניסו את טיימר0 למצב פעולה 1.
מצב זה קובע שהטיימר ידע לספור ערכים בגודל של 16 סיביות ואז יעצר, עד שיפעילו אותו מחדש או יכניסו לו ערך חדש לספירה.
**הספירה מתבצעת כלפי מעלה, זה אומר שבכל ספירה הטיימר יתקדם +1. (ולא כלפי מטה עד 0 כמו שרגילים לחשוב).

TH0 ו TH1 = קובעים את הערך שבו נמצא טיימר0.
בגלל שאנחנו במצב פעולה 1, יש 16 סיביות ולכן כל אחד מהאוגרים הללו אחראי על 8 מהן.
בקוד הגדירו:
קוד:
TH0 = 0xFC;
TL0 = 0x66;
לכן, הערך ההתחלתי של הטיימר יהיה FC66. (בבסיס 16=הקסאדצימלי)
(שווה ערך ל 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..
  Reply With Quote
ישן 12-02-15, 21:37   # 6
Haimz
חבר וותיק
 
מיני פרופיל
תאריך הצטרפות: Sep 2010
הודעות: 1,221

Haimz לא מחובר  

ציטוט:
נכתב במקור על ידי while1 צפה בהודעה
נתחיל בהסבר כללי,

לכל מעבד/בקר יש גביש (מתנד) = רכיב שיוצר תדר קבוע, וקובע את קצב העבודה.

C51 עובד על מיקרו-בקר 8051 שאליו מחובר (בדוגמא הזאת) גביש שמייצר תדר של 11.0592MHz.
משמע, הוא מייצר בערך 11 מיליון פולסים בשניה.

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

לפעולות שונות בבקר נדרשים מספר מחזורי מכונה.
אבל לטיימרים המספר הזה קבוע, ואנחנו יודעים שהוא 1.
זה אומר שבכל 12 פולסים של הגביש (= מחזור מכונה אחד), הטיימר יתקדם פעם אחת.

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

קוד:
11,059,000 / 12 = 921,583Hz
משמע, הטיימר יפעל 921,583 פעמים בשניה. כלומר, אם היינו סופרים מ0 - אז תוך שניה היינו מגיעים ל921,583.

כדי לדעת תוך כמה זמן מתבצעת ספירה יחידה, נחשב:

קוד:
1 / 921,583 = 1.08u(=micro) s
כלומר, בערך כל 1 מיקרו-שניה הטיימר יתקדם ב1.

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

TMOD = אוגר שמכיל את אופן פעולת הטיימרים.
ב8051 אפשר להפעיל 2 טיימרים בשיטות פעולה שונות.
בקוד הגדירו את האוגר הזה עם הערך 0x01 כלומר הכניסו את טיימר0 למצב פעולה 1.
מצב זה קובע שהטיימר ידע לספור ערכים בגודל של 16 סיביות ואז יעצר, עד שיפעילו אותו מחדש או יכניסו לו ערך חדש לספירה.
**הספירה מתבצעת כלפי מעלה, זה אומר שבכל ספירה הטיימר יתקדם +1. (ולא כלפי מטה עד 0 כמו שרגילים לחשוב).

TH0 ו TH1 = קובעים את הערך שבו נמצא טיימר0.
בגלל שאנחנו במצב פעולה 1, יש 16 סיביות ולכן כל אחד מהאוגרים הללו אחראי על 8 מהן.
בקוד הגדירו:
קוד:
TH0 = 0xFC;
TL0 = 0x66;
לכן, הערך ההתחלתי של הטיימר יהיה FC66. (בבסיס 16=הקסאדצימלי)
(שווה ערך ל 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.
תודה רבה לך, לא הייתי מוצא הסבר מפורט יותר !!
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 21:22.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ