תפריט English Ukrainian רוסי עמוד הבית

ספרייה טכנית בחינם לחובבים ואנשי מקצוע ספריה טכנית בחינם


אינציקלופדיה של רדיו אלקטרוניקה והנדסת חשמל
ספרייה חינם / ערכות של מכשירים רדיו-אלקטרוניים וחשמליים

מה זה PIC? אנציקלופדיה של רדיו אלקטרוניקה והנדסת חשמל. אנציקלופדיה של רדיו אלקטרוניקה והנדסת חשמל

ספריה טכנית בחינם

אנציקלופדיה של רדיו אלקטרוניקה והנדסת חשמל / מיקרו-בקרים

הערות למאמרהערות למאמר

מבוא. ה-PIC16CXX הם מיקרו-בקרי RISC של 8 סיביות המיוצרים על ידי Microchip Technology. משפחה זו של מיקרו-בקרים מאופיינת במחיר נמוך, צריכת חשמל נמוכה ומהירות גבוהה.

למיקרו-בקרים יש תוכנית EEPROM מובנית, זיכרון RAM נתונים וזמינים בחבילות פלט של 18 ו-28.

PIC OTP הם בקרים חד-פעמיים הניתנים לתכנות על ידי משתמש המיועדים למוצרים שנבדקו ומוגמרים במלואם, שלא יעברו שינויים נוספים בקוד. בקרים אלו זמינים במארזי פלסטיק זולים עם סוג מוגדר מראש של מתנד חיצוני - קוורץ או RC.

עבור תוכניות איתור באגים ויצירת אב טיפוס, זמינה גרסה של בקרים עם מחיקה אולטרה סגולה. בקרים אלו מאפשרים מספר רב של מחזורי כתיבה/מחיקה ויש להם זמן מחיקה קצר מאוד - בדרך כלל 1-2 דקות.

עם זאת, המחיר של בקרים כאלה גבוה משמעותית מאלה שתוכנתו פעם אחת, ולכן לא משתלם להתקין אותם בייצור סדרתי.

עבור מוצרים שהתוכנית שלהם יכולה לשנות, או מכילה חלקים משתנים, טבלאות, פרמטרי כיול, מפתחות וכו', זמין בקר PIC16C84 הניתן למחיקה חשמלית וניתן לתכנות מחדש. הוא מכיל גם ROM נתונים הניתן להבהב חשמלי. זה הבקר הזה שבו נשתמש לניסויים.

כדי להפיק את המרב ממאמר זה, תזדקק למחשב אישי תואם PC IBM, מתכנת המחובר ליציאה המקבילה של המחשב, שבב PIC16C84, לוח לחם, 8 נוריות לד עם נגדים, ספק כוח +5V ושקע עבור השבב.

נקליד פיסות קטנות של תוכנת PIC, נרכיב אותן, נניח אותן על השבב, ואז נצפה בתוצאות על נוריות הלד. אנו נשתמש במנמוניות הבסיסיות של MICROCHIP במאמר זה כדי שתוכל להשתמש ביתר קלות בדוגמאות והרשימות האחרות של יישומים המופיעים במדריך הבקרה המשובץ.

PIC16CXX FAMILY נתחיל בתיאור מפורט של משפחת ה-PIC של המיקרו-מעגלים עם אותם תכונות ויתרונות שמבדילים את המיקרו-בקרים הללו מאחרים. עבור יישומי אבטחת נתונים, לכל PIC יש ביט אבטחה שניתן לתכנת כדי להשבית את הקריאה של קוד התוכנית ו-ROM הנתונים. בעת התכנות, קוד התוכנית נכתב תחילה, נבדק לכתיבה נכונה, ולאחר מכן מוגדר סיבית האבטחה. אם תנסה לקרוא את השבב עם ביט האבטחה מוגדר, אז עבור PIC16C5X 8 הסיביות העליונות של הקוד ייקראו כ-0, ו-4 הסיביות התחתונות יהיו מקושקשות 12 סיביות של הפקודה. עבור PIC16C84, באופן דומה, 7 הסיביות המשמעותיות ביותר ייקראו כאפסים, ו-7 הסיביות הפחות משמעותיות ייצגו את 14 הסיביות המעורפלות של ההוראה. לא ניתן לקרוא את ה-PIC16C84 EEPROM כאשר סיבית האבטחה מוגדרת. איור 1 מציג את כל המיקרו-בקרים המיוצרים כעת ונותן את המאפיינים הקצרים שלהם. (איור בעמוד 2-1) למשפחת המיקרו-בקרים PIC יש ערכת הוראות יעילה מאוד המורכבת מ-35 הוראות בלבד. כל ההוראות מבוצעות במחזור אחד, למעט קפיצות מותנות והוראות שמשנות את מונה התוכניות, אשר מבוצעות ב-2 מחזורים. מחזור ביצוע הוראות אחד מורכב מ-4 מחזורי שעון. לפיכך, בתדר של 4 מגה-הרץ, זמן ביצוע הפקודה הוא 1 מיקרו-שניה. כל הוראה מורכבת מ-14 ביטים, המתחלקים בקוד הפעולה ובאופרנד (מניפולציה אפשרית עם אוגרים, מיקומי זיכרון ונתונים מיידיים). ערכת הפקודות של המיקרו-בקרים PIC16CXX מוצגת באיור 2. (טבלה 7.2 בעמוד 2-569) המהירות הגבוהה של ביצוע פקודות ב-PIC מושגת על ידי שימוש בארכיטקטורת הרווארד עם שני אפיקים במקום של Von Neumann עם אוטובוס יחיד. ארכיטקטורה. ארכיטקטורת הרווארד מבוססת על קבוצה של אוגרים עם אוטובוסים מופרדים ומרחב כתובות להוראות ולנתונים. ערכת אוגר פירושה שכל אובייקטי התוכנה, כגון יציאות I/O, תאי זיכרון וטיימר, הם אוגרי חומרה מיושמים פיזית.

זיכרון הנתונים (RAM) עבור PIC16CXX הוא 8 סיביות, זיכרון התוכנית (PROM) הוא 12 סיביות עבור PIC16C5X ו-14 סיביות עבור PIC16CXX. שימוש בארכיטקטורת הרווארד מאפשר לך להשיג מהירות גבוהה של פעולות סיביות, בתים ורישום. בנוסף, ארכיטקטורת הרווארד מאפשרת ביצוע פקודות בצנרת, כאשר הפקודה הנוכחית מבוצעת והבאה נקראת בו-זמנית. בארכיטקטורת פון נוימן המסורתית, פקודות ונתונים מועברים באמצעות אפיק משותף או מרובה יחיד, ובכך מגבילים את האפשרויות של צנרת. איור 3 מציג תרשים בלוקים של מבנה האוטובוס הכפול PIC16CXX. (איור B בעמוד 2-536) כפי שאתה יכול לראות, הרכיבים הפיזיים והלוגיים הפנימיים המרכיבים את PIC16CXX דומים לכל מיקרו-בקר אחר שייתכן שעבדת איתו עד כה. לכן, כתיבת תוכניות עבור PIC אינה קשה יותר מאשר עבור כל מעבד אחר. היגיון, ורק היגיון...

כמובן, ארכיטקטורת הרווארד וגודל הפקודה הגדול מאפשרים להפוך את קוד ה-PIC להרבה יותר קומפקטי מאשר עבור מיקרו-בקרים אחרים ולהגדיל משמעותית את מהירות ביצוע התוכנית.

PIC REGISTER SET כל אובייקטי התוכנה שאיתם ה-PIC יכול לעבוד הם אוגרים פיזיים. כדי להבין איך ה-PIC עובד, צריך להבין אילו רגיסטרים יש לו ואיך לעבוד עם כל אחד מהם. איור 4 מציג את כל האוגרים של PIC16C84. (תמונה 3.7.1 בעמוד.

2-541) נתחיל עם סט של אוגרים תפעוליים. קבוצה זו מורכבת מאוגר הכתובות העקיף (f0), אוגר הטיימר/מונה (f1), מונה התוכניות (f2), אוגר מילות המצב (f3), אוגר הבחירה (f4), ואוגרי הקלט/פלט ( f5,f6).

זה הכרחי שתבינו כיצד להשתמש בריסטרים אלה, מכיוון שהם מייצגים את עיקר האובייקטים הנגישים לתוכנה של המיקרו-בקר. מכיוון שאנחנו צריכים בעיקר להבין "איך לנהל" ולא "איך זה נעשה באופן פנימי", צירפנו דוגמאות פשוטות מאוד המראות שימושים אפשריים עבור כל רישום.

f0... INDIRECT ADDRESS REGISTER IND0 פנקס כתובות עקיף f0 אינו קיים פיזית. הוא משתמש באוגר הבחירה f4 כדי לבחור בעקיפין אחד מ-64 האוגרים האפשריים.

כל הוראה המשתמשת ב-f0 ניגשת למעשה למאגר הנתונים שעליו מצביע f4.

f1... TMR0 TIMER/COUNTER REGISTER ניתן לכתוב ולקרוא ממנו את הטיימר/מונה TMR0 כמו כל אוגר אחר. ניתן להגדיל את TMR0 על ידי אות חיצוני המופעל על פין RTCC, או על ידי תדר פנימי המתאים לתדר הפקודה.

השימוש העיקרי בטיימר/מונה הוא לספור את מספר האירועים החיצוניים ולמדוד זמן. ניתן גם לחלק את האות ממקור חיצוני או פנימי באמצעות המחלק הניתן לתכנות המובנה של ה-PIC.

f2...PCL PROGRAM COUNTER מונה התוכניות (PC) משמש ליצירת רצף של כתובות תא ROM של תוכנית המכילות הוראות של 14 סיביות. למחשב יש קיבולת של 13 סיביות, המאפשרת לך לפנות ישירות לתאי ROM של 8Kx14. עם זאת, עבור PIC16C84, רק תאי 1K זמינים פיזית. ניתן לכתוב ולקרוא את 8 הסיביות התחתונות של ה-PC דרך האוגר f2, 5 הסיביות העליונות נטענות מהאוגר של PCLATCH, בעל כתובת 0Ah.

f3... STATUS REGISTER אוגר מילות הסטטוס דומה לאוגר PSW שנמצא ברוב המיקרו-מעבדים. הוא מכיל את ה-carry, carry עשרוני ואפס סיביות, כמו גם סיביות הפעלה וסיביות החלפה.

f4...FSR SELECT REGISTER כפי שכבר הוזכר, אוגר הבחירה FSR משמש יחד עם אוגר הכתובות העקיף f0 כדי לבחור בעקיפין אחד מ-64 האוגרים האפשריים. מעורבים פיזית הם 36 אוגרי RAM של משתמשים הממוקמים בכתובות 0Ch-2Fh ו-15 אוגרי שירות הממוקמים בכתובות שונות.

f5, f6... I/O REGISTERS PORTA, PORTB Registers f5 ו-f6 תואמים לשתי יציאות I/O הזמינות ב-PIC16C84. ליציאה A יש 5 סיביות PA4-PA0, שניתן לתכנת בנפרד ככניסות או יציאות באמצעות אוגר TRISA בכתובת 85h. ליציאה B יש 8 סיביות PB7-PB0 והיא מתוכנתת באמצעות אוגר TRISB עם כתובת 86h. הגדרה 1 בסיבית ה-TRIS מתכנתת את סיבית היציאה המקבילה כקלט. בקריאת הפורט נקרא המצב המיידי של הפלט, בכתיבה לפורט הכתיבה מתרחשת ב-buffer register.

f8, f9...EEDATA, EEADR EEPROM REGISTERS ל-PIC16C84 יש EEPROM מובנה של 64 בתים שניתן לקרוא ולכתוב באמצעות אוגר הנתונים EEDATA ואוגר הכתובות של EEADR. כתיבת בייט חדש נמשכת כ-10 אלפיות השנייה ונשלטת על ידי טיימר מובנה. בקרת הכתיבה והקריאה מתבצעת באמצעות אוגר EECON1, בעל הכתובת 88h. לשליטה נוספת על ההקלטה, נעשה שימוש באוגר EECON2, בעל הכתובת 89h.

רישומי מטרה כללית הם זיכרון RAM סטטי הממוקם בכתובות 0Ch-2Fh. ניתן להשתמש בסך הכל ב-16 תאי RAM ב-PIC84C36.

SPECIAL REGISTERS W, INTCON, OPTION לבסוף, בואו נסתכל על אוגרי PIC המיוחדים. אלה כוללים את אוגר העבודה W, המשמש כאוגר הצובר ברוב הפקודות, ואת האוגרים INTCON ו-OPTION. אוגר הפסיקות INTCON (כתובת 0Bh) משמש לשליטה במצבי פסיקה ומכיל סיביות הפעלת פסיקה ממקורות שונים ודגלי פסיקה. אוגר מצבי OPTION (כתובת 81h) משמש לקביעת מקורות האותות עבור ה-prescaler והטיימר/מונה, כמו גם להגדרת גורם החלוקה של ה-prescaler, הקצה הפעיל של האות עבור RTCC וכניסת הפסיקה. בנוסף, באמצעות אוגר OPTION, ניתן להפעיל נגדי סיום עבור ביטים של יציאה B המתוכנתים ככניסות.

WDT WDT Watchdog כלב השמירה של WDT נועד למנוע השלכות קטסטרופליות מתקלות בתוכניות בשוגג. זה יכול לשמש גם ביישומי תזמון כגון גלאי דופק החמצה. הרעיון של שימוש בטיימר כלב שמירה הוא לאפס אותו באופן קבוע תחת שליטה של ​​תוכנית או השפעה חיצונית לפני שהעיכוב שלו יפוג והמעבד לא מתאפס. אם התוכנית פועלת כרגיל, הוראת כלב השמירה CLRWDT אמורה לפעול באופן קבוע כדי למנוע מהמעבד להתאפס. אם המיקרו-מעבד חרג בטעות את גבולות התוכנית (לדוגמה, מהפרעה חזקה במעגל החשמל) או נתקע בחלק כלשהו של התוכנית, ככל הנראה פקודת איפוס הכלב לא תתבצע תוך זמן מספיק, וכן יתרחש איפוס מלא של המעבד, אתחול כל האוגרים ויביא את המערכת למצב עבודה.

טיימר ה-Watchdog ב-PIC16C84 אינו דורש רכיבים חיצוניים ופועל על מתנד RC מובנה, וההפקה אינה נעצרת גם בהיעדר תדר השעון של המעבד. תקופת כלב שמירה טיפוסית היא 18 אלפיות השנייה. אתה יכול לחבר Prescaler לטיימר Watchdog ולהגדיל את פרק הזמן שלו עד 2 שניות.

פונקציה נוספת של טיימר Watchdog היא להפעיל את המעבד ממצב הספק נמוך, בו המעבד מועבר על ידי פקודת SLEEP. במצב זה, ה-PIC16C84 צורך מעט מאוד זרם - בערך 1 µA. אתה יכול לעבור ממצב זה למצב עבודה על ידי אירוע חיצוני של לחיצה על כפתור, הפעלת חיישן או על ידי טיימר כלב שמירה.

מחולל שעונים ניתן להשתמש בארבעה סוגים של מחולל שעונים עבור מיקרו-בקרים ממשפחת ה-PIC: מהוד קוורץ XT HS מהוד קוורץ בתדר גבוה LP תהליך תכנות שבב מעגל קריסטל קריסטל RC LP. אם האפשרויות XT, HS ו-LP מוגדרות, מחברים למיקרו-מעגל מהוד קוורץ או קרמי או מקור שעון חיצוני, ואם מוגדרת אפשרות RC, מחוברים נגד וקבל. כמובן שמהוד קרמי ובמיוחד קוורץ הוא הרבה יותר מדויק ויציב, אך אם אין צורך בדיוק גבוה בתזמון, שימוש במחולל RC יכול להוזיל את העלות והממדים של המכשיר.

RESET CIRCUIT משפחת המיקרו-בקרים PIC משתמשת במעגל איפוס הדלקה פנימי בשילוב עם טיימר התחלה של מתנד, ומבטל את הצורך בנגד ובקבלים מסורתיים ברוב המצבים.

כל שעליך לעשות הוא לחבר את כניסת MCLR למקור מתח. אם סביר להניח שיתרחשו עליות או נחשולי מתח כאשר המתח מופעל, עדיף להשתמש בנגד סדרה של 100-300 אוהם. אם הגברת הכוח איטית מאוד (פחות מ-70 אלפיות השנייה), או שאתה פועל במהירויות שעון נמוכות מאוד, יש להשתמש במעגל איפוס נגד וקבלים מסורתיים.

מתיאוריה לפרקטיקה...

הכרנו בקצרה את האלמנטים העיקריים המרכיבים את המיקרו-בקרים של משפחת PIC. כעת נעבור לתרגילים מעשיים.

נכתוב תוכניות קצרות, נרכיב אותן, נכתוב אותן למיקרו-מעגל ונראה מה קורה.

כדי לעשות זאת, אנחנו צריכים את הדברים הבאים: - שבב PIC16C84; - אסמבלר MPALC; - מתכנת PROPIC; - אספקת חשמל של זרם ישיר או חילופין 18-36 V; - לוח אב טיפוס עם התקן תצוגה.

התרשים הסכמטי של התקן התצוגה, שבו נשתמש כדי להדגים את פעולת הפקודות הבסיסיות של PIC16C84, מוצג באיור 5. (צריך לצייר) כפי שניתן לראות, המכשיר מורכב מ-8 נוריות LED בלבד עם נגדים מגבילי זרם ואלמנטים של הגדרת תדר. כל פין של מיקרו-בקרים ממשפחת PIC יכול לשלוט ישירות על ה-LED ללא מגברים נוספים.

מה זה PIC?

