מהלך העבודה עם כרטיס המיקרו בקר AT89C5131 כדי להכיר את התוכנה והחומרה של המיקרו בקר, אנו נבצע כמה ניסויים שיעזרו לנו להכיר את סביבת העבודה. בניסויים נשתמש בכרטיס המיקרו בקר ונתרגל שימוש בשפת בשפת תכנות,כתיבת תוכניות והרצתן. התוכניות נכתבות בשפת C51 שהיא שפת C ייעודית למיקרו בקר. כמו כן, כדי לכתוב את התוכניות ולהעבירן למיקרו בקר השתמשנו בתוכנות הבאות: 6.1(RIDE) Raisonance Kit המהדר לכתיבת התוכניות ותרגומן לשפת המכונה של המעבד.תוכנה זו קיימת בדיסק התקנה תחת התיקייה compiler FLIP 2.4.4 להרצת התוכניות וצריבתן למיקרו בקר. תוכנה זו קיימת בדיסק התקנה תחת התיקייה flip-2_4_4 הערה: תוכנות אילו קיימות בדיסק התקנה שקבילתן בעת רכישת כרטיס המיקרו-בקר AT89C5131 הפעלת המהדר ויצירת פרויקט חדש: יצירת תיקייה חדשה לפרויקט בכונן C. הפעלת תוכנת המהדר RIDE באמצעות: Start>All Programs> Raisonance Kit 6.1> RIDE IDE יצירת פרויקט חדש ע"י : Project>New בחלון שנפתח מקלידים את שם הפרויקט ומיקום התיקייה. בשורה Target Family להשאיר את הערך ההתחלתי, 80C51 ולאחר מכן.Next א..1.2.3.4.5 6. בחלון שנפתח בוחרים בתיקייה Atmel ואז את הרכיב AT89C5131 ולוחצים finish ערך: יוסי חזן
#include<at89c5131.h> ב. כתיבת התוכנית:."C Files" ולאחר מכן File>New.1 2. השורה הראשונה תהיה: שורה זו היא הוראה למהדר להכליל בתוכנית,בזמן ביצוע ההידור, הגדרות מיוחדות למעבד שאיתו אנו עובדים לדוגמא:עבודה עם הפורטים שלו. 3. כתיבת תוכנית הגורמת לנוריות ה- LED המחוברת ל- P1 להבהב: #include<at89c5131.h> void main() הגדרת משתנה לצורך לולאת ההשהיה// ;i unsigned int לולאה אינסופית// while(1) הדלקת הלדים בפורט // 1 P1=0xff; לולאת השהיה // for(i=0;i<=50000;i++); כיבוי הלדים בפורט // 1 P1=0x00; לולאת השהיה // for(i=0;i<=50000;i++); 4. שמירת התוכנית בשם באמצעות:.File>Save יש לשמור את הקובץ עם סיומת c לדוגמא: main.c רצוי לבחור שם שונה מזה של שם הפרויקט. 5. בשלב זה יש לצרף את התוכנית לפרויקט: א. בתפריט Project בוחרים באפשרות: Source/Application"."Add node ב. בחלון שנפתח בוחרים את הקובץ שאותו שמרנו. 6. בשלב זה מתבצע ההידור: בתפריט Project בוחרים ב- all"."build בסיום תהליך התרגום המהדר ידווח על שגיאות(אם יש כאלה) בחלון שבתחתית המסך. כל עוד קיימות שגיאות יש לתקנן, לשמור ולחזור על פעולות ההידור,עד שמתקבלים V ירוקים בתחתית החלון. ערך: יוסי חזן
ג. צריבת התוכנית בזיכרון המעבד: אופן עבודה עם תוכנת :FLIP 1. פותחים את תוכנית הצריבה באמצעות: Start>All Programs>Atmel>Flip 2.4.4>flip.exe 2. לוחצים על הצלמית השמאלית ובוחרים במעבד.AT89C5131 3. בוחרים את הקובץ לצריבה (עם סיומת (HEX באמצעות File>Load HEX file או הקשה על F4.
4. לוחצים על מקש RESET ועל מקש PSEN במיקרובקר. משחררים את המקש,RESET ולאחר מכן את המקש.PSEN RESET PSEN 5. מחברים את כרטיס המיקרובקר למחשב באמצעות קבל.USB 6 לוחצים על צלמית הכבל בתוכנת הצריבה, ובוחרים בחלון שנפתח ב- USB. 7. בחלון שנפתח מקישים Cancel ולאחר מכן Open ערך: יוסי חזן
8. בשלב זה המערכת מוכנה לצריבה. לוחצים על מקש Run בפינה השמאלית התחתונה של המסך. **יש להקפיד שהמשבצת BLJZ במסך אינה מסומנת. 9. לאחר מכן מסתיימת הציבה, בפינה השמאלית התחתונה של המסך מופיעה ההודעה."Memory verify pass" 10. כדי להריץ אץ התוכנית לוחצים על המקש Application","Start או על מקש RESET שבכרטיס המיקרובקר. אם הכול תקין הנוריות שבפיתחה 1 צריכות להבהב. ערך: יוסי חזן
דוגמאות נוספות להרצת תוכניות בסביבת עבודה זו: משנים את התכנית שבקובץ המקור, כך שרק ארבע נוריות תהבהבנה בכל פעם, וקצב ההבהוב יהיה איטי. 1. פותחים את תוכנת המהדר."RIDE" התוכנה תיפתח ותציג את התוכנית שנכתבה. 2. משנים את התוכנית בהתאם לכתוב: #include<at89c5131.h> void main() הגדרת משתנה לצורך לולאת ההשהיה // ;i unsigned int לולאה אינסופית// while(1) הדלקת 4 הלדים בפורט // 1 P1=0x0f; לולאת השהיה // for(i=0;i<=50000;i++); כיבוי הלדים בפורט // 1 P1=0x00; לולאת השהיה // for(i=0;i<=50000;i++); כתיבת והרצת תכניות קלט/פלט בסיסיות: בתרגילים הבאים נתנסה בכתיבת תוכניות הקשורות בהפעלת נוריות הדפ"א המחוברות לפורט 1 ו- 2 אשר פועלות כפלט. הנוריות בפיתחה 1 הן מסוג "קתודה משותפת" Cathode) (Common והדלקתן תיעשה באמצעות שידור של '1' מהמיקרו בקר למוצא הפורט, ואילו הנוריות בפיתחה 2 הן מסוג "אנודה משותפת" Anode) (Common והדלקתן תיעשה באמצעות שידור של '0'. כמו כן, נתנסה בכתיבת תוכניות בהן מצב הנוריות(הפלט) תלוי במצב המפסקים(הקלט) אשר מחוברים ל- P0. המפסקים מחוברים בצד אחד באופן קבוע להארקה, ובצד השני לאחד ממבואות פיתחת הקלט של המיקרו בקר ולנגד בעל התנגדות של 10K אום. *הדלקת לד רץ בפורט 1: 1) #include<at89c5131.h> void main() השמת ערך התחלתי בX והגדרתו // i,t,x=0x01; int לולאה אינסופית. כך הרצת הלדים תהיה אינסופית while(1)// for(i=0;i<8;i++) הצבת הערך שבמשתנה X בפורט // 1 P1=x; לולאת השהייה // for(t=0;t<50000;t++); הגדלת הערך שבמשתנה X פי שניים // x=x*2; השמת ערך התחלתי בX מחדש // x=0x01; //end main
*הדלקת לד רץ בפורט 2: פורט 2 הינו פורט מסוג "אנודה משותפת" Anode),(Common לכן על מנת להדליק לד מסוים יש להציב '0' לוגי. 2) #include<at89c5131.h> void main() השמת ערך התחלתי בY,X והגדרתם i,t,x=0xfe,y=1;// int לולאה אינסופית. כך הרצת הלדים תהיה אינסופית // while(1) for(i=0;i<8;i++) הצבת הערך שבמשתנהX בפורט // 1 P1=x; לולאת השהייה // for(t=0;t<50000;t++); יצירת שורש ריבועי על מנת להדליק בכל פעם לד 1 בלבד // x=x-y; y=y*2; השמת ערך התחלתי בY,X מחדש // x=0xfe; y=1; //main *הדלקת הלדים על פי מצב המפסקים 3) #include<at89c5131.h> Void main () לולאה אינסופית. כך הפעולה תהיה אינסופית // ) while(1) הדלקת הלדים בפורט 1 לפי המפסקים בפורט 0 // P1=P0; ערך: יוסי חזן
*הדלקת הלדים על פי מצב של פורט P0.0 4) #include<at89c5131.h> void main() השמת ערך התחלתי בX והגדרתו // i,t,x=0x01; int לולאה אינסופית. כך הפעולה תהיה אינסופית // while(1) אם P0.0 שווה ל '1' הרצת הלדים תהיה שמאלה // if(p0^0==1) for(i=128;i>0;i=i/2) הצבת הערך שבמשתנה i בפורט // 1 P1=i; לולאת השהייה // for(t=0;t<50000;t++); השמת ערך התחלתי בi מחדש // ;128=i אחרת, אם P0.0 שווה ל '1' הרמת הלדים תהיה ימינה if(p0^0==0)// else for(i=0;i<8;i++) הצבת הערך שבמשתנה X בפורט // 1 P1=x; הגדלת הערך שבמשתנה X פי שניים על מנת להדליק בכל פעם לד אחד בלבד // x=x*2; לולאת השהייה // for(t=0;t<50000;t++); השמת ערך התחלתי בX מחדש // x=0x01; //main ערך: יוסי חזן
לאחר שהתנסינו בכתיבת תוכניות להתקני קלט/פלט פשוטים כגון: לדים ומפסקים,נכתוב תוכניות מורכבות יותר המיועדות לחומרה המחוברת לכרטיס הפרויקט שלנו: בקובץ זה אני מביא דוגמא להצגת הודעות על-גבי תצוגת LCD המחוברת למיקרו-בקר לפי השרטוט הבא: VCC U2 7 8 9 10 11 12 13 14 C7 D0 D1 D2 D3 D4 D5 D6 D7 U1 26 17 16 0.1uF AT89C5131 5 4 6 R/W' RS E LCD C3 1uF J1 VCC R1 51k RESET SW1 SW R4 1.5k PSEN C2 22PF R6 2.2k X1 C1 24MHz 22PF 27 R2 27 R3 52 45 44 42 40 38 37 36 28 43 13 12 34 24 23 22 21 18 EA P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 PSEN RST XTAL1 XTAL2 NC VREF D+ D- PLFF UCAP AVDD VDD P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INTO P3.3/INT1/LED0 P3.4/TO P3.5/T1/LED1 P3.6/WR/LED2 P3.7/RD/LED3 ALE NC P4.1/SCL P4.0/SDA P1.0/T2/KN0 P1.1/T2EXKIN1/SS P1.2/ECI/KIL2 P1.3/CEX0/KIN3 P1.4/CEX1/KIN4 P1.5/CEX2/KIN5 P1.6/CEX3/KIN6 P1.7/CEX4/KIN7 1 2 3 9 10 11 14 15 20 29 30 31 32 33 35 39 27 46 8 7 47 48 49 50 51 4 5 6 2 VCC 1 VSS VCC 3 VL 1 2 3 4 VSS UVSS AVSS USB C4 2.2n R5 100 C6 CAP 41 25 19 C5 10n בשרטוט הנ"ל ה- BUS DATA של התצוגה מחובר ל- P0 של המיקרו-בקר,רגל RS של התצוגה מחוברת ל- P2.0 ורגל E של התצוגה מחוברת להדק P2.1.יש לשים לב לחומרה המחוברת בכרטיס על-מנת שהתוכנית תתאים. הרעיון בכתיבה בשפת C היא לכתוב בצורה מודולרית,תוך שימוש בפונקציות קיימות של התוכנה ושל משתמשים אחרים.על-מנת להקל עליכם בכתיבת תוכניות,תקבלו מאיתנו קטעי תוכניות (פונקציות עבור רכיבי חומרה היקפיים ( וכל שעליכם לעשות הוא לכתוב את התוכנית הראשית ולשלב את הפונקציות. ההכרזה על הפונקציות,רשומה בקובץ עם סיומת h והפונקציות עצמן נמצאות בקובץ עם סיומת c דוגמא לכתיבת תוכנית המציגה בשורה 1 במיקום 0 של תצוגת ה- LCD את השנייה במיקום 5 את המשפט yossi&avi המילה- test,ובשורה פתח ספריה חדשה בכונן C של הפרויקט לדוגמא: project ושמור לתוכה את קבצי c וקבצי h המכילים את הפונקציות.בדוגמא שלנו אם הפרויקט מכיל רכיב LCD,שמור את הקבצים: lcd_p.h ו- lcd_p.c הפעלת תוכנת המהדר RIDE באמצעות: Start>All Programs> Raisonance Kit 6.1> RIDE IDE יצירת פרויקט חדש ע"י : Project>New בחלון שנפתח מקלידים את שם הפרויקט ומיקום התיקייה,נבחר בשם project (לא חייב באותו שם)..1.2.3.4
בשורה.Next ולאחר מכן 80C51 להשאיר את הערך ההתחלתי, Target Family.5 6. בחלון שנפתח בוחרים בתיקייה Atmel ואז את הרכיב AT89C5131 ולוחצים finish הוסף לפרויקט את קבצי c של רכיבי הפרויקט כמו: lcd_p.c וכו' בתפריט Project בוחרים באפשרות: Source/Application" "Add node.7
פתח קובץ c חדש File>New ולאחר מכן Files" C" וכתוב בה את התוכנית הראשית למשל: עבור רכיב ה- LCD רשום שלפני ה- main ( main ).בהצהרות "lcd.h" #include הצהרה זו באה להכליל את הפונקציה שאתה נשתמש בתוכנית הראשית. שמירת התוכנית בשם באמצעות:.File>Save יש לשמור את הקובץ עם סיומת c לדוגמא: main.c.8.9
10. לאחר ששמרנו יש לבדוק את טעויות תחביר של התוכנית -קומפילציה,בתפריט. project build all בסיום תהליך התרגום המהדר ידווח על שגיאות(אם יש כאלה) בחלון שבתחתית המסך. כל עוד קיימות שגיאות יש לתקנן, לשמור ולחזור על פעולות ההידור,עד שמתקבלים V ירוקים בתחתית החלון. 10. שינוי חיבורי חומרה של הרכיבים: פורטים,כתובות וכו' יתבצעו בקבצי h של אותו רכיב,בדוגמא שלנו עלינו לשנות את הדקי RS ו- E בקובץ lcd_p.h בהתאם לחיבורים שלנו. כעת יש לצרוב את הקובץ עם הסיומת hex שנוצר לנו בתיקיית הפרויקט לכרטיס ולבדוק את החומרה במקרה זה יש לבדוק אם התקבלו הודעות בתצוגת ה- LCD. דרך נוספת לכתיבת תוכנית לתצוגה היא ע"י הגדרת מערך חד ממדי ושימוש בפונקציה : sprintf #include<stdio.h> // for sprintf function #include "lcd_p.h" // for lcd function char lcd_array[16]; // array for lcd void main() int i; float a; i=100/4; a=25/3; lcd_config(); // lcd intialization lcd_line(1,0); // cursor in line1 in 0 location sprintf(lcd_array,"the res are:%d",i); // The res are:25 lcd_string (lcd_array); //send the array to lcd lcd_line(2,0); // cursor in line2 in 0 location sprintf(lcd_array,"the res are:%f",a); // The res are:8.33 lcd_string (lcd_array); //send the array to lcd