- ارسالها
- 3,981
- امتیاز
- 32,746
- نام مرکز سمپاد
- فرزانگان امین
- شهر
- اصفهان
- سال فارغ التحصیلی
- 1390
تصور کنین که منتظر تلفن کسی هستید.دو حالت وجود داره:
1.از صبح تا شب بشینی پای تلفن تا شخص مورد نظر تماس بگیره، باهاش حرف بزنین، و بعد برین سر بقیه کارهاتون!
2.سایر کارهاتونو انجام بدین و هروقت تلفن زنگ زد جواب میدید و دوباره میرین سر ادامه کارهاتون!
طبیعتا و مسلما عاقلانه تر اینه که رفتاری مشابه حالت دوم داشته باشید.
Interrupt یا همان وقفه هم دقیقا همین کاربردو داره. در اینجا من درمورد وقفه های خارجی صحبت میکنم ن هوقفه های داخلی(مثل وقفه ADC).
برای استفاده از وقفه های خارجی به کمک سوئیچ، باید سودیچ ها را به پینهای INT میکروکنترلر وصل کنید.مثلا ATmega16 سه تا وقفه خارجی داره.(پینهای 3، 16 و 17)
Interrupt به پنج حالت قابل استفاده هست:
1.Rising Edge: هروقت سوئیچو فشار بدید، با برداشتن فشار از روی سوئیچ دستورات درون وقفه اجرا میشن.
2.Falling Edge: هروقت سوئیچو فشار بدید، دستورات درون وقفه اجرا میشن.
3.Low Level: تا زمانی که روی سوئیچ فشار آورده میشه، دستورات درون وقفه اجرا میشن.
4.High Level: تا زمانی که روی سوئیچ فشاری نیومده، دستورات درون وقفه اجرا میشن.
5.Any Change: با هرگونه تغییری، اعم از فشردن یا برداشتن فشار از روی سوئیچ، دستورات درون وقفه اجرا میشن.
تنظیمات ویزارد مربوط به interrupt در تگ External IRQ به صورت زیر هست:
اول کنار choice box کنار هر وقفه تیک بزنین.بعد از list box جلوی آن یکی از حالات گفته شده رو انتخاب کنین.
بعد از انجام تنظیمات ویزارد، از File-->Program Preview دستورات تولید شده رو در برنامه اصلی کپی کنین.
توجه کنین که توابع Interrupt که در ابتدای برنامه تولید شده قرار دارند، چند خط دستور مربوط به Interrupt درون تابع Main و دستور اسمبلی
حتما بایدبه برنامه اصلی منتقل بشن. دستور اسمبلی مذکور درواقع به منزله راه انداز Interrupt هست.پس اگه این خطو کپی نکنین، اصلا interrupt هاتون کار نمیکنن.
1.از صبح تا شب بشینی پای تلفن تا شخص مورد نظر تماس بگیره، باهاش حرف بزنین، و بعد برین سر بقیه کارهاتون!
2.سایر کارهاتونو انجام بدین و هروقت تلفن زنگ زد جواب میدید و دوباره میرین سر ادامه کارهاتون!
طبیعتا و مسلما عاقلانه تر اینه که رفتاری مشابه حالت دوم داشته باشید.
Interrupt یا همان وقفه هم دقیقا همین کاربردو داره. در اینجا من درمورد وقفه های خارجی صحبت میکنم ن هوقفه های داخلی(مثل وقفه ADC).
برای استفاده از وقفه های خارجی به کمک سوئیچ، باید سودیچ ها را به پینهای INT میکروکنترلر وصل کنید.مثلا ATmega16 سه تا وقفه خارجی داره.(پینهای 3، 16 و 17)
Interrupt به پنج حالت قابل استفاده هست:
1.Rising Edge: هروقت سوئیچو فشار بدید، با برداشتن فشار از روی سوئیچ دستورات درون وقفه اجرا میشن.
2.Falling Edge: هروقت سوئیچو فشار بدید، دستورات درون وقفه اجرا میشن.
3.Low Level: تا زمانی که روی سوئیچ فشار آورده میشه، دستورات درون وقفه اجرا میشن.
4.High Level: تا زمانی که روی سوئیچ فشاری نیومده، دستورات درون وقفه اجرا میشن.
5.Any Change: با هرگونه تغییری، اعم از فشردن یا برداشتن فشار از روی سوئیچ، دستورات درون وقفه اجرا میشن.
تنظیمات ویزارد مربوط به interrupt در تگ External IRQ به صورت زیر هست:
اول کنار choice box کنار هر وقفه تیک بزنین.بعد از list box جلوی آن یکی از حالات گفته شده رو انتخاب کنین.
بعد از انجام تنظیمات ویزارد، از File-->Program Preview دستورات تولید شده رو در برنامه اصلی کپی کنین.
توجه کنین که توابع Interrupt که در ابتدای برنامه تولید شده قرار دارند، چند خط دستور مربوط به Interrupt درون تابع Main و دستور اسمبلی
کد:
#asm("sei")