תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
ברוך הבא! מונה עשיית שניות: שימוש ב- CCStudio 8 ו- MSP430F5529 לפרויקט.
שפת C לקידוד בקר המיקרו. יישום מצבי צריכת חשמל נמוכה, טיימרים והפסקות. הפלט מוצג באמצעות 7 פלחים.
שלב 1: תובנה
בואו נתחיל!
אתחל את טיימר כלב השמירה למצב כבוי באמצעות הסיסמה הנדרשת עבור טיימר כלב השמירה (זה עוזר לשמור על אינסוף לולאות, ולשמור על מעבד בטוח).
#לִכלוֹל
/** * main.c */
int main (void)
{
WDTCTL = WDTPW | WDTHOLD; // עצור טיימר כלב השמירה
החזר 0;
}
שלב 2: אתחול יציאות
{
P3DIR = 0xFF; // P3DIR = 0x00;
P6DIR = 0xFF;
P4DIR | = 0x00;
P4REN | = 0xFF;
P4OUT | = 0xFF;
}
P3DIR | = 0x00 אומר לנו שכל PORT-3 מאתחל בכדי לקבל תשומות.
P3DIR | = 0xFF אומר לנו שכל ה- PORT-3 מאתחל ונותן תפוקות.
P3DIR | = 0x01 רק סיכה P3.0 מאתחלת לפלט ב- PORT-3. זאת בעקבות מיפוי של יציאה הקסדצימלי.
P4REN | = 0xFF, זה מצביע על כך שהסיכות של PORT-4 מפעילות את נגדי המשיכה למעלה/למטה.
כדי לבחור אותם בין Pull UP או Pull DOWN, נעשה שימוש בהוראה P $ OUT | = 0xFF.
אם משתמשים ב- 0xFF הם מוגדרים כנגדי Pull UP ואם 0x00 הם מוגדרים כ- Pull DOWN.
שלב 3: הספק נמוך במיוחד
MSP430F5529 מאפשר לנו להפחית את אובדן הכוח מהמעבד. זה שימושי ביישומים עצמאיים.
זה דורש הצהרה של כל הסיכה או היציאות לפלט.
{
P7DIR | = 0xFF;
P6DIR | = 0xFF;
P5DIR | = 0xFF;
P4DIR | = 0xFF;
P3DIR | = 0xFF;
P2DIR | = 0xFF;
P1DIR | = 0xFF;
}
שלב 4: טיימר
שימוש בטיימר לדור עיכוב של שנייה אחת. זה משתמש ב- SMCLK של 1MHz, גם טיימר פועל במצב צריכת חשמל נמוכה (בשלב הבא, לאחר ספירתו הוא הופסק מ- LPM). תהליך זה חוסך כוח ועומס על המעבד
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
הערכים הם 999, כיוון שנדרש עוד ספירה אחת כדי לחזור לאפס ברשם הטיימר.
שלב 5: מצב צריכת חשמל נמוכה
_BIS_SR (LPM0_bits+GIE);
זה מאפשר הפעלה כללית (GIE), ומעמיד את המעבד ל- LPM0, שם MCLK התומך במעבד כבוי והפעלת SMCLK ו- ACLK ששומרת על הטיימר פועל. כדי שנוכל לראות שהמעבד כבוי, שם על ידי חיסכון בחשמל.
שלב 6: טיימר ISR
וקטור #פרגמה = TIMER0_A0_VECTOR
_ הפרע חלל טיימר_א (חלל)
{
z ++;
אם (z> עיכוב)
{
P3OUT = קוד [x];
P6OUT = code1 [y];
x ++;
אם (x == 10)
{
x = 0;
y ++;
}
אם (y == 6)
y = 0;
z = 0;
}
}
וקטור פרגמה מיועד לייצוג ISR ב- C embd.
קוד [x] וקוד 1 [y] הם המערכים המכילים ערכי פלט עבור שני שבעת הקטעים, להצגת מונה של 60 שניות.
שלב 7: הפסקת חומרה
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
כאן P2.1 מוכרז כהפרעה לחומרה, אם לוחצים על הכפתור, המונה מתאפס לערך.
תוכנית שאר כתובה בתוך ה- ISR של הפרעה זו.
שלב 8: לחצן איפוס/ איפוס
וקטור #פרגמה = PORT2_VECTOR
_ הפרע יציאת חלל_2 (חלל)
{
P2IFG & = ~ BIT1;
x = 0; y = 0;
P3OUT = קוד [x];
P6OUT = code1 [y];
v ++;
עבור (i = 0; i
{
P1OUT | = BIT0; //P1.0 = החלפה
_ עיכוב_ אופניים (1048576);
P1OUT & = ~ BIT0; // P1.0 = החלפה
_ עיכוב_ אופניים (1048576);
}
ISR זה מאפס את המונה, ושומר על כמה פעמים לחצו על השאר.
(להלן התצוגה נעשית באמצעות מתג לד, ניתן להשתמש גם במערך וטיימר אחר, כדי להציג את הערכים הללו כפלט ב -7 קטע).
שלב 9: קוד
#לִכלוֹל
#הגדר עיכוב 1000
קוד char = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};
char code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};
נדיף בלתי חתום int x = 0, y = 0, z = 0;
נדיף בלתי חתום int v = 0, i = 0;
void main ()
{
WDTCTL = WDTPW | WDTHOLD; // עצור טיימר כלב השמירה
P7DIR | = 0xFF;
P7OUT | = 0x00;
P8DIR | = 0xFF;
P8OUT | = 0x00;
P4DIR | = 0xFF;
P4OUT | = 0x00;
P5DIR | = 0xFF;
P5OUT | = 0x00;
P1DIR = 0xFF;
P3DIR = 0xFF;
P6DIR = 0xFF;
P2DIR = 0x00;
P2REN = 0x02;
P2OUT = 0x02;
P2IE | = BIT1;
P2IES | = BIT1;
P2IFG & = ~ BIT1;
TA0CCTL0 = CCIE;
TA0CCR0 = 999;
TA0CTL = TASSEL_2 + MC_1;
_BIS_SR (LPM0_bits+GIE);
}
// שגרת שירות טיימר A0
וקטור #פרגמה = TIMER0_A0_VECTOR
_ הפרע חלל טיימר_א (חלל)
{
z ++;
אם (z> עיכוב)
{
P3OUT = קוד [x];
P6OUT = code1 [y];
x ++;
אם (x == 10)
{
x = 0;
y ++;
}
אם (y == 6)
y = 0;
z = 0;
}
}
// שגרת שירות להפריע חומרה
וקטור #פרגמה = PORT2_VECTOR
_ הפרע יציאת חלל_2 (חלל)
{
P2IFG & = ~ BIT1;
x = 0;
y = 0;
P3OUT = קוד [x];
P6OUT = code1 [y];
v ++;
עבור (i = 0; i
{P1OUT | = BIT0; // P1.0 = החלפה
_ עיכוב_ אופניים (1048576);
P1OUT & = ~ BIT0; // P1.0 = החלפה
_ עיכוב_ אופניים (1048576);
}
}
שלב 10: קוד הפניה
מאגר GitHub