विषयसूची:

MSP430 सेकंड काउंटर: 10 कदम
MSP430 सेकंड काउंटर: 10 कदम

वीडियो: MSP430 सेकंड काउंटर: 10 कदम

वीडियो: MSP430 सेकंड काउंटर: 10 कदम
वीडियो: MSP430 SECOND BLOCK CPUX (Lecture-1) 2024, नवंबर
Anonim
MSP430 सेकंड काउंटर
MSP430 सेकंड काउंटर

स्वागत! सेकेंड काउंटर बनाना: प्रोजेक्ट के लिए CCStudio 8 और MSP430F5529 का उपयोग करना।

सी भाषा माइक्रो नियंत्रक को कोड करने के लिए। लो पावर मोड, टाइमर और इंटरप्ट को लागू करना। आउटपुट को 7 सेगमेंट के माध्यम से प्रदर्शित किया जाता है।

चरण 1: अंतर्दृष्टि

अंतर्दृष्टि
अंतर्दृष्टि

चलो शुरू करें!

वॉचडॉग टाइमर के लिए आवश्यक पासवर्ड का उपयोग करके वॉचडॉग टाइमर को ऑफ स्टेट में प्रारंभ करें (यह प्रोसेसर को सुरक्षित रखते हुए अनंत लूप की जांच करने में मदद करता है)।

#शामिल

/** * main.c */

मुख्य अंतर (शून्य)

{

WDTCTL = WDTPW | डब्ल्यूडीथोल्ड; // वॉचडॉग टाइमर बंद करो

वापसी 0;

}

चरण 2: पोर्ट आरंभीकरण

