فهرست مطالب:

MSP430 شمارنده ثانیه: 10 مرحله
MSP430 شمارنده ثانیه: 10 مرحله

تصویری: MSP430 شمارنده ثانیه: 10 مرحله

تصویری: MSP430 شمارنده ثانیه: 10 مرحله
تصویری: MSP430 based Bi-directional visitor counter 2024, نوامبر
Anonim
شمارنده ثانیه MSP430
شمارنده ثانیه MSP430

خوش آمدی! ساخت ثانیه شمارنده: استفاده از CCStudio 8 و MSP430F5529 برای پروژه.

زبان C برای کدگذاری میکرو کنترلر استفاده از حالت های کم مصرف ، تایمرها و وقفه ها. خروجی از طریق 7 Segment نمایش داده می شود.

مرحله 1: بصیرت

بینش، بصیرت، درون بینی
بینش، بصیرت، درون بینی

شروع کنیم!

با استفاده از گذرواژه مورد نیاز برای تایمر نگهبان ، تایمر نگهبان را در حالت خاموش تنظیم کنید (این به بررسی حلقه های نامحدود کمک می کند ، و پردازنده را ایمن نگه می دارد).

#عبارتند از

/** * main.c */

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 استفاده می شود ، آنها را به عنوان مقاومت Pull UP پیکربندی می کنند و اگر 0x00 آنها را به عنوان Pull DOWN پیکربندی می کنند.

مرحله 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) ؛

این حالت General interrupt Enable (GIE) را فعال می کند و CPU را روی LPM0 قرار می دهد ، جایی که MCLK که از پردازنده پشتیبانی می کند خاموش است و SMCLK و ACLK اجرا می شوند که تایمر را فعال نگه می دارد. بنابراین می توانیم ببینیم CPU در آنجا با صرفه جویی در قدرت خاموش شده است.

مرحله 6: تایمر ISR

تایمر ISR
تایمر ISR

#بردار پراگما = TIMER0_A0_VECTOR

_ زمان خالی وقفه Timer_A (void)

{

z ++ ؛

if (z> تأخیر)

{

P3OUT = کد [x] ؛

P6OUT = کد 1 [y] ؛

x ++ ؛

اگر (x == 10)

{

x = 0 ؛

y ++ ؛

}

اگر (y == 6)

y = 0 ؛

z = 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

_درگاه خالی وقفه_2 (خالی)

{

P2IFG & = ~ BIT1؛

x = 0 ؛ y = 0 ؛

P3OUT = کد [x] ؛

P6OUT = کد 1 [y] ؛

v ++ ؛

برای (i = 0 ؛ i

{

P1OUT | = BIT0؛ //P1.0 = جابجایی

_چرخه های تاخیری (1048576) ؛

P1OUT & = ~ BIT0؛ // P1.0 = تغییر وضعیت

_چرخه های تاخیری (1048576) ؛

}

این ISR شمارنده را بازنشانی می کند و تعداد دفعات فشار داده شده را محاسبه می کند.

(در اینجا صفحه نمایش از طریق ضامن led ساخته شده است ، همچنین می تواند از آرایه و تایمر دیگری برای نشان دادن این مقادیر به عنوان خروجی در 7 بخش استفاده کند).

مرحله 9: کد

کد
کد

#عبارتند از

#تعریف تاخیر 1000

کد char = {0xFC ، 0x60 ، 0xDA ، 0xF2 ، 0x66 ، 0xB6 ، 0xBE ، 0xE0 ، 0xFE ، 0xE6} ؛

char char1 = {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) ؛

}

// تایمر A0 روال سرویس را قطع می کند

#بردار پراگما = TIMER0_A0_VECTOR

_ زمان خالی وقفه Timer_A (void)

{

z ++ ؛

if (z> تأخیر)

{

P3OUT = کد [x] ؛

P6OUT = کد 1 [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 = کد 1 [y] ؛

v ++ ؛

برای (i = 0 ؛ i

{P1OUT | = BIT0؛ // P1.0 = تغییر وضعیت

_چرخه های تاخیری (1048576) ؛

P1OUT & = ~ BIT0؛ // P1.0 = تغییر وضعیت

_چرخه های تاخیری (1048576) ؛

}

}

مرحله 10: کد مرجع

شماره مرجع
شماره مرجع

مخزن GitHub

توصیه شده: