وقفه ، حالتی است که باعث متوقف شدن یک برنامه به صورت موقت می شود ، که خود توسط یک برنامه دیگر فعال می گردد . وقفه ها نقش مهمی در طراحی و پیاده سازی کاربردهای میکروکنترل دارند ; اما می تواند اجرای یک برنامه به یک درخواست دیگر نیز پاسخ دهد . نباید تصور کنیم که سیستم دارای وقفه ، می تواند بسیاری از کارها را همزمان انجام دهد . البته ، CPU نمی تواند در هر لحظه بیش از یک دستور العمل را اجرا کند ; دستور العمل دیگر را اجرا کند و مجدداٌ به دستور اول باز گردد .در هر صورت ، این عمل شبیه یک زیروال است . CPU برنامه دیگر – زیروال – را اجرا کند و مجدداٌ به دستور اول باز گردد . در هر صورت ،این عمل شبیه یک زیروال است . CPU برنامه دیگر – زیروال – را اجرا کرده و سپس به برنامه اصلی بر می گردد . شبیه یک زیروال است .تفاوتی که در یک سیستم راه اندازی شده با وقفه وجود دارد ، این است که وقفه پاسخی به یک [اتفاق] است که به طور غیر همزمان با برنامه اصلی به وقوع می پیوندد و حالتی نیست ه برنامه اصلی مورد وقفه قرار میگیرد .
برنامه ای که مربوط به وقفه می شود یک روال سرویس وقفه (ISR) یا گرداننده وقفه نامیده می شود ISR در پاسخ به یکوقفه عمل کرده و معمولاٌ عملیات ورودی یا خروجی را برای یک دستگاه انجام می دهد . هنگام وقوع وقفه، اجرای برنامه اصلی متوقف شده و به ISR انشعاب صورت می گیرد ; ISR اجرامی شود و با دستورالعمل [برگشت از وقفه] پایان می پذیرد و برنامه اصلی ادامه می یابد . معمولاٌ برنامه اصلی سطح پایه و ISR سطح وقفه نامیده می شود . اصطلاحات اصلی (سطح پایه ) و فرعی (سطح وقفه) نیزمورد استفاده قرار می گیند . در شکل 1-6 قسمت (الف) ، اجرای برنامه بدون وقفه ، و در قسمت (ب) اجرای سطح پای ، در صورت وقوع وقفه اجرای ISR ها در سطح وقفه ، به نمایش در آمده است .
ورود اطلاعات توسط صفحه کلید ، نمونه ای از یک اجاق مایکروویو را در نظر بگیرید . برنامه اولیه(اصلی) ممکن است عنصر تغذیه مایکروویو را برای پخت ، و کاهش یا افزایش زمان پخت راکنترل کند . هنگامی که کاربر کلیدی فشار دهد یک وقفه تولید می شود ، (سیگنالی که می تواند از سطح پائین به بالا رود ) و برنامه اصلی مورد وقفه قرار می گیرد ، ISR کدهای صفحه کلید را می خواند و شرایط پخت را مطابق با آن تغییر می دهد و با برگشت به برنامه اصلی خاتمه می یابد و اجرای برنامه اصلی ادامه پیدا می کند . نکته مهم در این مثال این است که ورودی توسط شخص بطور [ غیر همزمان ] صورت می گیرد ، یعنی زمان وقوع آنتوسط نرم افزار راه انداز سیستم قابل کنترل و پیش بینی نیست . این یک وقفه است .
2- سازمان وقفه 8051
در 8051 ، پنج منبع وقفه وجود دارد : دو وقفه خارجی ، دو وقفه تابمر و یک وقفه درگاه سریال . در 8052 ، وقفه دیگیر نیز برای تایمری دیگر ، پیش بینی شده است . هنگام راه اندازی مجدد سیستم همه وقفه ها غیر فعال یشده و بطور جداگانه توسط نرم افزار فعال می گردند .
در صورت وقوع همزمان دو وقفه یاوقوع وقفه در صورتی که وقفه دیگری در حال اجراست ، دو سطح تقدم برای آنها در نظر گرفته می شود . توالی اجرا ثابت ، اما تقدم وقفه ها قابل برنامه ریزی ی باشد. اکنون چگونگی فعال و غیر فعال کردن وقفه ها را بررسی می کنیم .
1-2- فعال و غیر فعال کردن وقفه
هر یک از منابع مقفه به طور مجزا ، از طریق بیت آدرس پذیر مخصوص ، توسط ثبات IE (فعال کننده وقفه ) و آدرس 0A8H فعال یا غیر فعال می شوند . علاوه بر بیتهای فعال کننده خاص برای هر منبع وقفه ، یک بیت فعال کننده / غیر فعال کننده کلی نیز وجود دارد که پاک شدن آن کلیه وقفه ها غیر فعال شده و می توانند با 1 شدن آن ، مجدداٌ فعال شوند . (جدول 1) را ببینید )
برای فعال کردن هر وقفه ، دو بیت باید 1 شوند : بیت فعال کنندهخاص و بیت کلی . بطور مثال تایمر 1 وقفه ها ، به صورت زیر فعال می شود :
SETB ET 1 ;ENABLE Timer 1 INTERRUPT
SETB EA ; SET GLOBAL ENABLE BIT
این عمل را می توان با دستور زیر نیز انجام داد :
MOV IE,#10001000B