15-12-2011, 11:55
|
|
|
חבר מתאריך: 20.10.06
הודעות: 202
|
|
הכוונה..
אני לא יכול לכתוב את הקוד במקומך (זה בכל זאת לוקח זמן), אבל אני יכול לתת לך הכוונה, לגבי האופן שבו יהיה לך הכי קל ומהיר (אני מקווה) לממש את מה שאתה רוצה..
הבנתי שהמטרה שלך היא כזו: כשיש "1" ב-P1.0 . מתחילה השהייה של כ-5 דקות. לאחר ההשהייה, הבקר מעלה ל-1 את P1.1 ומתחילה השהייה של כ-4 דקות. לאחר ההשהייה הזו, P1.1 ישתנה ל-"0", חוזרים לתחילת התוכנה, ושוב מחכים לקבלת "1" בפורט P1.0..
מכיוון שלא ציינת מגבלות ואילוצים כלשהם, דרך פשוטה יחסית למימוש תהיה כך:
באתחולים, תאתחל את מצב הפורט כרצונך, תאפשר פסיקת טיימר, תגדיר דגל (משתנה bit) שמציין ש"ההשהיה הסתיימה" ותאפס אותו. תגדיר משתנה כלשהו (Byte) שמחזיק את זמן ההשהייה הרצוי בדקות. תגדיר טיימר של בערך דקה אחת (צריך לחשב את ערכי האתחול, בהתאם לדגם המיקרובקר ולגביש בהם אתה משתמש). אל תאפשר את ריצת הטיימר עדיין.
ברוטינה הראשית, קבע את משתנה זמן ההשהיה ל-5. תעשה Polling על P1.0 (תבדוק אותו שוב ושוב, עד שמשתנה), כאשר הוא 1, תאפשר את הטיימר ואז תעשה Polling על הדגל שמציין שהסתיימה ההשהייה. כאשר הדגל משתנה, קבע את P1.1 ל-1 ואז קבע את משתנה הזמן ל-4, תאפס את הדגל שמציין שההשהיה הסתיימה, תאפשר את הטיימר ותבצע Polling על דגל סיום ההשהיה עד שיהיה 1, ואז תשנה את P1.1 ל-0, תאפס את הדגל שמציין שההשהיה הסתיימה, ותחזור חזרה לתחילת התוכנית.
בתוך רוטינת הטיפול בפסיקת הטיימר (ISR), בטל את אפשור הטיימר (TR0=0), אם מונה-הזמן שונה מאפס, תפחית 1 ממונה-הזמן. בדוק אם עכשיו מונה הזמן-שווה 0 (הזמן עבר). אם כן, אתה צריך לקבוע את דגל "ההשהייה הסתיימה" ל-1 (כלומר ההשהייה הסתיימה). לאחר הבדיקה, תטען שוב את הטיימר בערכים שיגרמו לו למנות דקה 1 ותאפשר את ריצת-הטיימר (TR0=1), כדי שאחרי דקה, רוטינת הטיפול תופעל שוב.
זו כאמור דרך פשוטה יחסית. לא יודע אם היא הכי יעילה עבורך, כי זה תלוי בהגדרות הפרויקט שלך.
יתרונות:
מימוש פשוט וגמיש, מאפשר לשנות בקלות את משך ההשהיות (ברזולוציה של דקות).
חסרונות:
1. לא מתאים במקרים שהמערכת צריכה לטפל בארועים אסינכרוניים נוספים, מלבד השינוי ב-P1.0. אם אכן יש אירועים נוספים, כדאי לשקול שימוש בפסיקות ואז זה מסבך מעט את המימוש.
2. לא מתאים לשימוש במערכות בהן צריכת ההספק אמורה להיות מינימלית, מכיוון שמימוש כזה לא מאפשר להכנס למצב "הנמכת הספק" (Power down).
בברכה,
דיגיגיל
_____________________________________
_- סיוע בהשלמת פרויקט-גמר להנדסאים -_
(האתר digigil.com נסגר)
|