נתחיל בתיאור הקוד הבסיסי שישמש בדוגמאות שלנו. כאשר אתה מתחיל לכתוב קוד עבור הפרויקט שלך, קטע הכותרת (כל הקוד עד לשורה ORG 0) צריך להיות ספציפי ליישום שלך. סעיף הכותרת מגדיר שמות לוגיים לכל המשאבים המשמשים בפרויקט - יציאות, משתני סיביות ובייטים ואוגרים. הכותרת שלנו גם מגדירה את יציאות ה-I/O כך שכל הביטים של יציאות A ו-B יוגדרו כפלטים לאחר ביצוע הפקודות הבאות: MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB כאשר הכוח מופעל, ה-PIC16C84 מגדיר את כל הביטים של יציאות A ו-B לקלט ומתחיל להפעיל את התוכנית מכתובת 000h. הקוד הבסיסי מוצג באיור 6. (צריך לצייר) משהו כזה: ; קוד בסיס לדוגמה עבור תוכנית ההדגמה; LIST P=16C84, E=2 ; ; סעיף כותרת ; ; תיאור אוגרי הפעלה TMR0 EQU 01h PC EQU 02h STATUS EQU 03h FSR EQU 04h ; רשמי I/O CNTRLPORT EQU 05h DATAPORT EQU 06h ; מיקומי זיכרון RAM SCRATCH EQU 0Ch DIGIT EQU 0Dh; סיביות רישום STATUS C EQU 0h DC EQU 1h Z EQU 2h PD EQU 3h TO EQU 4h RP EQU 5h; אוגרי בקרה TRISA EQU 85h TRISB EQU 86h ; מילות אתחול עבור יציאות I/O INITA EQU B'00000000' INITB EQU B'00000000' ; ; סעיף עבודה; ; התחלה של קוד ההפעלה ORG 0 GOTO BEGIN; ORG 100h BEGIN MOVLW INITA MOVWF TRISA MOVLW INITB MOVWF TRISB ; ; הדבק את הקוד לדוגמה כאן; END ; עיין בחזרה לאיור 4 במידת הצורך בזמן שאנו דנים בקוד הבסיסי. ראשית, כל השורות המתחילות ב-";" מטופלות כהערות על ידי ההרכב. נעבור לביטוי TMR0. אמרנו לאסמבלר שבכל פעם שנתקלת במילה TMR0, היא צריכה להחליף את הערך 01h (01 hex). המילה "EQU" פירושה שוויון. לפיכך, הקצינו ל-TMR0 את הערך 1h. כפי שניתן לראות מאיור 4, לפנקס TMR0 אכן יש כתובת 1h. אתה יכול להשתמש ב-01h בכל פעם שאתה רוצה להתייחס לרישום TMR0, אבל זה יהיה הרבה יותר קשה לנפות כי אתה צריך לזכור ש-01h פירושו RTCC כל הזמן. ייתכן שיש לך גם נתונים השווים ל-01h. השימוש בשמות סמליים מבטל את העמימות ומקל על הקריאה של טקסט המקור. אתה יכול גם לראות את הביטויים עבור אוגרי PC, STATUS ו-FSR. השם PC מתאים לכתובת הרישום 02h, השם STATUS מתאים לכתובת הרישום 03h, השם FSR מתאים לכתובת הרישום 04h וכן הלאה. נתנו גם שמות ליציאות I/O, CNTRLPORT (05h) ו-DATAPORT (06h). לתאי RAM יכולים להיות גם שמות. בחרנו את השמות "SCRATCH" לתא ב-0Ch ו-"DIGIT" לתא ב-0Dh. אם תקרא עד הסוף של הטקסט הזה, תראה שאנחנו לא משתמשים ישירות במחשב בשום מקום, למרות שהשם הזה מוגדר. אין בכך טעות - ניתן להגדיר שמות ואז לא להשתמש בהם, אם כי, כמובן, לא ניתן להשתמש בשם אם הוא לא הוגדר קודם לכן. אל תדאג יותר מדי בקשר לזה - תפקידו של האסמבלר הוא לבדוק את הטקסט מול כל הכללים, ותקבלו הודעות שגיאה אם ​​משהו לא תואם. לא רק שאתה יכול לתת שם לרשמים, אתה יכול גם לתת שם לסיביות בודדות בתוך אוגרים. שימו לב לסעיף שקובע את פנקס STATUS. איור 7 מראה ממה מורכב מאגר STATUS. (איור 3.9.1 בעמוד 2-544) הסמל C מוגדר ל-0h מכיוון ש-C, או CARRY, הוא סיביות אפס של מילת המצב STATUS. בכל פעם שנצטרך לבדוק את ה-CARRY bit (סיביות 0), נשתמש בתו המוגדר מראש "C". בכל פעם שנרצה לגשת לביט 2, או לביט ZERO, נשתמש בתו "Z" במקום 02h. אתה יכול להגדיר את מבנה הסיביות המלא של אוגר, גם אם לא תשתמש בכולם לאחר מכן. עכשיו ברור לנו איך מתארים אוגרים, ונוכל לעבור לקוד ההפעלה. לפני התחלת קוד ההפעלה, עלינו להגדיר את הביטוי ORG ל-0. זהו מצביע ל-assembler שהקוד שאחרי ביטוי זה מתחיל בכתובת EEPROM אפס. הביטוי "ORG" משמש להקצאת מקטעי קוד לכתובות שונות בגודל ה-EEPROM. ביטוי ORG נוסף מתרחש לפני התווית BEGIN בכתובת 100h, כפי שניתן על ידי ביטוי ORG 100h. קוד ההפעלה חייב להסתיים בהנחיית END, כלומר אין פקודות הפעלה בעקבות הנחיה זו. בהפעלה, ה-PIC16C84 קופץ לכתובת 000h. ההוראה הראשונה שתבוצע על ידי המעבד היא פקודת GOTO BEGIN, שתעביר את השליטה לכתובת 100h ועבודה נוספת תמשיך מכתובת זו. BEGIN הוא שם תווית הניתן לבחירת המשתמש (התוויות חייבות להתחיל תמיד במיקום השורה הראשונה) שה-assembler משתמש בה כפנייה. במהלך הפעולה, האסמבלר קובע את מיקומה של תווית BEGIN וזוכר שאם יתקלו בשם זה שוב, כתובת התווית תוחלף בו. הפקודות CALL ו-GOTO משתמשות בתוויות עבור קישורים בטקסט המקור. כעת נסתכל על הפקודות הבאות המבוצעות על ידי המעבד. הוראת MOVLW INITA טוענת את הערך שהוקצה לשם INITA לתוך אוגר העבודה W. ערך זה מצוין בכותרת ושווה ל-B'00000000', שהוא 00h. התווים B' פירושם שהנתונים ניתנים בפורמט בינארי. אפשר לכתוב 0 (עשרוני) או 0h (הקסדצימלי) באותו מקום ולקבל את אותה תוצאה. ייצוג בינארי נוח יותר לשימוש באותם מקרים שבהם צפויה פעולה עם סיביות ברישום. ההוראה הבאה של MOVWF TRISA טוענת את הערך מאוגר העבודה W לתוך אוגר בקרת התצורה של יציאת TRISA A. הגדרת סיביות מהאוגר הזה ל-0 מציינת שהיציאה המתאימה A bit היא פלט. במקרה שלנו, כל הסיביות של יציאה A נקבעות על ידי פלטים. שימו לב שליציאה A יש רק 5 סיביות, ו-3 הסיביות העליונות של הערך שנכתב ל-TRISA, שיש לו גם 5 סיביות, אינן בשימוש. אם היינו רוצים, למשל, להגדיר את ה-bit הנמוך של יציאה A כקלט, היינו מגדירים את הערך של INITA ל-B'00000001' בסעיף תיאור הרישום. אם במהלך התוכנית אנחנו צריכים להגדיר מחדש את ההקצאה של סיביות יציאה בודדות, למשל, במהלך שידור דו-כיווני, אז הכי נוח לציין את כל מילות התצורה הדרושות בסעיף התיאור, כפי שעשינו עבור INITA ו- INITB. שתי הפקודות הבאות MOVLW INITB ו-MOVWF TRISB מגדירות את התצורה של יציאה B. נוכל לחסוך כסף על ידי אי כתיבת הפקודה MOVLW INITB, כי במקרה שלנו INITB הוא גם 0h. עם זאת, לא עשינו זאת, מכיוון שזה יכול להוביל לשגיאות שקשה למצוא אם נצטרך לשנות את ההקצאה של סיביות כלשהי. במקום לשנות רק ביט אחד ביציאה אחת, ישתנו שני ביטים עם אותו מספר בשתי יציאות. לכן, בעוד שהתוכנית לא הסתיימה, לא רצוי לבצע חיסכון שכזה, אם כי בסופו של דבר, בשלב אופטימיזציית הקוד, ניתן להסיר חזרות כאלה. מה כבר עשינו? 1. עם קווי ה-EQU, אמרנו להרכב באילו שמות סמלים אנחנו הולכים להשתמש. 2. הגדרנו את וקטור האיפוס לכתובת 000h. 3. קבענו את כתובת ההתחלה של הפעלת התוכנית מהתווית BEGIN לכתובת 100h. 4. הגדרנו את כל הביטים של יציאות A ו-B כפלטים. כעת נוכל להכניס את הקוד לדוגמה בין הכותרת לסוף קוד הבסיס שלנו במקום השורה המוערת "הוסף קוד לדוגמה כאן". נחליף את השורה הזו בפקודות אמיתיות, נרכיב את התוכנית שהתקבלה, נכתוב אותה למיקרו-מעגל, נסדר מחדש את המיקרו-מעגל על ​​לוח אב טיפוס עם התקן חיווי ונראה מה קורה. תוכנית ראשונה עבור התוכנית הראשונה, אנו זקוקים לשלוש פקודות בלבד: MOVLW k MOVWF f GOTO k כבר השתמשנו בפקודות אלו בכותרת הקוד הבסיסי שלנו. הוראת MOVLW טוענת בתים מילולית או קבועה לתוך אוגר העבודה W. הוראת ה-MOVWF הבאה מעבירה בייט מאוגר העבודה W לאגר הנתון f. הפקודה GOTO מעבירה את השליטה לכתובת k. התוכנית הבאה כותבת את הערך 01010101 לאוגר העבודה W ולאחר מכן כותבת את תוכנו ליציאה B. לאחר התחלת תוכנית זו, תראה את הזוהר של ארבע נוריות LED. MOVLW B'01010101' ;טען 01010101 לרישום W MOVWF DATAPORT ;כתוב W ליציאה B (DATAPORT) GOTO $ ;לולאה לנצח הוראת ההרכבה "$" פירושה הערך הנוכחי של מונה התוכניות (PC). לכן, הפקודה GOTO $ פירושה קפיצה למקום בו אנו נמצאים כעת. לולאה כזו היא אינסופית, שכן אין דרך (מלבד הפרעה) לצאת ממנה. הפקודה GOTO $ משמשת לעתים קרובות כדי לעצור קוד בזמן איתור באגים. ASSEMBLY נשתמש במאקרו אסמבלר MPALC, מכיוון שהוא מופץ בחופשיות על ידי MICROCHIP, ומכיל את כל התכונות שאנו צריכים. אם אתה מעדיף להשתמש בהרכב אחר, השתמש בתיאור שלו כדי להרכיב את התוכנית שלנו. שורת הפקודה להפעלת מאקרו MPALC היא פשוטה מאוד: MPALC <source_text> [options] כאשר <source_text> הוא שם הקובץ המכיל את טקסט המקור שיש להרכיב, ויכולות להיות הרבה אפשרויות. התיאור המלא של האפשרויות ניתן על ידי האסמבלר על האופציה /? בהתחלה, אנחנו לא צריכים לציין אפשרויות כלשהן. הדבר היחיד שאנחנו עדיין צריכים לעשות הוא לציין את סוג המעבד שעבורו כתובה התוכנית שלנו ואת סוג השגיאות שהאסמבלר צריך לייצר. זה נעשה באמצעות הוראת ה-LIST assembler (איור. 6). ברירת המחדל של סיומת קובץ המקור היא .ASM. יש לציין במפורש הרחבה נוספת. אז, קח את הקובץ EXAMPLE.ASM המכיל את הטקסט המוצג באיור 6, והפעל את האסמבלר: MPALC EXAMPLE כתוצאה מהאסמבלר, נוצרים קבצים עם הסיומות הבאות: * קובץ אובייקט OBJ * קובץ רישום LST * שגיאת ERL ו קובץ אזהרה * קובץ סמל SYM קובץ האובייקט נוצר בפורמט הקסדצימלי ומכיל קוד שיש לכתוב לשבב. קובץ הרישום מכיל את הרשימה המלאה של התוכנית יחד עם קוד האתחול. קובץ השגיאה והאזהרה מתעד את כל השגיאות והאזהרות המתרחשות במהלך תהליך ההרכבה. הם נמצאים גם בקובץ הרישום. טבלת התוויות הסמליות, שנכתבת לקובץ סימבולי, מיועדת לעבודה נוספת עם ה-debugger. לאחר עיבוד התוכנית שלנו, האסמבלר היה צריך להוציא את ההודעה "לא נמצאו שגיאות על ידי ההרכב", כלומר לא נמצאו שגיאות. קובץ השגיאה לא היה צריך להיווצר. אם האסמבלר שלך יצר הודעות שגיאה כלשהן, או שהקבצים EXAMPLE.OBJ, EXAMPLE.LST ו-EXAMPLE.SYM לא נוצרו, בדוק שוב אם עשית הכל נכון. תכנות יש לך כעת קובץ אובייקט, EXAMPLE.OBJ, אותו יש לכתוב לשבב. ההקלטה מתבצעת בעזרת המתכנת ותוכנית PROPIC. שורת הפקודה להפעלת תוכנת PROPIC דומה לשורת הפעלת ה-Assembler: PROPIC <object_file> [options] כאשר <object_file> הוא שם קובץ האובייקט שנוצר על ידי ה-Assembler, והאפשרויות קובעות את אופן הכתיבה ל- את השבב. רשימת האפשרויות ניתנת על ידי האפשרות /? כמו במקרה של assembler, בהתחלה אנחנו לא צריכים לציין אפשרויות כלשהן. קח את המתכנת, חבר את הכבל שלו למחבר יציאת המדפסת (ליציאת המדפסת הראשונה אם למכשיר שלך יש 2 או 3 יציאות מדפסת).

מה זה PIC? מה זה PIC?

קח ספק כוח 18...36 V DC או AC המסוגל לספק עד 100 mA וחבר אותו למתכנת. הכן את שבב PIC16C84, אך אל תכניס אותו עדיין לשקע המתכנת. עכשיו אתה יכול להפעיל את המתכנת:

יש להכניס כאן דוגמה תכניתית { על אופן פעולת התוכנית של המתכנת. } עכשיו יש לך שבב מתוכנת ואתה יכול לראות איך הוא יעבוד. בדיקה

קח לוח לחם והרכיב עליו את המעגל שמוצג באיור 5. אין חלקים קריטיים במעגל הזה. לכל הנגדים יכולה להיות סטייה מהנומינלי + -30%, נוריות - כל אחד עם זרם נקוב של לא יותר מ-10 mA. כדי להתקין את שבב PIC16C84, השתמש בשקע. כדי להפעיל את המעגל שלנו, אתה יכול להשתמש באותו ספק כוח שבו השתמשת בעת תכנות המיקרו-מעגל. ניתן להשתמש גם בספק מעבדה 5 V. במקרה זה אין צורך במייצב KR142EH5A, גשר דיודה וקבלים אלקטרוליטי, ומתח 5 V מסופק לנקודה 2 בתרשים.

לאחר הרכבת המעגל יש לבדוק היטב שהכל מורכב נכון, הלדים מותקנים בקוטביות הנכונה, הכוח למיקרו-מעגל מגיע לפינים הנכונים ובקוטביות הנכונה. קח את השבב המתוכנת, הכנס אותו לשקע בלוח הלחם והפעל את החשמל. 4 נוריות לד אמורות להידלק (אחרי אחת). התוכנית הראשונה שלך עובדת! ערכת פקודות תמונה

כעת, לאחר שלמדת כיצד להרכיב תוכנית, לכתוב אותה לשבב ולבדוק אותה על לוח לחם, נוכל לעבור לתיאור כל סט ההוראות עבור מיקרו-בקרים ממשפחת PIC. נמשיך להתמקד ב-PIC16C84, למרות שכמעט כל מה שנדבר עליו ישים למיקרו-בקרים אחרים ממשפחת ה-PIC. במהלך התיאור, נכין תוכניות קצרות על מנת להבין טוב יותר כיצד פועלות פקודות מסוימות. אתה יכול לחבר את התוכנות האלה לקוד הבסיס, להרכיב אותן, לשים אותן על שבב ולחבר את השבב ללוח לחם ולראות איך זה עובד. אם הכל ברור לך לחלוטין בפסקה הבאה, אתה לא יכול לנסות את זה, אלא לעבור ישר לפסקה הבאה. לא

בואו נתחיל את התיאור שלנו עם הפקודה NOP. קשה לראות את הפלט של הפקודה הזו כי היא לא עושה כלום. הוראה זו משמשת בדרך כלל בלולאות השהיית זמן או כדי לכוונן עדין את זמן הביצוע של חלק מסוים בתוכנית. CLRW

פקודה זו מנקה את אוגר העבודה W. בואו נוסיף שורה אחת לדוגמה שלנו ונראה שכל הנוריות נדלקות.

MOVLW B'01010101' ;טען 01010101 לרישום W

CLRW ; רישום נקי W

MOVWF DATAPORT ;כתוב W ליציאה B (DATAPORT)

GOTO $ ;לולאה לנצח CLRF f

CLRF עושה עבור כל אוגר את מה ש-CLRW עושה עבור אוגר עובד W. הפקודה הבאה תגדיר את היציאה B ל-0h.

CLRF DATAPORT ;נקה יציאה B (DATAPORT) SUBWF f,d ADDWF f,d

הורידו את אוגר העבודה W מכל אוגר f. פקודה זו מגדירה גם את הדגלים CARRY, DIGIT CARRY ו-0 במאגר STATUS. לאחר ביצוע הפקודה, תוכל לבדוק את הסימנים הללו ולקבוע אם התוצאה היא אפס, חיובית או שלילית. התו d אחרי הפסיק פירושו הכתובת שבה תוצב התוצאה של הפקודה. אם d=1, אז התוצאה ממוקמת באוגר העבודה W, ואם d=XNUMX, אז התוצאה נכתבת לתוך האוגר f המשמש בפקודה.

בדוגמה שלנו, הערך 0FFh נטען לתוך האוגר SCRATCH, והערך 01h נטען לתוך האוגר W. לאחר מכן מבוצעת הפקודה SUBWF והתוצאה מוצגת על נוריות ה-LED.

MOVLW 0FFh ;טען 0FFh לרישום W

MOVWF SCRATCH; טען את התוכן של W לתוך אוגר SCRATCH

MOVLW 01h ;טען 01h לרישום W

SUBWF SCRATCH,0 ; נוריות החיסור צריכות להציג 11111110 כאשר 1 כבוי ו-0 דולק.

הפקודה ADDWF פועלת בדיוק באותו אופן, מוסיפה את האוגר העובד W לכל אוגר f ומגדירה את אותם הדגלים. הדוגמה הבאה מדגימה כיצד פועלת הפקודה ADDWF.

MOVLW 0h ;טען 0 לרישום W

MOVWF SCRATCH; טען את התוכן של W לתוך אוגר SCRATCH

MOVLW 1h ;טען 01h לרישום W

ADDWF SCRATCH,0 ;do נוריות התוספת אמורות להציג 00000001.

שימו לב שיש "0" לפני הערך FFh בדוגמה של חיסור. הסמל "0" עבור assembler אומר שזהו מספר, לא תווית. אם לא היה סמל 0, אז האסמבלר היה מתחיל לחפש תווית בשם FFh, שאינה קיימת בתוכנית זו ובהתאם לכך, הייתה מתרחשת שגיאה. התו "h" אחרי הערך 0FF פירושו שהערך מצוין בפורמט הקסדצימלי. SUBLW k ADDLW k

שתי הפקודות הללו פועלות בדיוק באותו אופן כפי שתואר לעיל, פרט לכך שהפעולה מתבצעת בין אוגר העבודה W לבין קבוע הבתים שצוין בפקודה. הפקודה SUBLW מפחיתה את אוגר העבודה W מהקבוע k, והפקודה ADDLW מוסיפה את אוגר העבודה W לקבוע k. פקודות אלו גם קובעות את הדגלים CARRY, DIGIT CARRY ו-5. התוצאה של הפקודה ממוקמת באוגר העבודה W. הדוגמה הבאה תפחית את SCRATCH ב-XNUMX.

MOVLW 0FFh ;טען 0FFh לרישום W

MOVWF SCRATCH; טען את התוכן של W לתוך אוגר SCRATCH

SUBLW 05h ; הורידו 5 מהפנקס העובד

MOVWF SCRATCH ;טען תוכן חדש של נוריות SCRATCH אמור להציג 11111010. DECF f,d INCF f,d

פקודת DECF מורידה את האוגר הנתון ב-1, ו-INCF מגדילה את האוגר הנתון ב-1. ניתן למקם את התוצאה בחזרה באוגר הנתון (עבור d=1) או באוגר העבודה W (עבור d=0). כתוצאה מביצוע פקודות אלו, ניתן להגדיר את סימן האפס במאגר STATUS. הנה דוגמה לשימוש בפקודות אלה:

MOVLW 0FFh ;טען 0FFh לרישום W

MOVWF SCRATCH; טען את התוכן של W לתוך אוגר SCRATCH

DECF SCRATCH,0 ;הקטין את SCRATCH ב-1

דוגמה זו תגדיל את SCRATCH מ-0 ל-1.

CLRF SCRATCH ;SCRATCH ברור

INCF SCRATCH,0 ;הגדל את SCRATCH ב-1 IORWF f,d ANDWF f,d XORWF f,d

שלוש הפקודות הללו מבצעות פעולות לוגיות OR, AND ו-EXCLUSIVE OR. פעולת התוספת OR הלוגית משמשת לרוב כדי להגדיר ביטים בודדים ברגיסטרים. סיביות אלו מאופסות לאחר מכן ע"י פעולת AND לוגית. כאשר פעולת EXCLUSIVE OR מבוצעת על ביטים זהים, התוצאה היא 0. לכן, פעולת EXCLUSIVE OR משמשת לעתים קרובות כדי לבדוק את המצב (מוגדר או נקי) של ביטים מסוימים ב- הירשם. ההליך הבא יגדיר סיביות 1 ביציאה B באמצעות הפקודה IORWF:

CLRF DATAPORT; נקה יציאה B

MOVLW B'00000010'; הגדר מסכה ברישום W

IORWF DATAPORT,1; הגדר ביטים ביציאה B על ידי מסכה W

GOTO $ ;loop forever הנוריות אמורות להראות 00000010. כעת נקה 2 ביטים עם הוראת ANDWF:

MOVLW B'11111111' ;טען 0FFh ל-W register

MOVWF DATAPORT; הגדר את כל הביטים ביציאה B

MOVLW B'00000101'; הגדר מסכה ברישום W

ANDWF DATAPORT,1; חלקים נקיים ביציאה B על ידי מסכה W

GOTO $ ;loop forever הנוריות אמורות להראות 00000101.

נניח שהשתמשנו ברישום SCRATCH ורוצים לדעת אם הוא שווה ל-04h. זה זמן טוב להשתמש בפקודה XORWF:

MOVLW 04h ;טען 04h לרישום W

MOVWF SCRATCH ;טעינת אוגר W ב-SCRATCH

XORWF SCRATCH,0; בדוק אם W ו-SCRATCH שווים מכיוון ש-SCRATCH ו-W שווים, התוצאה של פעולת XORWF היא אפס (כל הנוריות דולקות). האוגר STATUS יגדיר את סיביות האפס, שאותו תוכל התוכנית האמיתית לבדוק ולעבד. IORLW k ANDLW k XORLW k

שלוש הפקודות הללו מבצעות את אותן פעולות כמו המקבילות שלהן שתוארו לעיל, פרט לכך שהפעולה מתבצעת בין אוגר העבודה W לבין המסכה שצוינה בפקודה. התוצאה של ביצוע הפקודה ממוקמת באוגר העבודה W. לדוגמה:

MOVLW 0FFh ;טען 0FFh לרישום W

ANDLW 040h; השאר נוריות סיביות 6 יציגו 01000000.

MOVLW 10h ;טען 10h לרישום W

IORLW 09h ; סט ביטים 0 ו-3 נוריות LED יראו 00011001.

MOVLW B'00100000' ;טען 40 שעות לרישום W

XORLW B'11111111'; הפוך נוריות W מציגות 11011111. MOVF f,d

פקודה זו משמשת בעיקר להעברת אוגר לאוגר העבודה W (d=0). אם תגדיר d=1, אז הפקודה הזו תטען את הרגיסטר לעצמה, אבל סיביות ה- ZERO באוגר STATUS תוגדר בהתאם לתוכן האוגר. לדוגמה, אנו רוצים לטעון לתוך אוגר SCRATCH 0Fh, ולאחר מכן לטעון את אוגר SCRATCH לתוך אוגר העבודה W.

MOVLW 0Fh ;טען 0Fh לתוך פנקס העבודה W

MOVWF SCRATCH ;טעינת אוגר W ב-SCRATCH

CLRW; נקה את W

MOVF SCRATCH,0 ;טען SCRATCH ל-W register

MOVF SCRATCH,1 ביט האפס של האוגר STATUS יוגדר אם התנאי מתקיים (SCRATCH = 0h). COMF f,d

פקודה זו הופכת כל אוגר נתון. כאשר d=0, התוצאה מוזנת לאוגר העבודה W, וכאשר d=1, התוכן של האוגר שצוין מתהפך. כדוגמה, בואו נהפוך את הערך 01010101:

MOVLW B'01010101' ;טען 01010101 לרישום W

MOVWF SCRATCH ;טעינת אוגר W ב-SCRATCH

COMF SCRATCH,0 ;היפוך נוריות SCRATCH יראו 10101010. DECFSZ f,d INCFSZ f,d

ככל שתצבור קצת ניסיון עם PIC assembler, תשתמש בפקודות אלה לעתים קרובות מאוד. עם d=1, הוראת DECFSZ מורידה באחד, ו-INCFZ מגדילה את האוגר שצוין באחד ומדלג על ההוראה הבאה אם ​​האוגר הופך לאפס. עם d=0, התוצאה נכתבת ל-W register והפקודה הבאה מדלגת אם אוגר העבודה W הופך לאפס. פקודות אלו משמשות ליצירת עיכובי זמן, מונים, לולאות וכו'. הנה דוגמה טיפוסית לשימוש בלולאה: START

MOVLW 0FFh ;טען את FFh לרישום W

MOVWF SCRATCH ;טען את האוגר W לתוך SCRATCH LOOP

DECFSZ SCRATCH,1 ;הקטין את SCRATCH ב-1

GOTO LOOP ;ולחזור אחורה עד = 0

MOVF DIGIT; טען את ה-DIGIT ב-W

MOVWF DATAPORT; פלט לנוריות

DECF DIGIT,1 ;הקטין את רישום DIGIT ב-1

GOTO START ;עבור להתחלה כתוצאה מכך, הנוריות יהבהבו בקצבים שונים. הנורית מסדר נמוך תהבהב לרוב, והנורית מסדר גבוה תהבהב הכי פחות. עם תדר שעון של 4 מגה-הרץ, תדירות ההבהוב של נורית ה-LED מהסדר הגבוה ביותר יהיה כ-8 הרץ, וכל אחד הבא יהבהב פי שניים. עכשיו בואו נבין איך עשינו את זה. הפקודה DECFSZ כאן עובדת בלולאת השהייה המורכבת משתי פקודות - DECFSZ ו-GOTO LOOP. מכיוון שטענו מראש את האוגר SCRATCH עם 0FFh, הלולאה הזו תתבצע 255 פעמים עד ש-SCRATCH יהפוך לאפס. עם תדר שעון של 4 מגה-הרץ, זה נותן השהייה של 1 µs/הוראה * 2 הוראות * 255 = 510 µs. ב-DIGIT אוגר, לא כתבנו כלום לפני כן, אז יכול להיות כל ערך שמוצג על הנוריות במעבר הראשון. אז אוגר DIGIT מופחת ב-1 והלולאה חוזרת מההתחלה. כתוצאה מכך, אוגר DIGIT חוזר על כל הערכים ב-256 מחזורים, כלומר. למשך כ-130 אלפיות השנייה.

ניתן להשתמש באותו קוד עם הוראת INCFSZ על ידי שינוי הערך הנטען באוגר SCRATCH מ-FFh ל-0h. הנוריות יהבהבו באותו אופן אם פקודת DECF תוחלף בפקודת INCF. SWAF f,d

פקודה זו מחליפה נישנושים בכל אוגר. לגבי פקודות אחרות, כאשר d=0 התוצאה נכתבת לאוגר העבודה W, וכאשר d=1 נשאר באוגר. הנה דוגמה פשוטה לשימוש בפקודה זו:

MOVLW B'00001111' ;טען 0Fh לתוך האוגר W

MOVWF SCRATCH ;טעינת אוגר W ב-SCRATCH

SWAPF SCRATCH,0 ;Swap nibbles LEDs יציגו 11110000. RRF f,d RLF f,d

ישנן שתי הוראות העברה ב-PIC assembler - העברה ימינה דרך סיבית ה-CARRY של כל אוגר RRF, והזזה שמאלה דרך סיבית ה-CARRY של כל אוגר RRF. לגבי פקודות אחרות, כאשר d=0 תוצאת ההסטה נכתבת ל-W register, וכאשר d=1 נשארת באוגר. הוראות Shift משמשות לביצוע פעולות כפל וחילוק, להעברת נתונים סדרתית ולמטרות אחרות. בכל המקרים, הסיבית המוזזת מתוך האוגר של 8 סיביות נכתבת לסיבית ה-CARRY באוגר STATUS, והסיבית ה-CARRY נכתבת לקצה השני של האוגר, בהתאם לכיוון ההיסט. העברה שמאלה כותבת RLF CARRY לסיבית הכי פחות משמעותית של האוגר, והיסט ימינה כותבת RRF CARRY לסיבית המשמעותית ביותר של האוגר.

CLRF STATUS ; רישום STATUS נקה

MOVLW 0FFh ;טען 0FFh לרישום W

MOVWF SCRATCH ;טעינת אוגר W ב-SCRATCH

RRF SCRATCH,0 ;הזז ימינה הנוריות אמורות להראות 01111111 מכיוון ש-CARRY נטען בסיבית הגבוהה. עכשיו נעבור שמאלה:

CLRF STATUS ; רישום STATUS נקה

MOVLW 0FFH ;טען 0FFh לרישום W

MOVWF SCRATCH ;טעינת אוגר W ב-SCRATCH

RLF SCRATCH,1 ;הזזה שמאלה צריכות להראות 11111110. BCF f,b BSF f,b

הפקודות Clear BCF Bit ו- Set BSF Bit משמשות לפעולה על ביטים בודדים באוגרים. פרמטר b פירושו מספר הסיביות שאיתו מתבצעת הפעולה, והוא יכול לקבל ערכים מ-0 עד 7. בואו ננסה להדליק את הנורית באמצעות פקודת BCF:

MOVLW 0FFh ;טען 0FFh לרישום W

MOVWF DATAPORT ;כיבוי נוריות

BCF DATAPORT,7; נקה סיביות 7 ביציאה B

GOTO $ ;loop forever זה ידליק את ה-LED המקביל לביט 7. נזכיר שעשינו את אותו הדבר עם השימוש במסכה ובפקודה ANDWF. ההבדל הוא שהוראות ANDWF ו- IORWF מחייבות את המסכה להיות בנויה מראש ומאוחסנת ברגיסטר כלשהו, ​​אך במקביל הן מסוגלות להגדיר או לנקות מספר ביטים בו זמנית. הוראות BCF ו-BSF פועלות על סיביות אחת בלבד. בנוסף, הוראות ה-BCF וה-BSF אינן משנות את פנקס ה-STATUS, ולכן נעשה בהן שימוש לעיתים קרובות במקרים בהם לא נדרשת בדיקה לאחר מכן של פנקס הסטטוסים. BTFSC f,b BTFSS f,b

הוראות קפיצה מותנות BTFSC ו-BTFSS בודקים את המצב של ביט נתון בכל אוגר ומדלגים על ההוראה הבאה בהתאם לתוצאה. הפקודה BTFSC מדלגת על הפקודה אם הביט שצוין ברור, ועל הפקודה BTFSS אם היא מוגדרת. הנה דוגמה פשוטה:

MOVLW 0FFh ;טען 0FFh לרישום W

MOVWF DATAPORT ;כיבוי נוריות

MOVLW B'00000001' ;טען 01 שעות לרישום W

MOVWF SCRATCH ;טען את האוגר W לתוך SCRATCH LOOP

BTFSS CNTRLPORT,0 ;בדוק סיביות 0 ב-CNTRLPORT

GOTO LOOP ; המתן עד שהביט 0 יוגדר

BCF DATAPORT,7; הפעל LED

GOTO $ ;loop forever דוגמה זו בודקת את סיביות 0 של יציאה A (פין שבב 17) ואם פין זה מוגדר גבוה, מדליקה את ה-LED. נסה להחליף BTFSS ב-BTFSC בדוגמה זו. הנורית תידלק כאשר סיביות 0 של יציאה A יורדת.

קודם לכן הזכרנו את האפשרות לבדוק את סיביות הסטטוס במאגר STATUS. זה נעשה גם עם הפקודות BTFSS ו-BTFSC:

;בדוק CARRY bit

BTFSS STATUS,C ; אם C מוגדר, דלג על GOTO

GOTO WHERE_EVER ; ביט האפס נבדק באותו אופן:

;בדוק את bit XNUMX

BTFSS STATUS,Z ; אם Z מוגדר, דלג על GOTO

GOTO WHERE_EVER ; זה בטוח לומר שאתה תשתמש בדוגמאות האלה לעתים קרובות מאוד. התקשר ל-k חזור

שתי הפקודות הללו מיועדות לעבודה עם תתי שגרות. הפקודה CALL משמשת לקפיצה אל תת-השגרה בכתובת המצוינת בפקודה, והפקודה RETURN משמשת לחזרה מתת-השגרה. שתי הפקודות מבוצעות ב-2 מחזורים. הכתובת שבה אותרה פקודת ה-CALL מאוחסנת ברישומים מאורגנים במיוחד הנקראים המחסנית. אוגרים אלה אינם נגישים והם משמשים רק לשיחות משנה והחזרות. עומק הערימה, כלומר. מספר הרשמים המיוחדים הוא 8. לכן, לא ניתן לבצע יותר מ-8 שיחות תת-שגרה מקוננות מהתוכנית הראשית. לאחר שתת-השגרה חוזרת, הביצוע ממשיך עם ההוראה הבאה לאחר ה-CALL. האוגר W ו-STATUS אינם נשמרים כאשר קוראים לשגרת משנה, כך שבמידת הצורך, ניתן לאחסן אותם במיקומי זיכרון נפרדים. הנה דוגמה פשוטה לשימוש בתתי שגרה: START

BSF DATAPORT,7; כבה את LED

הפעלת שיחות ;תת שגרת שיחות

GOTO START ;עבור להתחלה של TURNON

BCF DATAPORT,7; הפעל LED

RETURN ; חזרה מתת-השגרה כתוצאה מכך, הנורית תהבהב בתדר של כ-150 קילו-הרץ. RETLW ל-RETFIE

ישנן שתי פקודות נוספות להחזרה מתתי שגרות. הפקודה RETLW מחזירה באוגר העבודה W את הקבוע שצוין בפקודה זו, והפקודה RETFIE מאפשרת פסיקות. הפקודה RETLW משמשת לעתים קרובות ליצירת טבלאות ערכים. תן לאוגר העבודה W להכיל היסט מתחילת הטבלה. אז אתה יכול לקבל את האלמנט הרצוי על ידי ההליך הבא:

MOVLW 02h ;סט היסט

CALL SHOWSYM ;תת שגרת שיחה

MOVWF DATAPORT; רכיב טבלת פלט ליציאה B

GOTO $ ;loop forever SHOWSYM

ADDWF PC; חישוב היסט טבלה

RETLW 0AAh ;רכיב ראשון בטבלה

RETLW 0BBh ;אלמנט שני של הטבלה

RETLW 0CCh ; נוריות כניסת טבלה שלישית צריכות להציג 3. פקודות מיוחדות

נותר לנו להזכיר שתי פקודות מיוחדות - CLRWDT ו-SLEEP. הפקודה CLRWDT נועדה לאפס את טיימר כלב השמירה, שמטרתו כבר דנו. הוראה זו חייבת להיות נוכחת בחלקים כאלה של התוכנית כך שזמן הביצוע של התוכנית בין שתי הוראות CLRWDT סמוכות לא יעלה על הטיימר לכלב השמירה. הפקודה SLEEP נועדה להכניס את המעבד למצב צריכת חשמל נמוכה. לאחר ביצוע פקודה זו, מחולל השעון של המעבד כבוי וניתן להחזיר את המעבד למצב הפעלה על ידי כניסת האיפוס, או על ידי טיימר כלב השמירה, או על ידי הפרעה. סיכום

מאמר זה אינו מתיימר להיות תיאור מלא של היכולות של המיקרו-בקר PIC16C84. כדי לעשות זאת, עליך לקרוא את התיאור הטכני שלו. כמו כן, להבין את כל האפשרויות של ה-MPALC assembler, פקודות מאקרו, אפשרויות וכו'. זה יהיה שימושי עבורך לקרוא את המדריך שלו. כדי להגדיר נכון את כל האפשרויות הדרושות, עליך לקרוא את ההוראות לשימוש במתכנת. דוגמאות יישומים של מיקרו-בקרים יתנו לך בסיס איתן לפרויקטים עצמאיים. אם יש לך שאלות, תוכל ליצור קשר עם מרכז התמיכה האזורי עבור מוצרי MICROCHIP בכתובת הבאה: מוסקבה, Rubtsovskaya nab. משרד 3 502, טל'. (095)-263-9930 כאן הם תמיד יהיו מוכנים לענות על כל השאלות שלך. אתה יכול גם לקבל גרסאות חדשות של תוכנה, דוגמאות יישומים, מידע עיון ב-BBS האזורי על ידי טלפון (095)-162-8405

AD מיקרו BBS

פרסום: N. Bolshakov, rf.atnn.ru

ראה מאמרים אחרים סעיף מיקרו-בקרים.

תקרא ותכתוב שימושי הערות על מאמר זה.

<< חזרה

חדשות אחרונות של מדע וטכנולוגיה, אלקטרוניקה חדשה:

עור מלאכותי לחיקוי מגע 15.04.2024

בעולם טכנולוגי מודרני בו המרחק הופך להיות נפוץ יותר ויותר, חשוב לשמור על קשר ותחושת קרבה. ההתפתחויות האחרונות בעור מלאכותי על ידי מדענים גרמנים מאוניברסיטת Saarland מייצגים עידן חדש באינטראקציות וירטואליות. חוקרים גרמנים מאוניברסיטת Saarland פיתחו סרטים דקים במיוחד שיכולים להעביר את תחושת המגע למרחקים. טכנולוגיה חדשנית זו מספקת הזדמנויות חדשות לתקשורת וירטואלית, במיוחד עבור אלה שמוצאים את עצמם רחוקים מיקיריהם. הסרטים הדקים במיוחד שפיתחו החוקרים, בעובי של 50 מיקרומטר בלבד, ניתנים לשילוב בטקסטיל וללבוש כמו עור שני. סרטים אלה פועלים כחיישנים המזהים אותות מישוש מאמא או אבא, וכמפעילים המשדרים את התנועות הללו לתינוק. הורים הנוגעים בבד מפעילים חיישנים המגיבים ללחץ ומעוותים את הסרט הדק במיוחד. זֶה ... >>

פסולת חתולים של Petgugu Global 15.04.2024

טיפול בחיות מחמד יכול להיות לעתים קרובות אתגר, במיוחד כשמדובר בשמירה על ניקיון הבית שלך. הוצג פתרון מעניין חדש של הסטארטאפ Petgugu Global, שיקל על בעלי החתולים ויעזור להם לשמור על ביתם נקי ומסודר בצורה מושלמת. הסטארט-אפ Petgugu Global חשפה אסלת חתולים ייחודית שיכולה לשטוף צואה אוטומטית, ולשמור על הבית שלכם נקי ורענן. מכשיר חדשני זה מצויד בחיישנים חכמים שונים המנטרים את פעילות האסלה של חיית המחמד שלכם ופועלים לניקוי אוטומטי לאחר השימוש. המכשיר מתחבר למערכת הביוב ומבטיח פינוי פסולת יעיל ללא צורך בהתערבות של הבעלים. בנוסף, לאסלה קיבולת אחסון גדולה הניתנת לשטיפה, מה שהופך אותה לאידיאלית עבור משקי בית מרובי חתולים. קערת המלטה לחתולים של Petgugu מיועדת לשימוש עם המלטה מסיסת במים ומציעה מגוון זרמים נוספים ... >>

האטרקטיביות של גברים אכפתיים 14.04.2024

הסטריאוטיפ שנשים מעדיפות "בנים רעים" כבר מזמן נפוץ. עם זאת, מחקר עדכני שנערך על ידי מדענים בריטים מאוניברסיטת מונאש מציע נקודת מבט חדשה בנושא זה. הם בדקו כיצד נשים הגיבו לאחריות הרגשית של גברים ולנכונותם לעזור לאחרים. ממצאי המחקר עשויים לשנות את ההבנה שלנו לגבי מה הופך גברים לאטרקטיביים לנשים. מחקר שנערך על ידי מדענים מאוניברסיטת מונאש מוביל לממצאים חדשים לגבי האטרקטיביות של גברים לנשים. בניסוי הראו לנשים תצלומים של גברים עם סיפורים קצרים על התנהגותם במצבים שונים, כולל תגובתם למפגש עם חסר בית. חלק מהגברים התעלמו מההומלס, בעוד שאחרים עזרו לו, כמו לקנות לו אוכל. מחקר מצא שגברים שהפגינו אמפתיה וטוב לב היו מושכים יותר לנשים בהשוואה לגברים שהפגינו אמפתיה וטוב לב. ... >>

חדשות אקראיות מהארכיון

קודי QR בלתי נראים 06.02.2022

קבוצת מדענים מהמכון הטכנולוגי של מסצ'וסטס (MIT), יחד עם מומחי פייסבוק, פיתחו מערכת מיוחדת לסימון עצמים - קודי QR אינם גלויים לעין בלתי מזוינת. הטכנולוגיה נקראת InfraredTags.

InfraredTags יוצר ברקודים וקודי QR הנראים עם קרינת אינפרא אדום.

סימנים מיושמים בחומר פלסטי מיוחד למדפסות תלת מימד בשתי דרכים. הדרך הראשונה להחיל סימן היא לשנות את עובי הפלסטיק בעת ההדפסה. הדרך השנייה היא שימוש בפלסטיק שקוף ואטום בתחום האינפרא אדום.

האפשרות השנייה עדיפה, מכיוון ששתי אפשרויות הפלסטיק מנוגדות יותר וקלות יותר לקריאה. כדי לקרוא את התגים החדשים, אתה צריך מצלמת אינפרא אדום זולה.

בעתיד ניתן להשתמש בתגים כאלה למטרות שונות - למשל לניהול תשתית של בית "חכם" מהטלפון או בקניית סחורה בחנויות.

עוד חדשות מעניינות:

▪ מחשבים ניידים עם מערכת הפעלה מותקנת מראש ישוחררו פחות

▪ סרט גרפן יגן בצורה מהימנה מפני קורוזיה

▪ מיניבוס מרצדס בנץ קונספט EQV

▪ גלריה לאמנות תת קרקעית

▪ קבל-על עשוי מלט ופיח

עדכון חדשות של מדע וטכנולוגיה, אלקטרוניקה חדשה

 

חומרים מעניינים של הספרייה הטכנית החופשית:

▪ קטע אתר מייצבי מתח. בחירת מאמרים

▪ מאמר עיוות צבע בעת צילום וידאו. וידאו ארט

▪ מאמר מדוע מבקרים זורקים תפוחי אדמה על קברו של המלך הפרוסי? תשובה מפורטת

▪ כתבה מתדלק בתחנת תדלוק. הוראה סטנדרטית בנושא הגנת העבודה

▪ מאמר דבק ומשחה לרצועות הנעה. מתכונים וטיפים פשוטים

▪ מאמר ראה את הבלתי נראה. ניסוי פיזי

השאר את תגובתך למאמר זה:

שם:


אימייל (אופציונלי):


להגיב:





כל השפות של דף זה

בית | הספרייה | מאמרים | <font><font>מפת אתר</font></font> | ביקורות על האתר

www.diagram.com.ua

www.diagram.com.ua
2000-2024