|
הרשם | ![]() |
שאלות ותשובות | ![]() |
רשימת חברים | ![]() |
לוח שנה | ![]() |
הודעות מהיום | ![]() |
חיפוש | ![]() |
|
![]() |
|
כלים לאשכול | תצורת הצגה |
![]() |
# 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.. |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|