جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
أهلا بك! عمل عداد الثواني: استخدام CCStudio 8 و MSP430F5529 للمشروع.
لغة C لترميز وحدة التحكم الصغيرة. تطبيق أوضاع الطاقة المنخفضة والمؤقتات والمقاطعات. يتم عرض الإخراج عبر 7 قطاعات.
الخطوة 1: البصيرة
هيا نبدأ!
قم بتهيئة مؤقت المراقبة إلى حالة إيقاف التشغيل باستخدام كلمة المرور المطلوبة لمؤقت المراقبة (يساعد في الحفاظ على التحقق من الحلقات اللانهائية ، والحفاظ على أمان المعالج).
#يشمل
/** * ج الرئيسية */
int main (باطل)
{
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 ، يتم تكوينها كمقاومات سحب وإذا كانت 0x00 يتم تكوينها على أنها سحب لأسفل.
الخطوة 3: طاقة منخفضة للغاية
يسمح لنا MSP430F5529 بتقليل فقد الطاقة من المعالج. هذا مفيد في التطبيقات المستقلة.
هذا يستدعي الإعلان عن كل رقم التعريف الشخصي أو المنافذ للإخراج.
{
P7DIR | = 0xFF ؛
P6DIR | = 0xFF ؛
P5DIR | = 0xFF ؛
P4DIR | = 0xFF ؛
P3DIR | = 0xFF ؛
P2DIR | = 0xFF ؛
P1DIR | = 0xFF ؛
}
الخطوة 4: المؤقت
استخدام الموقت لتوليد تأخير من ثانية واحدة. يستخدم هذا SMCLK بسرعة 1 ميجاهرتز ، ويعمل المؤقت أيضًا في وضع الطاقة المنخفضة (في الخطوة التالية ، بعد أن تم قطعه من LPM). هذه العملية توفر الطاقة والعبء على المعالج
TA0CCTL0 = CCIE ،
TA0CCR0 = 999 ؛
TA0CTL = TASSEL_2 + MC_1 ،
القيم هي 999 ، حيث يأخذ العدد عدًا إضافيًا للتراجع إلى الصفر في سجل المؤقت.
الخطوة 5: وضع الطاقة المنخفضة
_BIS_SR (LPM0_bits + GIE) ؛
يتيح ذلك تمكين المقاطعة العامة (GIE) ، ويضع وحدة المعالجة المركزية على LPM0 ، حيث يتم إيقاف تشغيل MCLK الذي يدعم وحدة المعالجة المركزية ، وتشغيل SMCLK و ACLK الذي يحافظ على تشغيل المؤقت. حتى نتمكن من رؤية وحدة المعالجة المركزية متوقفة عن التشغيل ، عن طريق توفير الطاقة.
الخطوة 6: ISR-Timer
# متجه براغما = TIMER0_A0_VECTOR
_interrupt Void Timer_A (باطل)
{
z ++ ؛
إذا (z> تأخير)
{
P3OUT = كود [x] ؛
P6OUT = code1 [y] ،
x ++ ؛
إذا (س == 10)
{
س = 0 ؛
ذ ++ ؛
}
إذا (ص == 6)
ص = 0 ؛
ض = 0 ؛
}
}
متجه براغما هو لتمثيل ISR في C embd.
الكود [x] و code1 [y] هي المصفوفات التي تحتوي على قيم مخرجات للقطعتين السبعة ، لعرض عداد 60 ثانية.
الخطوة 7: مقاطعة الأجهزة
P2DIR = 0x00 ؛
P2REN = 0x02 ،
P2OUT = 0x02 ؛
P2IE | = BIT1 ؛
P2IES | = BIT1 ؛
P2IFG & = ~ BIT1 ؛
هنا يتم الإعلان عن P2.1 كمقاطعة للأجهزة ، إذا تم الضغط على الزر ، يتم إعادة تعيين العداد إلى القيمة.
برنامج الباقي مكتوب داخل ISR لهذه المقاطعة.
الخطوة 8: ISR- زر إعادة الضبط / الضغط
# متجه براغما = PORT2_VECTOR
_interrupt void port_2 (باطل)
{
P2IFG & = ~ BIT1 ؛
س = 0 ؛ ص = 0 ؛
P3OUT = كود [x] ؛
P6OUT = code1 [y] ،
v ++ ؛
لـ (أنا = 0 ؛ أنا
{
P1OUT | = BIT0 ؛ //P1.0 = تبديل
_delay_ycles (1048576) ؛
P1OUT & = ~ BIT0 ؛ // P1.0 = تبديل
_delay_ycles (1048576) ؛
}
يعيد ISR ضبط العداد ، ويحتفظ بعدد المرات التي تم فيها الضغط على الباقي.
(هنا يتم العرض عبر تبديل الصمام ، ويمكن أيضًا استخدام صفيف ومؤقت آخر ، لإظهار هذه القيم كإخراج في 7 مقاطع).
الخطوة 9: الكود
#يشمل
# تعريف تأخير 1000
كود char = {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 | 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) ؛
}
// روتين خدمة المقاطعة Timer A0
# متجه براغما = TIMER0_A0_VECTOR
_interrupt Void Timer_A (باطل)
{
z ++ ؛
إذا (z> تأخير)
{
P3OUT = كود [x] ؛
P6OUT = code1 [y] ،
x ++ ؛
إذا (س == 10)
{
س = 0 ؛
ذ ++ ؛
}
إذا (ص == 6)
ص = 0 ؛
ض = 0 ؛
}
}
// روتين خدمة مقاطعة الأجهزة
# متجه براغما = PORT2_VECTOR
_interrupt void port_2 (باطل)
{
P2IFG & = ~ BIT1 ؛
س = 0 ؛
ص = 0 ؛
P3OUT = كود [x] ؛
P6OUT = code1 [y] ،
v ++ ؛
لـ (أنا = 0 ؛ أنا
{P1OUT | = BIT0 ؛ // P1.0 = تبديل
_delay_ycles (1048576) ؛
P1OUT & = ~ BIT0 ؛ // P1.0 = تبديل
_delay_ycles (1048576) ؛
}
}
الخطوة 10: الرمز المرجعي
مستودع جيثب