{

P3DIR = 0xFF; // P3DIR = 0x00;

P6DIR = 0xFF;

पी4डीआईआर |=0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

P3DIR | = 0x00 हमें बताता है कि इनपुट लेने के लिए पूरे PORT-3 को इनिशियलाइज़ किया गया है।

P3DIR | = 0xFF हमें बताता है कि आउटपुट देने के लिए पूरे PORT-3 को इनिशियलाइज़ किया गया है।

P3DIR |=0x01 केवल पिन P3.0 को PORT-3 में आउटपुट के लिए इनिशियलाइज़ किया गया है। यह एक हेक्साडेसिमल पोर्ट मैपिंग का अनुसरण करता है।

P4REN |=0xFF, यह इंगित करता है कि PORT-4 के पिनों में उनके पुल अप/डाउन रेसिस्टर्स सक्षम हैं।

पुल अप या पुल डाउन के बीच उन्हें चुनने के लिए, निर्देश P$OUT |=0xFF का उपयोग किया जाता है।

यदि 0xFF का उपयोग किया जाता है तो वे पुल यूपी प्रतिरोधों के रूप में कॉन्फ़िगर करते हैं और यदि 0x00 वे पुल डाउन के रूप में कॉन्फ़िगर करते हैं।

चरण 3: अल्ट्रा लो पावर

MSP430F5529 हमें प्रोसेसर से बिजली की कमी को कम करने की अनुमति देता है। यह स्टैंडअलोन अनुप्रयोगों में उपयोगी है।

यह आउटपुट के लिए सभी पिन या पोर्ट की घोषणा के लिए कहता है।

{

P7DIR |= 0xFF;

P6DIR |= 0xFF;

P5DIR |= 0xFF;

P4DIR |= 0xFF;

P3DIR |= 0xFF;

P2DIR |= 0xFF;

P1DIR |= 0xFF;

}

चरण 4: टाइमर

एक सेकंड की देरी पीढ़ी के लिए टाइमर का उपयोग। यह 1 मेगाहर्ट्ज के एसएमसीएलके का उपयोग करता है, टाइमर भी लो पावर मोड में चलता है (अगले चरण में, इसकी गिनती के बाद एलपीएम से बाधित)। यह प्रक्रिया प्रोसेसर पर बिजली और बोझ बचाती है

TA0CCTL0=CCIE;

TA0CCR0=999;

TA0CTL = TASSEL_2 + MC_1;

मान 999 है, क्योंकि टाइमर रजिस्टर में शून्य पर वापस जाने के लिए एक और गिनती की आवश्यकता होती है।

चरण 5: लो पावर मोड

_BIS_SR (LPM0_bits+GIE);

यह सामान्य व्यवधान सक्षम (GIE) को सक्षम करता है, और CPU को LPM0 पर रखता है, जहाँ MCLK जो cpu का समर्थन करता है, बंद है, और SMCLK और ACLK चलते हैं जो टाइमर को चालू रखता है। इसलिए हम देख सकते हैं कि सीपीयू बिजली की बचत करके वहां बंद है।

चरण 6: ISR- टाइमर

ISR- टाइमर
ISR- टाइमर

#pragma वेक्टर=TIMER0_A0_VECTOR

_ व्यवधान शून्य टाइमर_ए (शून्य)

{

जेड++;

अगर (जेड> देरी)

{

P3OUT = कोड [x];

P6OUT=code1[y];

एक्स++;

अगर (एक्स == 10)

{

एक्स = 0;

वाई++;

}

अगर (वाई == 6)

वाई = 0;

जेड = 0;

}

}

प्राग्मा वेक्टर सी एम्बीडी में आईएसआर प्रतिनिधित्व के लिए है।

कोड [x] और कोड 1 [y] ऐसे सरणियाँ हैं जिनमें 60 सेकंड के काउंटर को प्रदर्शित करने के लिए दो सात खंडों के आउटपुट मान होते हैं।

चरण 7: हार्डवेयर इंटरप्ट

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE |=BIT1;

P2IES |=BIT1;

P2IFG &= ~BIT1;

यहां P2.1 को हार्डवेयर इंटरप्ट के रूप में घोषित किया गया है, यदि बटन दबाया जाता है, तो काउंटर मान पर रीसेट हो जाता है।

बाकी प्रोग्राम इस रुकावट के ISR के अंदर लिखा जाता है।

चरण 8: ISR- रीसेट / पुश बटन

#pragma वेक्टर=PORT2_VECTOR

_इंटरप्ट शून्य पोर्ट_2(शून्य)

{

P2IFG &=~BIT1;

एक्स = 0; वाई = 0;

P3OUT = कोड [x];

P6OUT=code1[y];

वी++;

के लिए(i=0;i

{

P1OUT |= BIT0; // पी 1.0 = टॉगल

_देरी_चक्र(1048576);

P1OUT &=~BIT0; // P1.0 = टॉगल

_देरी_चक्र(1048576);

}

यह ISR काउंटर को रीसेट करता है, और इस बात का हिसाब रखता है कि बाकी को कितनी बार दबाया गया।

(यहां डिस्प्ले एलईडी टॉगल के माध्यम से बनाया गया है, 7 सेगमेंट में आउटपुट के रूप में उन मानों को दिखाने के लिए एक और सरणी और टाइमर का भी उपयोग कर सकते हैं)।

चरण 9: कोड

कोड
कोड

#शामिल

#देरी को परिभाषित करें 1000

चार कोड = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6};

चार कोड1={0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

अस्थिर अहस्ताक्षरित int x=0, y=0, z=0;

अस्थिर अहस्ताक्षरित int v=0, i=0;

शून्य मुख्य ()

{

WDTCTL = WDTPW | डब्ल्यूडीथोल्ड; // वॉचडॉग टाइमर बंद करो

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 (एलपीएम0_बिट्स+जीआईई);

}

// टाइमर A0 इंटरप्ट सर्विस रूटीन

#pragma वेक्टर=TIMER0_A0_VECTOR

_ व्यवधान शून्य टाइमर_ए (शून्य)

{

जेड++;

अगर (जेड> देरी)

{

P3OUT = कोड [x];

P6OUT=code1[y];

एक्स++;

अगर (एक्स == 10)

{

एक्स = 0;

वाई++;

}

अगर (वाई == 6)

वाई = 0;

जेड = 0;

}

}

// हार्डवेयर इंटरप्ट सर्विस रूटीन

#pragma वेक्टर=PORT2_VECTOR

_इंटरप्ट शून्य पोर्ट_2(शून्य)

{

P2IFG &=~BIT1;

एक्स = 0;

वाई = 0;

P3OUT = कोड [x];

P6OUT=code1[y];

वी++;

के लिए(i=0;i

{P1OUT |= BIT0; // P1.0 = टॉगल

_देरी_चक्र(1048576);

P1OUT &=~BIT0; // P1.0 = टॉगल

_देरी_चक्र(1048576);

}

}

चरण 10: संदर्भ कोड

संदर्भ कोड
संदर्भ कोड

गिटहब रिपोजिटरी

सिफारिश की: