יום שבת, 28 במאי 2011

הכירו: מיקרו בקר 89C51


·         מיקרו בקר זה הוא בעל 8 סיביות.
·         32 קווי פלט/קלט (ב-4 פורמטים שונים כל אחד בעל 8 סיביות(.
·         זיכרון נתונים פנימי של 256 byte  שניתן לפנות אליהם במיעון ישיר או במיעון סיביות.
·         אפשרות גישה ל-64kb  של זיכרון נתונים (RAM)  וזיכרון תוכנית (EPROM).
·         ארבעה בנקים של אוגרים (כל בנק מכיל 8 אוגרים R0-R7).
·         שני טיימרים בעלי 16 סיביות כל אחד.
·         חמישה מקורות פסיקה (מבוקרים ע"י אוגר בקרת פסיקות ואוגר עדיפות הפסיקות).


תיאור הדקי-89c51

רגליים 1-8: רגלי פורמט מס' 1.
בעל 8 סיביות לשימוש כפורט פלט או קלט.
אצלי בפרוייקט הוא משמש להפעלת התקני האקווריום  (כגון: תאורה, חמצן, מסנן וגוף חימום) וכן הוא משמש לחיווי הטמפרטורה ע"פ הלדים (led).
רגל 9:  רגל ה-reset.
'1' ברגל זו גורם לאתחול המיקרו בקר כלומר קפיצה לכתובת H0000. רגל זו מחוברת לרשת קבל נגד, שיוצר reset אוטומטי עם הפעלת מתח.
רגליים 10-17:  רגלי פורמט מס' 3.
בעל 8 סיביות לשימוש כפורט קלט/פלט או כפורט בקרה לשימוש עם רכיבים חיצוניים.
רגל 10: Receive External Data
רגל של תקשורת טורית אסינכרונית לקליטת נתונים חיצוניים.
רגל 11:  Transmit External Data
רגל של תקשורת טורית אסינכרונית.
רגל 12:   INT0  -קו פסיקה חיצוני (פעיל נמוך)
אצלנו רגל זו משמשת בתור פורט פלט להפעלת ה-ISD (מעבד הקול).
רגל 13: INT1 – קו פסיקה חיצוני נוסף (גם כן פעיל בנמוך).
רגל 14: כניסה חיצונית ל-TIMER0  כאשר הוא מופעל כ- COUNTER.
רגל זו משמשת אותנו בתור פורט קלט היא קולטת נתונים מה- ADC0804.
רגל 15:  כניסה חיצונית לTIMER1
נשתמש ברגל זו כהדק קלט להדק זה חיברנו את מפענח המקלדת 
74C922 .
רגל 16:    WR  רגל כתיבה להתקן חיצוני (פעיל בנמוך).
רגל 17:   RD   רגל קריאה מזיכרון חיצוני (פעיל בנמוך).
רגליים 18-19: X1,X2  - רגליים אשר אליהם מתחבר הגביש ושני הקבלים שביחד מהווים מתנד מסוג קולפיץ אשר קובע את תדר העבודה של המיקרו-בקר.
במערכת שלנו נשתמש בגביש של MHZ 12.
רגל20: GND  רגל אדמה.
רגליים 21-28: משמשות בתור הדקי כתובות עליון
(A8-A15).
(גם יכול לשמש בתור פורט מס' 2, בעל 8 סיביות לשימוש כפורט קלט\פלט).
רגל 29: PSEN- Program Store Enable
רגל קריאה מזיכרון (EEPROM).
רגל 30: ALE רגל שתפקידה לבצע חלוקה בין קווי כתובות לבין קווי נתונים.החלוקה מתבצעת ע"י נעילת קווי כתובות בזמן שמעבירים קווי נתונים כלומר כאשר רגל זו ב-"1" אנו מעבירים כתובות ולא נתונים.
 רגל 31: External Access Enable-EA .
מאפשר עבודה עם זיכרון חיצוני (כאשר הוא "0").
 בפרוייקט זה אנו משתמשים רק בזיכרון הפנימי של המעבד לכן ההדק יהיה תמיד ב-"1" (=5V).
רגליים 32-39: הדקים אלו משמשים בתור ההדקים המרובבים, כלומר הם יכולים לשמש בתור הדקי נתונים וגם בתור הדקי כתובות. (הדקים אלו יכולים לשמש גם בתור פורט מס' 0 בעל 8 סיביות כפורט פלט\קלט).
רגל 40: VCC מתח הספק (V5+).

פסיקותיו של –89c51
פסיקה זהו מצב שבו ה-CPU אמור להפסיק את פעולותיו בתוכנית שבה הוא נמצא ולעבור לתוכנית אחרת שנקראת תוכנית פסיקה.
עם קבלת בקשת הפסיקה ה-CPU מבצע את הפעולות הבאות:
1.      מסיים את ההוראה בה הוא נמצא.
2.      מאחסן את תוכן מונה התוכנית (Program Counter) בשתי הכתובות העוקבות במחסנית (פעולה זו הכרחית בכדי שה-CPU יוכל לחזור למקום בו הוא היה לפני קבלת הפסיקה).
3.      פונה לאזור הפניות הקבוע לפסיקות ששם רשומה הפניה לתוכנית הפסיקה הרצויה.
מיקום הפניות הקבוע עבור הפסיקות הוא בעמוד הבא:


הכתובת
          המקור לפסיקה
0000H
RESET
0003H
External Interrupt 0
000BH
Timer 0 Overflow
001BH
External Interrupt 1
0023H
Timer 1 Overflow

תיאור הפניות של ה-89c51 במקרה פסיקה
קיימים 5 מקורות פסיקה כדלקמן:
·         מערכת חיצונית, המחוברת לרגליים INT1 או INT0 של ה-89c51 (קווי פסיקה חיצונית) ומורידה אחד מקווים אלו ל-"0", גורמת לסוג פסיקה בשםEXTERNAL INTERRUPT.
·         קבלת פסיקה מאחד הטיימרים לאחר שקרתה גלישה במונה שלו. במקרה זה בסיביות TF0 או TF1 שבאוגר TCON עולות ל-"1".
·         קבלת פסיקה מהרכיב UART, כאשר עובדים עם התקשורת הטורית הUART- יוזם בקשת פסיקה בכל פעם שסיים לקלוט או סיים לשדר תו בצורה טורית.

אוגר בקרת הפסיקות –IE
ב-  89c51  ישנם שני אוגרים הקשורים למערכת פסיקות זו.
אוגר בשם IE (Interrupt Enable) מאפשר חסימת פסיקה מסוימת או חסימת כל הפסיקות.
בעזרת האוגר השני IP  (Interrupt Priority) ניתן לקבוע עדיפות של הפסיקות (איזו מן הפסיקות תבוא קודם).
כאמור לעיל אפשור חסימת הפסיקות נעשית ע"י כתיבה לאוגר IE.
כתובת האוגר היא A8H וניתן לפנות לאוגר זה במעון ישיר. כמ"כ ניתן לפנות לסיביות האוגר במעון סיבית.
                      L.S.B                             M.S.B                              
EX0
ET0
EX1
ET1
ES
ET2
X
EA

תיאור אוגר- IE
 EA- "1" בסיבית זו מבצע אפשור כללי של כל הפסיקות ו- "0" לעומת זאת חוסם את כל הסיביות.
X- סיבת זו לא בשימוש.
 ET2- אפשור פסיקה של TIMER 2.
ES- אפשור פסיקה של תקשורת טורית.
ET1- אפשור פסיקה של TIMER 1.
EX1- אפשור פסיקה חיצונית INT 1.
ET0- אפשור פסיקה של TIMER 0.
EX0- אפשור פסיקה חיצונית INT 0.
לדוגמא:
אם אנו רוצים לפנות לפסקה של TIMER 0 אנו יכולים לעשות זאת בשני הדרכים הבאות:
·         לפנות לאוגר ע"י הפקודה – MOV IE,#82H("1" לסיבית EA וכמו כן "1" לסיבית TIMER 0).
·         לפנות היישר לסיבית האוגר: SETB EA ו- SETB ET0.
 כלומר ניתן לעשות זאת במעון מיידי או במעון סיבית.
במקרה וצריכות להתבצע יותר מפסיקה אחת אנו יכולים לקבוע איזו מהן תהיה בעדיפות גבוהה יותר, כלומר איזו פסיקה תטופל קודם וזאת נעשה ע"י האוגר שכבר הזכרנו לעיל- IP (Interrupt Priority).
אוגר עדיפות הפסיקות –IP
ב-89c51  קיימות שתי רמות עדיפות לפסיקה.
כל אחד ממקורות הפסיקה ניתן לסיווג ברמת עדיפות גבוהה או נמוכה ע"י כתיבה לאוגר IP.
כתובת אוגר זה היא B8H וניתן לפנות אליו במיעון ישיר גם לסיביות אוגר זה כמו קודמו ניתן לפנות במיעון סיביות.
                      L.S.B                                         M.S.B
PX0
PT0
PX1
PT1
PS
PT2
X
X

תיאור אוגר – IP
X- לא בשימוש.
PT2- עדיפות הפסיקה של TIMER 2.
PS- עדיפות הפסיקה של תקשורת טורית.
PT1- עדיפות הפסיקה של TIMER 1.
PX1- עדיפות פסיקה חיצונית INT 1.
PT0- עדיפות הפסיקה של TIMER 0.
PX0- עדיפות פסיקה חיצונית INT 0.
קביעת "1" בסיבית עדיפות פסיקה מסוימת מעבירה אותה לרמת עדיפות גבוהה, אם יהיו מספר פסיקות באותה רמת עדיפות (גבוהה או נמוכה) העדיפות תהיה לפי סדר הסיביות, כאשר PX0 בעלת העדיפות הגבוהה ביותר ו-PT2 בעלת העדיפות הנמוכה ביותר.
לדוגמא:
אם רוצים לקבוע שפסיקות חיצוניות יהיו בעדיפות יותר גבוהה מאשר פסיקה של התקשורת הטורית, קובעים "1" בסיביות PX0,PX1 לעומת PS שמשאירים ב-"0".

אוגר – TCON
אוגר TCON (TIMER CONTROL) זהו אוגר שארבע סיביותיו הגבוהות משמשות לבקרה על אופן פעולת קוצב הזמן, וארבע סיביותיו הנמוכות משמשות לקביעת אופן הפעולה של בקשות חיצוניות – הן תהינה מסוג של דרבון רמה (LEVRL TRIGGRING).
במקרה של דרבון קצה מחובר קו ברשת הפסיקה לדלגלג (flip-flop) פנימי. במקרה שקו הפסיקה יורד מ-"1" ל-"0" הדלגלג שומר את בקשת הפסיקה ואין צורך להשאיר את קו הפסיקה הרבה זמן ב-"0" כיוון שהמערכת "זוכרת" את הבקשה לפסיקה וה-CPU  יפנה לביצוע כשיתפנה.
בדרבון רמה לעומת זאת דלגלג פנימי לא מחובר ולכן הקו צריך להיות ב-"0" מספיק זמן כדי שה-CPU יבחין בבקשת הפסיקה.
יתרונו של דרבון קצה ברור. יתרונו של דרבון רמה הוא בכך שניתן לחבר מספר מקומות חיצוניים לאותו קו פסיקה ולאפשר את הזיהוי המתבקש באמצעות אחד מפורטי ה-89c51.
                      L.S.B                                        M.S.B
IT0
IE0
IT1
IE1
TR0
TF0
TR1
TF1

תאור אוגר-TCON
IE1, IE0- סיביות אלו עולות ל-"1" כאשר מתקבלת בקשת פסיקה בדרבון קצה ברגליים INT1, INT0 ויורדות ל-"0" כאשר ה-CPU מבצע את בקשת הפסיקה.
IT1, IT0- סיביות הנקבעות בתוכנה ע"י המשתמש בהתאם לאופן העבודה הרצוי "1" גורם לפסיקה להיות מסוג של דרבון קצה ו-"0" גורם לפסיקה להיות מסוג של דרבון רמה.
TR1, TR0- הפעלת הטיימרים.
TF1, TF0- כאשר סיביות אלו עולות ל-"1" הן יוצרות בקשת פסיקה בתנאי שהן אינן חסומות ע"י אוגר IE.
במצב אתחול של ה-89c51 מקבל TCON את הערך H00.
מונים\טיימרים של ה-89c51
טיימר הוא מונה הסופר דפקים המגיעים אליו בקצב קבוע, כך שלמעשה הוא מודד זמן. ההבחנה בשמות נעשית בהתאם לתפקוד הרכיב. אם מחברים לכניסת המונה את האות הנגזר משעון ה-CPU (כלומר מגיע בקצב אחיד) מתפקד הרכיב כטיימר. ואם מחברים את המונה למקור חיצוני של האותות שמייצרים דפקים בקצב לא אחיד יתפקד הרכיב כמונה אירועים (Counter).
ב-89c51 שני מונים\טיימרים כל אחד בגודל 16 סיביות הנקראים TIMER0 וTIMER1- המבצעים עבודות כמו לולאות השהייה מדויקות, כגון: קביעת תדר העבודה באחד הפורטים, דגימת אירועים וכד' במקביל לעבודת ה-CPU וכך "משחררים" אותו לביצוע משימות אחרות.
לדוגמא:
אם היינו רוצים לממש שעון באמצעות CPU וללא שימוש בטיימרים היינו נתקלים בשתי בעיות קשות:
1.      CPU- יכול להתעסק רק בתוכנית זו- בלולאות השהייה ועיבוד נתונים בסוף כל לולאה.
2.      זמן עיבוד הנתונים משתנה, למשל הזמן הדרוש לעדכון הדקות בלבד קצר מהזמן הדרוש לעדכון הדקות והשעות.
אם נשתמש בטיימר, נקבל בקשת פסיקה כל פרק זמן קבוע שניתן לתכנות ע"י המשתמש. ה-CPU יכול לעסוק בכל תוכנית שהיא ועם קבלת פסיקה הוא פונה לתוכנית הפסיקה ומעדכן את השעון בהתאם.
הטיימרים של ה-89c51 מורכבים מארבעה אוגרים בני 8 סיביות ונקראים: TH1, TL1, TH0, TL0  . הם תופסים את הכתובות במיעון ישיר 8BH, 8AH, 8CH ו- 8DH בהתאמה.
הטיימרים עובדים באופני עבודה שונים הנקבעים ע"י המשתמש בעזרת שני אוגרי בקרה TCON ו- TMOD.
                      L.S.B                                         M.S.B
M0
M1
C\T
GATE
M0
M1
C\T
GATE

תיאור אוגר TMOD-
אוגר ה-TMOD מחולק לשני חלקים: 4 סיביות ראשונות הן של טיימר 1 ו-4 סיביות אחרונות הן של טיימר 0.
M1, M0- סיביות הקובעות את מצב העבודה של הטיימר.
(טבלת מצבי העבודה של הטיימר)
הסבר אופן העבודה
אופן העבודה
M0
M1
TL משמש כמונה ל-TH כאשר TH משמש כמחלק תדר ב-32.
MODE0
0
0
מצב שבו משתמשים TL ו-TH כמונה יחיד בעל 16 סיביות.
MODE1
1
0
במצב עבודה זה משמש TL כמונה בן 8 סיביות ו-TH טוען אותו אוטומטית לאחר בקשת פסיקה.
MODE2
0
1
במצב עבודה זה משמש טיימר 0 כטיימר\מונה ,וטיימר 1 משמש כקצב לתקשורת טורית.
MODE3
1
0

C\T- אם סיבית זו ב-"0" לוגי מופנים אל המונים TL ו-TH אותות המגיעים משעון ה-CPU ומחולקים ב-12. זהו שימוש כטיימר. אם סיבית זו ב-"1" מופנית כניסת המונה לקו T0 ו-T1 שהם קווים חיצוניים ל-CPU. אותו שיגיעו מקווים אלו יפעילו את המונים TL ו-TH. זהו שימוש כמונה.
GATE-  אם סיבית זו ב-"1" אזי הטיימר מופעל ע"י התוכנה ואם היא ב-"0" אז הטיימר מופעל ע"י החומרה.
חישוב טעינת קוצבי הזמן
על מנת להפעיל את קוצב הזמן אנו צריכים לטעון לקוצב הזמן ערך מסוים, ערך זה מחושב ע"פ הנוסחא הבאה:

                                                                
X=TD· (fosc÷12)= (50·10ˉ³·12·10  )÷12
X=50000

TIMER1- קובע פסיקה כל 50msec, לצורך השהיית הערך שיש לטעון ב- TIMER1  עלינו לקחת את התוצאה שקיבלנו בנוסחא נמיר אותה למספר בינארי ולאחר מכן לבצע משלים ל-2, כך:

עשרוני:       X=50000
בינארי:        1100001101010000
משלים ל-1:  0011110010101111
משלים ל-2:  0011110010110000
באקסה:                    3CB0
3= (0011) C= (1100) B = (1011) 0 = (0000)
כלומר עלינו לטעון את TIMER1 ב- 3CB0H.(בבסיס הקסא)

תגובה 1:

  1. תודה.. סיכמת את זה ממש טוב זה ממש עוזר להבין את הפרויקט שאתה בונה.

    השבמחק