وقفه در AVR

وقفه ها (Interrupts)

وقفه به معنای تاخیر زمانی نیست بلکه به معنی قطع موقت برنامه ی جاری و سرویس دادن به تابع وقفه است. برای اینکه میکروکنترلر بتواند علاوه بر برنامه جاری به سایر قسمت ها یا المان دیگری سرویس بدهد باید از وقفه استفاده کنیم.

به دو روش می توان به وسایل جانبی سرویس دهی کرد:

۱) روش سرکشی (Polling): در این روش کاربر توسط برنامه نویسی با فواصل زمانی مشخص و دائما، رویداد مورد نظر را بررسی میکند تا به آن پاسخ دهد. به طور مثال شما در حال انجام کاری می باشید و منتظر شخصی هستید اگر شما هر یک دقیقه یکبار بروید و بیرون را نگاه کنید تا ببینید آن شخص آمده است یا نه به این روش سرکشی یا Polling می گوییم، به طور نمونه اگر در برنامه نویسی، ما برای بررسی فشردن یک کلید هر چند لحظه یکبار بخواهیم بررسی را انجام دهیم در واقع به روش Polling عمل کرده ایم. عیب این روش تلف کردن وقت CPU است اما به این معنی نیست که این روش فایده و کاربردی ندارد.

۲) روش وقفه (Interrupt): در مثالی که طرح کردیم راه ساده تر این است که شما به کار خود ادامه دهید و منتظر زنگ مورد نظر بمانید و هر موقع زنگ را زدند به آن پاسخ دهید و سپس برگردید به کارتان ادامه دهید که به این روش وقفه یا Interrupt می گوییم. می بینید که در این روش وقت شما تلف نشده و تا آمدن آن شخص شما توانسته اید کار مفید دیگری انجام دهید، در این روش CPU بدون در نظر گرفتن رویداد به انجام سایر اعمال مشغول می شود و با وقوع اتفاق مورد نظر، CPU انجام خط جاری برنامه را متوقف کرده و سرویس وقفه را اجرا می کند سپس به خطی از برنامه که آن را قطع کرده بود بر می گردد و ادامه برنامه را اجرا میکند.

انواع وقفه در AVR

در میکرو کنترلرها وقفه‌ها به دوسته کلی تقسیم می شوند:

وقفه‌های داخلی: همانطور که از اسمش پیداست این وقفه‌ها سیگنال هایی هستند که داخل میکرو ایجاد می شوند، این سیگنال ها همان درخواست سرویس از CPU می باشند.

وقفه‌های خارجی: از وقفه های خارجی معمولا برای تشخیص پالس استفاده می شود که این پالس می تواند حاوی اطلاعات گوناگونی باشد. وقفه‌های خارجی همانطور که از اسمش پیداست منبع آنها خارج از میکرو قرار دارد و با ارسال سیگنالی به پایه های مخصوصی در میکروکنترلر، وقفه ایجاد می کنند.

توضیح رجیسترهای وقفه

رجیستر (GICR (Global Interrupt Control Register:

وقفه در AVR

در این رجیستر با استفاذه از ۳ بیت آخر وقفه خارجی ۰ تا ۲ را می توان فعال کرد.

بیت ۵ – INT2: با یک کردن این بیت وقفه خارجی ۲ فعال میشود.

بیت ۶ – INT0: با یک کردن این بیت وقفه خارجی ۰ فعال میشود.

بیت ۷ – INT1: با یک کردن این بیت وقفه خارجی ۱ فعال میشود.

رجیستر (GIFR (Global Interrupt Flag Register:

وقفه در AVR

این رجیستر پرچم وقوع وقفه‌های خارجی است.

بیت ۵ – INTF2: پرچم متناظر با وقفه‌ خارجی ۲، در صورت تحریک شدن وقفه خارجی ۲ از طریق پایه بیرونی INT2، این پرچم فعال می گردد و درخواست اجرای وقفه را می دهد و برنامه به تابع وقفه ۲ پرش خواهد کرد که بعد از اجرای آن، به طور اتوماتیک این پرچم پاک می شود.

بیت ۶ – INTF0: پرچم متناظر با وقفه‌ خارجی ۰، در صورت تحریک شدن وقفه خارجی ۰ از طریق پایه بیرونی INT0، این پرچم فعال می گردد و درخواست اجرای وقفه را می دهد و برنامه به تابع وقفه ۰ پرش خواهد کرد که بعد از اجرای آن، به طور اتوماتیک این پرچم پاک می شود.

بیت ۷ – INTF1: پرچم متناظر با وقفه‌ خارجی ۱، در صورت تحریک شدن وقفه خارجی ۱ از طریق پایه بیرونی INT1، این پرچم فعال می گردد و درخواست اجرای وقفه را می دهد و برنامه به تابع وقفه ۱ پرش خواهد کرد که بعد از اجرای آن، به طور اتوماتیک این پرچم پاک می شود.

رجیستر (MCUCR (MCU Control Register:

وقفه در AVR

جدول زیر انواع  مقدار دهی بیت های  ISC01  و  ISC00 را نشان داده است که توسط این دو بیت می توان نحوه ی تحریک شدن وقفه خارجی صفر را تعیین کرد. همچنین با بیت های ISC10 و ISC11 نحوه تحریک وقفه خارجی یک (INT1) تعیین می شود.

وقفه در AVR

رجیستر (MCUCSR (MCU Control and Status Register:

وقفه در AVR

بیت ۶ – ISC2 : اگر این بیت صفر باشد وقفه خارجی ۲ در لبه ی پایین رونده و اگر یک باشد در لبه ی بالا رونده پالس تحریک کننده اجرا خواهد شد.

فیسبوک توییتر گوگل + لینکداین تلگرام واتس اپ کلوب

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *