************9***|***********p**********************X** *o***r***s*******k

Download Report

Transcript ************9***|***********p**********************X** *o***r***s*******k

‫שפת ‪ C‬למיקרו‬
‫בקר ממשפחת ‪8051‬‬
‫השתלמות מורים ‪2006‬‬
‫מנחה‪ :‬הרמן גדי‬
‫נושאים לדיון‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫מבוא לכתיבת תוכנית בשפת ‪ C‬סטנדרטי (‪ (ANSI‬למיקרו בקרים‬
‫ממשפחת ‪8051‬‬
‫הכרת סביבת העבודה ( ‪ SES‬ו‪" -‬מכיר מערכות")‬
‫מבנה תוכנית בשפת ‪ C‬להפעלת נוריות המחוברות למפתח המיקרו‬
‫הגדרות משתנים במרחבי הזיכרון השונים‬
‫קובץ הכותרת ‪8051.h‬‬
‫תחביר השפה‪case-switch ,while ,if-else, if ,for :‬‬
‫פונקציות‬
‫כתיבת פונקציות המשמשות לטיפול בפסיקות‬
‫עבודה עם קוצב הזמן‬
‫מימוש מפתח קלט ופלט פשוט‬
‫מימוש קובץ פונקציות לטיפול בתצוגת ‪LCD‬‬
‫מבנה בסיסי של מיקרו ממשפחת ‪8051‬‬
‫מיפוי רגלים‬
‫הדקי המיקרו‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ ( VCC‬פין ‪ - ) 40‬מתחבר להדק החיובי של ספק הכוח בן ‪.V5‬‬
‫‪ ( VSS‬פין ‪ - ) 20‬קו האדמה של הרכיב‪.‬‬
‫‪ ( XTAL1,XTAL2‬פינים ‪ 18‬ו‪ - ) 19 -‬רגלי חיבור לגביש‪ .‬לקווים אלו מחובר גביש הקובע את‬
‫תדר הפעולה של המעבד‪ ,‬משני צידי הגביש מחוברים ‪ 2‬קבלים לאדמה לקיזוז רעשים‪.‬‬
‫‪ ( RST‬פין ‪ - ) 9‬אתחול המעבד (‪ .) RESET‬עם עלייתה ל‪ HIGH-‬ה‪ CPU-‬מפסיק את‬
‫פעולתו‪ .‬עם ירידתה ל‪ '0'-‬לוגי‪ ,‬ה‪ CPU-‬משנה את מצביע ההוראות לכתובת ‪ ,0000‬ובכך‬
‫מתחיל את התכנית של המעבד מהתחלה‪.‬‬
‫‪( - EA' - EXTERNAL ADDRESS‬פין ‪ -) 31‬כניסה זו מסמנת ל‪CPU -‬האם אזור התכנית‬
‫נמצא בתחום הכתובות הנמוך (‪ )FFF0 - 0000‬שייך ל‪ ROM-‬חיצוני או ל‪ ROM-‬פנימי‪.‬‬
‫רגל זו נמצאת בשימוש רק במעבדי ‪ 8051‬המכילים בתוכם ‪ ROM‬פנימי‪ .‬במעבד מסוג ‪8031‬‬
‫יש לקצר קו זה ל‪. GND-‬‬
‫‪ ( ALE‬פין ‪ - ) 30‬קו יציאה הנועל את הכתובת הנמוכה ב‪LATCH ( ADDRESS LATCH -‬‬
‫‪ .) ENABLE‬עולה ל‪ HIGH-‬למשך ‪ STATE‬אחד (‪ 2‬מחזורי שעון) בכל פעם שמתבצעת פנייה‬
‫לזיכרון‪.‬‬
‫‪( - PSEN' - PROGRAM SET ENABLE‬פין ‪ - )29‬קו יציאה‪ ,‬המציין לזיכרון ה‪-‬‬
‫‪ PROGRAM‬שה‪ CPU-‬מבקש לקרוא נתון מאזור זה‪ ,‬כאשר קו זה יורד ל‪. LOW-‬‬
‫‪( - P1.0-P1.7‬פינים ‪ )8-1‬פורט זה משמש כפורט מבוא או פורט מוצא בלבד ‪ -‬ניתן לגשת‬
‫לסיביות הפורט במיעון ישיר‪.‬‬
‫הדקי המיקרו ‪ -‬המשך‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ ( P0.0-P0.7 / AD0-AD7‬פינים ‪ - ) 39-32‬קווי פורט ‪ ,0‬היכולים לשמש כפורט‬
‫מבוא או כפורט מוצא‪ .‬במקרה של חיבור רכיבי תמיכה חיצוניים לרכיב‪ ,‬מתפקדים‬
‫קוים אלה כקווי ‪, AD0 - AD7‬ומעבירים את החלק הנמוך של הכתובת בשלב‬
‫המחזור הראשון של מחזור המכונה ואת הנתונים בשלב השני של מחזור המכונה‪.‬‬
‫‪( P2.0-P2.7 / A8-A15‬פינים ‪ - ) 28-21‬קווי פורט ‪ ,2‬היכולים לשמש כפורט מבוא‬
‫או כפורט מוצא‪ .‬במקרה של חיבור רכיבי תמיכה חיצוניים לרכיב‪ ,‬מתפקדים קוים‬
‫אלה כקווי הכתובת הגבוהים ‪. A8-A15‬‬
‫‪( P3.0-P3.7‬פינים ‪ - ) 17-10‬קווי פורט ‪ ,3‬היכולים לשמש כפורט מבוא או כפורט‬
‫מוצא‪ .‬בנוסף לכך יכולים קוים אלה לתפקד כקווי בקרה שונים‪ ,‬המתוארים להלן ‪:‬‬
‫‪ P3.0 / RXD‬קו כניסה של אות המגיע בתקשורת טורית אסינכרונית ל‪.UART-‬‬
‫‪ P3.1 / TXD‬יציאה של אות היוצא בתקשורת טורית אסינכרונית מה‪.UART-‬‬
‫‪ P3.2 / INT0‬קו פסיקה חיצונית היכול לעבוד בדרבון רמה או בדרבון קצה‪.‬‬
‫‪ P3.3 / INT1‬קו פסיקה חיצונית היכול לעבוד בדרבון רמה או בדרבון קצה‪.‬‬
‫‪ P3.4 / T0‬כניסת אותות ל‪ TIMER0-‬במקרה שהוא מתפקד כמונה‪.‬‬
‫‪ P3.5 / T1‬כניסת אותות ל‪ TIMER1-‬במקרה שהוא מתפקד כמונה‪.‬‬
‫‪ P3.6 / WR‬קו יציאה המציין ליחידות החיצוניות‪ ,‬שה‪ CPU-‬מבקש לכתוב נתון‪.‬‬
‫‪ P3.7 / RD‬קו יציאה המציין ליחידות החיצוניות‪ ,‬שה‪ CPU-‬מבקש לקרוא נתון‪.‬‬
‫מיפוי הזיכרון החיצוני‬
‫(פניה על ידי ‪)movc‬‬
‫מימוש זיכרון חיצוני‬
‫(פניה על ידי ‪)movc‬‬
‫מיפוי הזיכרון הפנימי (‪)RAM‬‬
‫האזור הנמוך של ה‪ RAM-‬הפנימי‬
‫‪ - SFR‬בחלק העליון של ה‪ RAM -‬הפנימי‬
‫הצובר‬
‫‪E0H‬‬
‫‪ACC‬‬
‫אוגר ‪B‬‬
‫‪F0H‬‬
‫‪B‬‬
‫אוגר מצב (הדגלים)‬
‫‪D0H‬‬
‫‪PSW‬‬
‫מצביע מחסנית‬
‫‪81H‬‬
‫‪SP‬‬
‫הבית הגבוה של‪DPTR -‬‬
‫‪83H‬‬
‫‪DP0H‬‬
‫הבית הנמוך של‪DPTR -‬‬
‫‪82H‬‬
‫‪DP0L‬‬
‫פורט ‪0‬‬
‫‪80H‬‬
‫‪P0‬‬
‫פורט ‪1‬‬
‫‪90H‬‬
‫‪P1‬‬
‫פורט ‪2‬‬
‫‪A0H‬‬
‫‪P2‬‬
‫פורט ‪3‬‬
‫‪B0H‬‬
‫‪P3‬‬
‫‪ - SFR‬בחלק העליון של ה‪ RAM -‬הפנימי‬
‫(המשך)‬
‫בקרת עדיפות פסיקות‬
‫‪B8H‬‬
‫‪IP‬‬
‫בקרת אפשור פסיקות‬
‫‪A8H‬‬
‫‪IE‬‬
‫בקרת אופן מונה‪/‬קוצב זמן‬
‫‪89H‬‬
‫‪TMOD‬‬
‫בקרת מונה ‪ /‬קוצב זמן‬
‫‪88H‬‬
‫‪TCON‬‬
‫הבית הגבוה של ‪TIMER0‬‬
‫‪8CH‬‬
‫‪TH0‬‬
‫הבית הנמוך של ‪TIMER0‬‬
‫‪8AH‬‬
‫‪TL0‬‬
‫הבית הגבוה של ‪TIMER1‬‬
‫‪8DH‬‬
‫‪TH1‬‬
‫הבית הנמוך של ‪TIMER1‬‬
‫‪8BH‬‬
‫‪TL1‬‬
‫בקרת שידור וקליטה טוריים‬
‫‪98H‬‬
‫‪SCON‬‬
‫חוצץ נתונים טורי‬
‫‪99H‬‬
‫‪SBUF‬‬
‫בקרת ספק‬
‫‪87H‬‬
‫‪PCON‬‬
‫הידור תוכנית לשפת המיקרו‬
‫קובץ מקור בשפת ‪C‬‬
‫קובץ ‪ASM‬‬
‫קובץ מקור ‪ASM‬‬
‫קובץ ‪HEX‬‬
‫קובץ ‪HEX‬‬
‫זיכרון מיקרו בקר ‪8051‬‬
‫דוגמה לתוכנית שעברה הידור משפת ‪C‬‬
‫לשפת המיקרו‪.‬‬
‫תוכנית ראשונה בשפת ‪C‬‬
‫‪‬‬
‫התוכנית גורמת להבהוב נוריות המחוברות לפורט ‪.1‬‬
‫תוכנית ראשונה בשפת ‪( C‬המשך)‬
‫‪‬‬
‫התוכנית גורמת להבהוב נוריות המחוברות לפורט חיצוני בכתובת ‪.2000H‬‬
‫מימוש פורט חיצוני למיקרו‪.‬‬
‫‪‬‬
‫מימוש פורט בכתובת ‪.2000H‬‬
‫מיפוי כתובת זיכרון חיצוני‪.‬‬
‫כתובת‬
‫‪A12 – A0‬‬
‫‪A13‬‬
‫‪A14‬‬
‫‪A15‬‬
‫‪0000H‬‬
‫‪0000000000000‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1FFFH‬‬
‫‪1111111111111‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪2000H‬‬
‫‪0000000000000‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪3FFFH‬‬
‫‪1111111111111‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪4000H‬‬
‫‪0000000000000‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪5FFFH‬‬
‫‪1111111111111‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫סביבות העבודה של ‪SES‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫כולל עורך טקסט‪.‬‬
‫מהדר לשפת‬
‫‪.Assembly‬‬
‫חיבור למהדר‬
‫לשפת ‪ C‬של‬
‫‪.SDCC‬‬
‫תוכנה להורדת‬
‫לערכת הפיתוח‬
‫‪.APPLIC12‬‬
‫מייצר קובץ ‪.HEX‬‬
‫סביבות העבודה למעבדי ‪ ATMEL‬דגם‬
‫‪.89C5131A‬‬
‫‪ ‬קולט קובץ‬
‫‪.HEX‬‬
‫‪ ‬צורב קובץ‬
‫‪ HEX‬לזיכרון‬
‫הפנימי של‬
‫הרכיב על ידי‬
‫חיבור ‪.USB‬‬
‫ערכת עבודה "מכיר מערכות"‬
‫ערכת עבודה ‪Applic12‬‬
‫סוגי משתנים בשפת ‪ C‬של מהדר ‪SDCC‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫סיבית ‪.bit -‬‬
‫בית עם סימן ‪( .char -‬בין ‪ – 127‬עד ‪)127‬‬
‫בית ללא סימן‪( unsigned char -‬בין ‪ 0‬ל ‪.)255‬‬
‫מילה ‪ 16‬סיביות עם סימן – ‪.int‬‬
‫מילה ‪ 16‬סיביות ללא סימן ‪.unsigned int -‬‬
‫משתנה בנקודה צפה ‪ . float‬תופס ‪ 4‬בתים ‪.‬‬
‫משתנה ‪ 32‬סיביות עם סימן ‪long -‬‬
‫משתנה ‪ 32‬סיביות ללא סימן ‪.unsigned long -‬‬
‫מרחב זיכרון ה‪ RAM -‬במיעון ישיר‬
‫‪ ‬מרחב זיכרון ה‪ RAM -‬הפנימי במיעון ישיר מכתובות ‪ 0‬עד‬
‫‪ .7FH‬הגדרה סטנדרטית ללא סימון מיוחד או בסימון ‪data‬‬
‫‪ ,‬ניתן להגדיר מיקום על ידי שימוש בהוראה ‪.at‬‬
‫מרחב זיכרון ה‪ RAM -‬במיעון עקיף‬
‫‪ ‬מרחב זיכרון ה‪ RAM -‬הפנימי במיעון עקיף מכתובות‬
‫‪ 80H‬עד ‪ FFH‬הגדרה בסימון ‪ , idata‬ניתן להגדיר מיקום‬
‫על ידי שימוש בהוראה ‪. at‬‬
‫השוואה בין מיעון ישיר לעקיף‬
‫מרחב האוגרים הפנימיים‬
‫‪ ‬מרחב האוגרים הפנימיים הגדרה בסימון ‪ sfr‬חובה‬
‫להגדיר מיקום על ידי שימוש בהוראה ‪.at‬‬
‫סיביות במרחב האוגרים הפנימיים‬
‫‪‬‬
‫סיביות במרחב האוגרים הפנימיים הגדרה בסימון ‪sbit‬‬
‫חובה להגדיר מיקום על ידי שימוש בהוראה ‪.at‬‬
‫מרחב זיכרון נתונים חיצוני‬
‫‪ ‬מרחב זיכרון נתונים חיצוני מסומן ב‪ xdata -‬מקביל‬
‫לשימוש ב‪ asm-‬בפקודה ‪ . movx‬ניתן להגדיר מיקום על‬
‫ידי שימוש בהוראה ‪. at‬‬
‫מרחב זיכרון התוכנית‬
‫‪ ‬מרחב זיכרון התוכנית מסומן ב‪ code-‬מקביל לשימוש‬
‫ב‪ asm-‬בפקודה ‪ .movc‬ניתן להגדיר מיקום על ידי‬
‫שימוש בהוראה ‪. at‬‬
‫דוגמאות נוספות‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ - unsigned int i,j‬הגדרת משתנים ללא סימן בני ‪ 16‬סיביות בזיכרון הפנימי‪.‬‬
‫‪ -int at 25 u‬הגדרת משתנה ‪ 16‬סיביות עם סימן במקום ‪ 25‬ו‪ 26‬בזיכרון הפנימי‪.‬‬
‫‪ - idata int u‬הגדרת משתנה ‪ 16‬סיביות בזיכרון הפנימי במיעון עקיף‪.‬‬
‫‪ - idata char at 0xaa u1‬הגדרת משתנה ‪ 8‬סיביות עם סימן בזיכרון הפנימי במיעון‬
‫עקיף‪.‬‬
‫‪ - sfr at 0x90 leds‬הגדרת אוגר מיוחד(פורט ‪ )1‬במקום ‪ 90H‬בשם ‪.LEDS‬‬
‫‪ - sbit at 0xf3 y‬הגדרת סיבית מיוחדת בכתובת ‪ F3H‬בשם ‪.y‬‬
‫‪ - xdata float at 0x2222 x‬הגדרת משתנה בנקודה צפה במקום ‪ 2222H‬בזיכרון‬
‫מידע חיצוני‪.‬‬
‫‪ - code float at 0x2222 x=9.3‬הגדרת משתנה שערכו ‪ 9.3‬בנקודה צפה במקום‬
‫‪ 2222H‬בזיכרון התוכנית‪.‬‬
‫]‪ - unsigned int a[5‬הגדרת מערך של ‪ 5‬איברים בשם ‪. a‬‬
‫]‪ - unsigned int at 0x2000 xdata b[5‬הגדרת מערך של ‪ 5‬איברים בשם ‪ b‬בזיכרון‬
‫הנתונים החיצוני החל מכתובת ‪2000H‬‬
‫משתנה מטיפוס ‪Bit‬‬
‫קובץ הכותרת ‪8051.h‬‬
‫קובץ הכותרת ‪( 8051.h‬המשך)‬
‫דוגמה לשימוש בקובץ הכותרת ‪8051.h‬‬
‫בקרת זרימה ‪if -‬‬
‫‪ ‬הוראת ‪ if‬מאפשרת להגיב לתנאים שונים‪ ,‬בזמן ריצת‬
‫התוכנית‪.‬‬
‫‪ ‬זוהי הוראת ביצוע מותנה‪.‬‬
‫אופרטורים לוגים‪.‬‬
‫‪ - < ‬גדול מ‪.‬‬
‫‪ - > ‬קטן מ‪.‬‬
‫‪ - >= ‬גדול או שווה ל‪.‬‬
‫‪ - <= ‬קטן או שווה ל‪.‬‬
‫‪ - != ‬שונה מ‪.‬‬
‫‪ - == ‬שווה ל‪.‬‬
‫‪ - && ‬וגם לוגי‪.‬‬
‫‪ - || ‬או לוגי‪.‬‬
‫פעולות לוגיות על משתנים‪.‬‬
‫‪ And - & ‬לוגי‪.‬‬
‫‪ Or - | ‬לוגי‪.‬‬
‫‪ Not - ~ ‬לוגי‪.‬‬
‫‪ Xor - ^ ‬לוגי‪.‬‬
‫אופרטור הזזה‪.‬‬
‫‪‬‬
‫<< ‪ -‬הזזת סיבית ימינה‪.‬‬
‫>> ‪ -‬הזזת סיבית שמאלה‪.‬‬
‫‪‬‬
‫הזזה ימנה של ערכים עם סימן‪ ,‬נשמר הערך של סיבית הסימן‪.‬‬
‫הזזה ימנה של ערכים חסרי סימן ניכנס תמיד אפס‪.‬‬
‫בשני מצבי הזזה שמאלה‪ ,‬נכנס אפס‪.‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫משפט הצבה מותנה (‪(Conditional Assignment‬‬
‫‪ ‬בשפת ‪ C‬קיים מבנה מיוחד המאפשר לשלב את‬
‫הפונקציונאליות של משפט ‪ IF‬בתוך ביטוי‪ ,‬או בחלק ממנו‪.‬‬
‫‪ ‬המשפט מאפשר בחירה בין שני ביטויים בהתאם לערכו‬
‫של תנאי מסוים‪.‬‬
‫‪ ‬בניגוד ל‪ IF -‬ניתן לשלב אותו במשפט הצבה או בתוך‬
‫ביטוי לוגי‪.‬‬
‫; >ביטוי‪> : <2‬ביטוי‪>) ? <1‬תנאי<( ‪‬‬
‫‪ ‬יבוצע ביטוי ‪ 1‬אם התנאי מתקיים וביטוי ‪ 2‬אם התנאי לא‬
‫מתקיים‪.‬‬
‫משפט הצבה מותנה בהשוואה למשפט תנאי רגיל‪.‬‬
‫לולאות )‪(Loops‬‬
‫שפת ‪ C‬תומכת בשלושה סוגים שונים של לולאה‪:‬‬
‫‪ ‬משפט ‪.While‬‬
‫‪ ‬משפט ‪.Do While‬‬
‫‪ ‬משפט ‪.For‬‬
‫משפט ‪While‬‬
‫)>תנאי<( ‪while‬‬
‫;>הצהרה<‬
‫תוכנית‬
‫תנאי?‬
‫כן‬
‫בצע הצהרה‬
‫המשך התוכנית‬
‫לא‬
‫‪‬‬
‫משפט ‪Do While‬‬
‫תוכנית‬
‫בצע הצהרה‬
‫כן‬
‫תנאי?‬
‫לא‬
‫המשך התוכנית‬
‫‪do‬‬
‫>הצהרה<‬
‫;)>תנאי<( ‪while‬‬
‫‪‬‬
‫משפט ‪For‬‬
‫תוכנית‬
‫)>ביטוי‪>;<3‬תנאי<;>ביטוי ‪while (<1‬‬
‫;>הצהרה<‬
‫בצע‪ :‬ביטוי ‪1‬‬
‫תנאי?‬
‫ביטוי ‪2‬‬
‫כן‬
‫בצע‪ :‬ביטוי ‪3‬‬
‫בצע‪ :‬הצהרה‬
‫המשך התוכנית‬
‫לא‬
‫‪‬‬
‫משפט ‪Switch‬‬
‫‪‬‬
‫מימוש מפענח ‪ 3‬ל‪ 8-‬בתוכנה‪.‬‬
‫שילוב ‪ ASM‬בשפת ‪C‬‬
‫תרגילי מעבדה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪.1‬‬
‫כתוב תוכנית המקבלת מפסק כקלט‪ ,‬במצב אחד ירוצו נוריות מימין לשמאל אחרת‬
‫משמאל לימין‪.‬‬
‫כתוב תוכנית המקבלת כקלט שני מפסקים‪ ,‬על התוכנית להציג על נורית את פעולת‬
‫ה‪ XOR -‬בין השניים‪.‬‬
‫כתוב תוכנית הגורמת לשונה נוריות להבהב בקצב הנקלט ממפסקים‪ ,‬אחד המפסקים‬
‫יגרום להפסק ההבהוב‪.‬‬
‫כתוב תוכנית הבודקת את מצב המפסקים‪ ,‬התוכנית תבצע מטלה בתלות מצב‬
‫המפסקים‪ .‬התוכנית תבדוק (כל הזמן ‪ -‬באופן מחזורי) את מצב ‪ 2‬המפסקים‪ .‬כאשר‬
‫המשתמש ישנה את מצב ‪ 2‬המפסקים‪ ,‬התוכנית תעבור לבצע את המטלה המתאימה‬
‫בהתאם לטבלת האמת הבאה‪:‬‬
‫פונקציות‬
‫‪‬‬
‫‪‬‬
‫השימוש בפונקציות מאפשר חלוקה של משימה תכנותית‬
‫גדולה למספר משימות קטנות יותר ועצמאיות‪.‬‬
‫כל פונקציה מתכנתים ובודקים כיחידה עצמאית ורק לאחר‬
‫שהיא פועלת כראוי משלבים אותה בתכנית הכללית‪.‬‬
‫מימוש פונקצית השהיה‬
‫העברת פרמטרים לפונקציה‬
‫‪ ‬התוכנית הקוראת מספקת לפונקציה ערך או ערכים‬
‫הנקראים פרמטרים אקטואליים‬
‫‪ ‬ערכים אלה מועתקים‬
‫לתוך הפרמטרים‬
‫הפורמאליים לפי‬
‫סדר הופעתם‪.‬‬
‫העברת פרמטרים לפונקציה (המשך)‬
‫הערך המוחזר מפונקציה‬
‫טווח ההכרה ואורך החיים של משתנים‬
‫משתנים אוטומטיים‪:‬‬
‫‪ ‬הם הפרמטרים הפורמאליים של הפונקציה‬
‫‪ ‬או המשתנים המוגדרים בתוך הפונקציה (משתנים פנימיים)‪.‬‬
‫‪ ‬טווח ההכרה שלהם הוא בתוך הפונקציה‪.‬‬
‫טווח ההכרה ואורך החיים של משתנים‬
‫משתנים כללים (גלובליים)‪:‬‬
‫‪ ‬הם מוגדרים בתוך קובץ המקור מחוץ לפונקציה‪.‬‬
‫‪ ‬ניתן להתייחס אליהם בפונקציות אחרות‪.‬‬
‫‪ ‬ערכיהם נשמרים כל זמן ריצת התוכנית‬
‫‪ ‬כך מקבלים מנגנון נוסף להעברת ערכים מפונקציה אחת‬
‫לאחרת‪.‬‬
‫‪ ‬טווח ההכרה של המשתנים הגלובליים הוא בכל‬
‫הפונקציות המוגדרות‪ ,‬החל מנקודת ההגדרה של‬
‫המשתנה‪.‬‬
‫דוגמה למשתנה גלובלי‪.‬‬
‫טווח ההכרה ואורך החיים של משתנים‬
‫משתנים סטטיים‪:‬‬
‫‪ ‬הם משתנים אוטומטיים שאורך החיים שלהם נימשר כל‬
‫התוכנית‪ ,‬בדומה למשתנים גלובליים‪.‬‬
‫‪ ‬טווח ההכרה שלו מוגבל‬
‫רק לפונקציה שבה הוגדר‪.‬‬
‫הצהרה על אב‪-‬טיפוס לפונקציה‬
‫‪ ‬כדי שתוכנית תוכל לזמן פונקציה‪ ,‬המהדר חייב להכיר את‬
‫שמה‪ ,‬את טיפוס הערך שהפונקציה מחזירה ואת הטיפוס‬
‫ומספר הפרמטרים‬
‫היא מקבלת‪.‬‬
‫‪ ‬פרטים אלה נקראים‬
‫ממשק או חתימה‪.‬‬
‫פונקציות ספריה‬
http://www.koders.com/c/fid2D0
E4E5842DF57EB8A651630C7
82F5A87A0E4831.aspx
‫מחרוזות‬
‫‪ ‬מחרוזת הנה מערך של תווים אשר מסתיים בתו ‪NULL‬‬
‫'‪.'\0‬‬
‫‪ ‬לא ניתן להעתיק מחרוזת אחת למחרוזת אחרת על ידי‬
‫פעולת השמה‪.‬‬
‫‪ ‬לא ניתן להשים ערך למחרוזת אחרי שמצהירים עליה על‬
‫ידי פעולת השמה‪.‬‬
‫‪ ‬לא ניתן להשוות שתי מחרוזות על ידי פעולת השוואה‬
‫(==)‪.‬‬
‫העתקה של מחרוזת‬
‫השוואה בין מחרוזות‬
‫מנגנון הפסיקות‬
‫‪ ‬להבין מהו האבחנה בין פסיקה ותשאול‬
‫‪ ‬הגדרות אפשור פסיקה ועדיפות פסיקה‬
‫‪ ‬הכרת הפסיקות החיצוניות ‪INT0, INT1‬‬
‫האבחנה בין פסיקה ותשאול‬
‫‪‬‬
‫‪‬‬
‫תשאול (‪ - ) Pooling‬בשיטה זו המעבד בודק באופן מחזורי‪,‬‬
‫בלולאה אינסופית‪ ,‬את מצב הקלט וכך יודע מהו מצב הקלט‪.‬‬
‫היתרון בשיטת התשאול הוא הפשטות במימוש בחומרה ובתוכנה‪,‬‬
‫אולם לשיטה זו יש חיסרון‪ ,‬המעבד מבזבז זמן יקר בדגימת מצב‬
‫הקלט גם כאשר מצב הקלט כלל לא השתנה‪.‬‬
‫פסיקה (‪ - )Interrupt‬בשיטה זו המעבד לא מבזבז זמן כדי לדגום‬
‫באופן מחזורי את מצב הקלט‪ .‬בשיטת הפסיקה‪ ,‬כל עוד מצב‬
‫הקלט לא השתנה‪ ,‬המעבד ממשיך בפעילות שגרתית של הרצת‬
‫התוכנית הראשית‪ .‬רק כאשר יש אירוע ‪ ,‬כלומר‪ ,‬רק כאשר מצב‬
‫הקלט השתנה‪ ,‬המעבד מתבקש להפסיק את פעילותו השגרתית‬
‫ולבצע תוכנית פסיקה‪ .‬בסיום תוכנית הפסיקה‪ ,‬המעבד חוזר שוב‬
‫לפעילות השגרתית עד לבקשת פסיקה נוספת‪.‬‬
‫חלק ממקורות הפסיקה‬
‫שם הפסיקה‬
‫מקור הפסיקה ‪ /‬בקשת הפסיקה‬
‫‪Interrupt 0‬‬
‫‪ –INT 0‬פסיקה באמצעות ההדק החיצוני‬
‫‪P3.2‬‬
‫‪ –TF0‬פסיקה של המונה ‪T0‬‬
‫‪Interrupt 2‬‬
‫‪ –INT 1‬בקשת ההדק החיצוני ‪P3.3‬‬
‫‪Interrupt 3‬‬
‫‪ –TF1‬פסיקה המונה ‪T1‬‬
‫‪Interrupt 1‬‬
‫הפסיקות החיצוניות ‪INT0 INT1‬‬
‫‪ ‬ההדקים ‪ P3.2‬ו‪ P3.3 -‬הם מבואות הפסיקה החיצונית‬
‫‪ INT0‬ו‪ INT1 -‬בהתאמה‪.‬‬
‫‪ ‬כאשר המצב הלוגי בכל אחד מההדקים הללו יורד ל‪0-‬‬
‫המעבד מפסיק את התוכנית אותה הוא מבצע כרגע‪,‬‬
‫ועובר לבצע את תוכנית הפסיקה‪.‬‬
‫כיצד פועל מנגנון הפסיקה ?‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫לכל מקור פסיקה יש דגל פסיקה פנימי‪ ,‬דגל זה מציין למערכת הבקרה‬
‫שצריך לבצע תהליך של טיפול בפסיקה‪ .‬לכל פסיקה יש וקטור‬
‫פסיקה שהיא כתובת קבועה בה נמצאת תוכנית הפסיקה‪ .‬כאשר קורה‬
‫אירוע של בקשת פסיקה‪ ,‬דגל הפסיקה עולה ל‪ 1-‬ומתרחש במעבד‬
‫באופן אוטומטי התהליך הבא‪:‬‬
‫כתובת ההוראה הבאה (של התוכנית הראשית)‪ ,‬נדחפת למחסנית‬
‫(תוכן אוגר ‪ PC‬נדחף למחסנית)‪.‬‬
‫כתובת תוכנית הפסיקה (וקטור הפסיקה) נטענת לאוגר ‪. PC‬‬
‫תוכנית (שגרת) הפסיקה מתבצעת עד להוראה‪ :‬חזור מתוכנית‬
‫פסיקה‪.‬‬
‫כתובת ההוראה הבאה (של התוכנית הראשית)‪ ,‬נשלפת מהמחסנית‬
‫בחזרה אל אוגר ‪PC‬‬
‫התוכנית הראשית ממשיכה להתבצע‪ ,‬מאותו מקום שבו היא הופסקה‪.‬‬
‫האוגר המיוחד ‪TCON‬‬
‫‪ ‬באזור האוגרים מיוחדים ( ‪(Special Function Register‬‬
‫נמצאים אוגרים המכילים את דגלי הפסיקה ובנוסף‪ ,‬אוגרים‬
‫המכילים סיביות המאפשרות לקבוע איך ומתי יתבצעו‬
‫בקשות הפסיקה‪.‬‬
‫‪ ‬ארבע הסיביות הנמוכות שבאוגר ‪ TCON‬מכילות את שני‬
‫דגלי הפסיקה עבור שתי הפסיקות החיצוניות‪ .‬כמו כן מכיל‬
‫האוגר ‪ TCON‬שתי סיביות המגדירות מתי דגל הפסיקה‬
‫יעלה ל‪ ,1-‬בירידת שעון או ברמה לוגית נמוכה )שאר‬
‫הסיביות קשורות לבקרה על המונים והן תוסברנה‬
‫בהמשך)‪.‬‬
‫האוגר המיוחד ‪( TCON‬המשך)‬
‫‪‬‬
‫‪‬‬
‫‪ IE0‬ו‪ IE1 -‬הם דגלי הפסיקה‪ .‬כאשר אחד ממבואות הפסיקה‬
‫‪ INT0‬או ‪ INT1‬יורד ל‪ ,0-‬דגל הפסיקה ‪ IE0‬או דגל הפסיקה ‪IE1‬‬
‫עולים בהתאמה ל‪.1-‬‬
‫באמצעות סיביות הבקרה ‪ IT1 , IT0‬ניתן להגדיר בתוכנה‪ ,‬מתי‬
‫תתבצע בקשת הפסיקה‪ .‬כאשר ‪ , IT0=1‬בקשת הפסיקה תתבצע‬
‫בירידת השעון של ‪ .INT0‬כאשר ‪ , ֹIT0=0‬בקשת הפסיקה תתבצע‬
‫כאשר מבוא הפסיקה ‪ INT0‬הוא ברמה לוגית נמוכה ‪.0‬‬
‫חסימה ואפשור בקשות פסיקה‪ ,‬אוגר ‪IE‬‬
‫‪‬‬
‫‪‬‬
‫ניתן לחסום או לאפשר כל אחד מבקשות הפסיקה‬
‫באמצעות האוגר המיוחד ‪IE‬‬
‫לאפשּור הפסיקה‬
‫לכל מקור פסיקה יש סיבית מיוחדת ִ‬
‫(האות ‪ E‬מרמזת על ‪.) Enable‬‬
‫אוגר ‪( IE‬המשך)‬
‫‪‬‬
‫האפשּור היא במצב ‪ ,0‬המעבד יחסום את בקשת הפסיקה‪ .‬כאשר‬
‫כאשר סיבית ִ‬
‫האפשּור היא במצב ‪ 1‬תוכנית הפסיקה תתבצע‪.‬‬
‫סיבית ִ‬
‫הסיבית ‪ )Enable All ( EA‬חוסמת או מאפשרת את כל בקשות הפסיקה (ללא‬
‫תלות מה מצב סיביות האפשור האחרות)‪.‬‬
‫לדוגמא על מנת לאֲ ְפ ֵשר בקשת פסיקה חיצונית ‪( INT0‬מהדק ‪ ) P3.2‬נכתוב את‬
‫ההוראות‪:‬‬
‫;‪ EA=1‬‬
‫אֲ ְפ ֵשר באופן כללי את בקשות הפסיקה‬
‫;‪ EX0=1‬‬
‫אֲ ְפ ֵשר בקשת פסיקה חיצונית ‪INT0‬‬
‫‪‬‬
‫אם נרצה לדוגמא לאֲ ְפ ֵשר גם בקשת פסיקה ממונה ‪ 1‬נוסיף את ההוראה‪:‬‬
‫‪ET1=1‬‬
‫‪‬‬
‫במקום שלושת ההוראות במיעון סיבית‪ ,‬אפשר לכתוב הוראה אחת ;‪,IE=0x89‬‬
‫הוראה זו מציבה באוגר ‪ IE‬את הערך הבינארי ‪.10001001‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫מתן עדיפות לפסיקה‪ ,‬אוגר ‪IP‬‬
‫‪ ‬ב‪ 8051 -‬קיימות שתי רמות עדיפות לפסיקה‪ .‬כל אחד‬
‫ממקורות הפסיקה ניתן לסיווג ברמת עדיפות גבוהה או‬
‫נמוכה‪.‬‬
‫‪ ‬קביעת סיבית "‪ "1‬בסיבית עדיפות פסיקה מסוימת‪,‬‬
‫מעבירה אותה לרמת עדיפות גבוהה‪ .‬יתכנו מספר פסיקות‬
‫באותה רמת עדיפות (גבוהה או נמוכה)‪ .‬במקרה כזה‬
‫העדיפות היא בהתאם לסדר הסיביות‪ PX0 .‬בעלת‬
‫העדיפות הגבוהה ביותר ו‪ PS -‬בעלת העדיפות הנמוכה‬
‫ביותר‪.‬‬
‫כתיבת פונקצית הפסיקה‬
‫מימוש תוכנית לטיפול בפסיקה‬
‫דוגמה ‪:2‬‬
‫דוגמה ‪3‬‬
‫תרגילי מעבדה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הרץ את תוכנית הדוגמה השלישית‪.‬‬
‫כתוב תוכנית הסופרת את מספר הפעמים שהייתה פסיקה‪ .‬פלט המונה‬
‫יוצג כנוריות על פורט מוצא‪.‬‬
‫שפר את התוכנית הקודמת כך שכל ‪ 10‬פעמים‪ ,‬מונה הפסיקות‬
‫יתאפס‪.‬‬
‫כתוב תוכנית הקולטת דגימה דרך פורט ‪ 1‬לתוך מערך בן ‪ 10‬מקומות‪.‬‬
‫בכול פעם שמתבצעת פסיקה‪( .‬התוכנית תפסיק את לקלוט נתונים‬
‫כאשר המערך יהיה מלא)‪.‬‬
‫מונים וקוצבי הזמן‬
‫המעבד מכיל מספר מונים (‪ (COUNTER‬וקוצבי זמן‬
‫(‪.)TIMER‬‬
‫‪ ‬מונה הוא מערכת שסופרת דפקי שעון‪ ,‬מקבל את דפקי‬
‫השעון ממקור חיצוני‪.‬‬
‫‪ ‬קוצב הזמן מקבל את דפקי השעון מהמתנד של‬
‫המערכת‪ .‬תדר דפקי השעון של קוצב הזמן הוא קבוע‬
‫ושווה לאחד חלקי ‪ 12‬מתדר המתנד של המעבד‪ .‬במקרא‬
‫שלנו תדר המתנד הוא ‪ 12MHz‬לכן תדר קוצב הזמן הוא‬
‫בתדר של ‪. 1Mhz‬‬
‫‪ ‬חשוב!!! מונים וקוצבי הזמן פועלים עצמאית במקביל‬
‫לעבודתו של המעבד‪.‬‬
‫מונים וקוצבי הזמן (המשך)‬
‫‪‬‬
‫פונקצית ‪ Delay‬שכתבנו הייתה לא יעילה כי היא משעבדת את כל‬
‫זמן העבודה של המחשב לביצוע לולאת ‪ for‬ריקה‪.‬‬
‫באמצעות קוצב זמן (‪ ,)Timer‬נוכל מצד אחד‪ ,‬לאפשר למעבד‬
‫להמשיך במשימותיו ומאידך לגרום להשהיה בפרקי זמן קצובים‪.‬‬
‫‪‬‬
‫המונים סופרים דפקי שעון‪ ,‬כאשר המונה עובר את הערך ‪0xFFFF‬‬
‫הוא נמצא במצב המכונה גלישה ודגל הפסיקה של המונה עולה‬
‫לאחד לוגי‪ .‬אם הפסיקה מאופשרת תתבצע תוכנית פסיקה של‬
‫המונה‪.‬‬
‫במעבד קיים מערך של מונים הניתן לתכנות בשם ‪PCA‬‬
‫(‪ (Programmable Counter Array‬נתמקד ב‪ 2-‬מונים ברוחב ‪16‬‬
‫סיביות המיוצגים כ‪ T0 -‬ו‪. T1 -‬‬
‫‪‬‬
‫‪‬‬
‫המונים ‪ T0‬ו‪T1 -‬‬
‫‪ ‬מונים אלה הם ברוחב של ‪ 16‬סיביות כל אחד‪ ,‬וניתנים‬
‫לגישה על ידי שני האוגרים ‪ TL‬ו ‪TH‬בני ‪ 8‬סיביות כל‬
‫אחד‪.‬‬
‫האוגר ‪TMOD‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫קביעת אופן ההפעלה של המונים ‪ T0‬ו‪ , T1 -‬ניתן לשליטה באמצעות‬
‫שני אוגרים ‪ TMOD‬ו‪.TCON -‬‬
‫הסיבית ‪ ,GATE‬מאפשרת לעצור את ספירת המונה באמצעות הדק‬
‫הפסיקה החיצונית‪ .‬כאשר סיבית ה‪ GATE-‬שווה לאחד לוגי יש‬
‫אפשרות לעצור את ספירת המונה באמצעות הדק הפסיקה החיצוני ‪.‬‬
‫הסיבית ‪ (Counter/Timer( C/T‬קובעת האם ִתפקּוד המונה יהיה‬
‫כמונה או כקוצב זמן‪.‬‬
‫‪ - C/T=1‬המונה יספור דפקי שעון שמגיעים אל המונה מבחוץ‪.‬‬
‫‪ - C/T=0‬המונה יספור דפקי שעון בתדר קבוע של ‪( 1Mhz‬אחד‬
‫חלקי ‪ 12‬של תדר השעון)‬
‫אופני העבודה של המונים ‪ T0‬ו‪T1 -‬‬
‫‪ ‬הסיביות ‪ M1‬ו‪ M2 -‬קובעות את אופן העבודה של‬
‫המונה‪.‬‬
‫‪ ‬למונה ארבע אופני עבודה‪ .‬בשלב זה נתמקד בשני אופני‬
‫העבודה ‪ Mode 1‬ו‪ Mode2 -‬בלבד‪.‬‬
‫אופני העבודה של המונים ‪ T0‬ו‪T1 -‬‬
‫‪ TL – MODE0 ‬מתפקד כמונה בן ‪ 5‬סיביות והוא משמש‬
‫כמחלק ב‪ 32 -‬למונה ‪ .TH‬כדי ליצור תאימות לקוצב הזמן‬
‫שבבקר ‪.8048‬‬
‫‪ – MODE3 ‬במצב זה מתפקדים ‪ 2‬קוצבי הזמן כ‪3-‬‬
‫מערכות נפרדות‪.‬‬
‫‪ – Timer1‬כמונה שיציאתו מחוברת במקום לדגל בקשת‬
‫הפסיקה לאספקת אות קצב לתקשורת הטורית‪.‬‬
‫‪ – Timer0‬מתחלק ל‪ TL0 .2-‬מתפקד כמונה המפעיל את‬
‫‪ TF0‬ויוצר בקשת פסיקה‪ TH0 .‬מתפקד כקוצב זמן‬
‫המקבל בכניסה תדר מחולק ב‪ 12-‬ויציאתו מפעילה את‬
‫‪ TF1‬ויוצר בקשת פסיקה‪.‬‬
‫האוגר ‪TCON‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫אוגר זה מאפשר שליטה הן על אופן הפעולה של הפסיקות החיצוניות והן על שני‬
‫המונים ‪ T0‬ו‪ . T1 -‬החצי העליון של האוגר המיוחד ‪ , TCON‬מבקר את פעולת‬
‫המונים‪.‬‬
‫הסיבית ‪ - )Timer Flag 0( TF0‬דגל הפסיקה של מונה ‪ .T0‬סיבית זו עולה ל ‪1‬‬
‫כאשר יש גלישה‪ ,‬פעולה זה יוצרת בקשת פסיקה‪.‬‬
‫הסיבית ‪- )Timer Flag 1( TF1‬דגל הפסיקה של מונה ‪ . T1‬סיבית זו עולה ל ‪1‬‬
‫כאשר יש גלישה‪ ,‬פעולה זה יוצרת בקשת פסיקה‪.‬‬
‫הסיבית ‪ - (Timer Run 0) TR1‬סיבית הפעלת מונה ‪T1‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ - TR1 = 1‬מונה מופעל‪.‬‬
‫‪ - TR1 = 0‬מונה כבוי‪.‬‬
‫הסיבית ‪ - (Timer Run 0) TR0‬סיבית הפעלת מונה ‪T0‬‬
‫‪‬‬
‫‪‬‬
‫‪ - TR0 = 1‬מונה מופעל‪.‬‬
‫‪ - TR0 = 0‬מונה כבוי‪.‬‬
‫תאור גרפי של תפקוד האוגרים השולטים‬
‫במונים ‪ T0‬ו‪. T1 -‬‬
‫‪‬‬
‫האיור מדגים את מונה ‪ ,T0‬אך הוא נכון גם עבור ‪.T1‬‬
‫מימוש תוכנית לעבודה עם קוצב זמן‬
‫התוכנית תגרום לאחד המוצאים להוציא אות ריבועי‬
‫בתדר של ‪.500Hz‬‬
‫‪‬‬
‫‪‬‬
‫באמצעות האוגר המיוחד ‪ TMOD‬נגדיר את ‪ T0‬כקוצב‬
‫זמן באופן עבודה של ‪Mode1‬‬
‫;‪TMOD=0x01‬‬
‫ההוראה להגדרת הקוצב תהיה‪:‬‬
‫חישוב ערך במונה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫נטעין את המונה ‪ T0‬בערך התחלתי‪ .‬מאחר והדרישה היא לתדר של ‪F=500Hz‬‬
‫הרי שזמן המחזור של האות הריבועי צריך להיות ‪. T=2ms‬‬
‫במחצית מהזמן הזה ‪ 1ms‬ההדק צריך להיות ב‪ 0-‬ובמחצית השנייה של הזמן‬
‫צריך להיות ב‪.1-‬‬
‫החישוב עבור הערך ההתחלתי מבוסס על כך שתדר דפקי השעון של המונה‬
‫הוא ‪ .F = 1Mhz‬כלומר זמן המחזור של דופק שעון בודד הוא‪ .T=1µs :‬עבור‬
‫פרק זמן של ‪ ,1ms‬מספר דפקי השעון שהמונה צריך לספור הוא‪0x3E8 :‬‬
‫‪ 1ms/1µs = 1000‬‬
‫כידוע בקשת פסיקה מתקבלת במעבר המונה מ‪ 0xFFFF-‬ל‪ 0x0000-‬לכן‬
‫הערך ההתחלתי שצריך להטעין את המונה ‪ T0‬צריך להיות‪:‬‬
‫‪ 0xFFFF – 0x3E8 = 0xFC17‬‬
‫המונה ‪ T0‬מורכב משני אוגרים ‪ .TH0 , TL0‬לכן ההוראות לטעינת ערך‬
‫התחלתי למונה ‪ T0‬יהיו‪:‬‬
‫;‪ TH0=0xFC‬‬
‫;‪ TL0=0x17‬‬
‫תאור מילולי של תוכנית הפסיקה‬
‫לאחר שנצרוב את התוכנית בזיכרון המעבד‪ .‬תתקבל‬
‫פסיקת מונה בכל ‪.1ms‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫תוכנית הפסיקה תעצור את המונה‪.‬‬
‫תטעין מחדש את הערך ההתחלתי ‪.0xFC17‬‬
‫תאפשר שוב למונה לרוץ‪.‬‬
‫תהפוך את המצב בהדק היציאה ותחזור לתוכנית‬
‫הראשית‪.‬‬
‫קוד התוכנית‬
‫מימוש תוכנית לקוצב זמן של שנייה‪.‬‬
‫‪‬‬
‫נשנה את התדר ל‪ .1HZ -‬כך שבמשך ‪ 0.5‬שנייה יהיה‬
‫ההדר ב‪ 1-‬ובהמשך יהיה ב‪.0-‬‬
‫המונה ‪ T0‬הוא בן ‪ 16‬סיביות בלבד ולכן מספר הדפקים‬
‫המקסימאלי שהמונה יכול לספור הוא ‪ .65536‬מכאן‬
‫שפרק הזמן המקסימאלי בין פסיקה לפסיקה הוא‬
‫‪ 0.065s‬בלבד‪.‬‬
‫‪ 65536 * 1µs = 65536µs‬‬
‫‪‬‬
‫מספר הדפקים שהמונה צריך לספור הוא‪:‬‬
‫‪.0.5s/1µs = 500000‬‬
‫‪‬‬
‫חישוב הערך למונה‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫המונה ‪ T0‬כאמור בן ‪ 16‬סיביות ומספר הדפקים‬
‫המקסימאלי שהמונה יכול לספור הוא ‪.65536‬‬
‫כדי לקבל פרק זמן של ‪ 0.5‬שנייה‪ ,‬עד למתן ההוראה‬
‫להפיכת המצב הלוגי בהדק המוצא‪ ,‬אנו צריכים לאפשר‬
‫‪ 8‬פעמים פסיקת מונה‪.‬‬
‫‪ 7 * 65536 + 41248 = 500000‬‬
‫הערך ההתחלתי למונה יהיה ‪5EDF :‬‬
‫)‪ 41248 (0xA120‬‬
‫‪ 0xFFFF – 0xA120 = 0x5EDF‬‬
‫קוד התוכנית‬
‫מימוש יעיל של פונקצית השהיה‬
‫‪‬‬
‫תוך שימוש במבנה סטנדרטי לתוכנה הכתובה למיקרו‪.‬‬
‫תרגילי מעבדה‬
‫‪‬‬
‫‪‬‬
‫שנה את התוכנית כך שנקבל במוצא הבהוב בתדר של‬
‫‪ 5‬הרץ‪.‬‬
‫כתוב תוכנית הגורמת לארבעת הנוריות הנמוכים של‬
‫פורט ‪ P1‬להבהב בתדר של ‪ 1‬הרץ ואילו ארבעת‬
‫הנוריות הגבוהים של פורט ‪ P1‬יהבהבו בתדר של ‪5‬‬
‫הרץ‪.‬‬
‫‪ - LCD‬רקע עיוני‬
‫‪ )Liquid Crystal Display( LCD ‬משמעו תצוגת מסך‬
‫גביש נוזלי‪.‬‬
‫‪ ‬התצוגה מכילה שתי שורות של תווים‪ ,‬בכל שורה עד ‪16‬‬
‫תווים‪.‬‬
‫‪ ‬כל תו מורכב ממטריצה של נקודות (פיקסלים) שגודלה‬
‫‪. 5x8‬‬
‫‪ ‬התצוגה מבוקרת על ידי הבקר ‪,Hitachi HD44780‬‬
‫המבצע את כל הפעולות הפנימיות הדרושות להפעלתה‪.‬‬
‫מיפוי הדקי ה‪LCD-‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪ DB7-DB0‬פס נתונים בן ‪ 8‬ביטים‪ ,‬שבאמצעותו מבצעים קריאה‪/‬‬
‫כתיבה של הנתונים (תווים להצגה או פקודות עריכה לתווים)‪.‬‬
‫‪ - RS‬רגל בוררת בין אוגר פקודות ‪ Instruction Register‬לאוגר‬
‫מידע ‪.Data Register‬‬
‫‪ - E‬רגל ִאפשור‪,‬‬
‫כאשר רגל זו נמצאת במצב לוגי נמוך‪ ,‬ה‪ LCD-‬לא מתייחס למה‬
‫שקורה ב‪ R/W ,RS-‬ובפס הנתונים‪.‬‬
‫כאשר הרגל נמצאת במצב לוגי גבוה‪ ,‬ה‪ LCD-‬מעבד את הנתונים‬
‫הנכנסים‪.‬‬
‫‪ Vo‬רגל לכיול בהירות המסך‪.‬‬
‫‪ Vss , Vdd‬רגליים לאספקת מתחים‪.‬‬
‫‪ - R/W‬רגל כתיבה‪ /‬קריאה ל‪ /‬מ‪.LCD -‬‬
‫אוגרי ה‪LCD -‬‬
‫ל‪ LCD -‬יש שני אוגרים ‪:‬‬
‫‪ - Instruction Register ‬אוגר פקודות שבו נשמר קוד‬
‫הפקודה‪ :‬למשל‪ ,‬איפוס המסך‪ ,‬הזזת הסמן‪.‬‬
‫‪ - Data register ‬אוגר מידע שבו נשמרים נתוני המידע‬
‫הנכנסים ל‪LCD -‬‬
‫‪ ‬הבחירה בין שני האוגרים מתבצעת באמצעות קביעת‬
‫ערכו הלוגי של הדק ‪ RS‬כמפורט בטבלה הבאה‪:‬‬
‫זיכרון ה‪Display Data RAM -‬‬
‫זיכרון ‪Display Data RAM‬‬
‫‪ ‬בזיכרון זה נשמר המידע שאנו שולחים ל‪ LCD -‬כקוד ‪. ASCII‬לכל‬
‫אות קיים קוד מיוחד המסמל אותו‪ :‬למשל‪ ,‬האות ‪ A‬בקוד ‪ASCII‬‬
‫מקבלת ערך ‪ 65‬בבסיס ‪ 10‬או ‪ 01000001‬בבסיס בינארי או ‪41‬‬
‫בבסיס ‪.16‬‬
‫‪ ‬זיכרון יכול להכיל עד ‪ 80‬אותיות‪.‬‬
‫‪ ‬חלק מהכתובות מייצגות את השורות‪ .‬שורה ראשונה‪0x00-0x0F :‬‬
‫שורה שנייה‪.0x40-0x4F :‬‬
‫‪ ‬יתר הכתובות מייצגות את המרחב הבלתי‪-‬נראה של זיכרון ה‪-‬‬
‫‪ ,RAM‬בו ניתן להשתמש גם כזיכרון כללי‪.‬‬
‫‪ ‬כתובת ה‪ RAM-‬היא מיקום של הסמן על הצג (המקום בו מצוי‬
‫הסמן הוא המקום‪ ,‬שבו ייכתב המידע שנשלח)‪.‬‬
‫זיכרון )‪(Character Generator RAM‬‬
‫‪CGRAM‬‬
‫‪ ‬בזיכרון זה יכול המשתמש לבנות ולשמור אותיות משלו‪.‬‬
‫‪ ‬הדבר מתאפשר באמצעות ‪ 64‬בתים‪ ,‬המאפשרים בניית‬
‫שמונה אותיות בגודל ‪ 5x8‬פיקסלים‪.‬‬
‫‪ ‬זיכרון זה מכיל בנוסף כ‪ 190 -‬תווים מוכנים מראש‬
‫המייצגים את תווי ה‪.ASCII -‬‬
‫‪ ‬זיכרון זה פועל בתאום עם זיכרון ה‪ DDRAM -‬בכך שהוא‬
‫שולח להצגה תווים ממאגר התווים שב‪.CGRAM -‬‬
‫מונה כתובת ‪Address Counter‬‬
‫‪ ‬מונה הכתובת ‪ ADC‬משייך את הכתובת לזיכרונות‬
‫‪ DDRAM‬ו‪.CGRAM-‬‬
‫‪ ‬כאשר נשלח מידע ל‪ DDRAM-‬או ל‪ ,CGRAM-‬ערכו של‬
‫המונה ‪ AC‬מתעדכן אוטומטית‪.‬‬
‫טבלת הפקודות של צג ה‪LCD -‬‬
‫הפעלת צג כיחידה נפרדת‪( .‬על מטריצה)‬
‫מימוש צג ‪ LCD‬המחובר לפורט ‪4000H‬‬
‫תוכנית להפעלת הצג‬
‫המשך‪:‬‬
‫טבלת הפקודות‬
‫טבלת הפקודות (המשך)‬
‫סוף‬