وقفه ، حالتی است که باعث متوقف شدن یک برنامه به صورت موقت می شود ، که خود توسط یک برنامه دیگر فعال می گردد .
وقفه ها نقش مهمی در طراحی و پیاده سازی کاربردهای میکروکنترل دارند ; اما می تواند اجرای یک برنامه به یک درخواست دیگر نیز پاسخ دهد .
نباید تصور کنیم که سیستم دارای وقفه ، می تواند بسیاری از کارها را همزمان انجام دهد .
البته ، 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
MOV IE,#10001000B جدول 1 خلاص ثبات IE (فعال کننده وقفه) اگر چه این دو روش ، دقیقاٌ همان اثر راه اندازی مجدد سیستم را دارند ، اگر IE را در وسط برنامه ، به صورت متعلق [معلق] برنامه ریزی کنیم ، اثر متفاوتی در برخواهد داشت .
روش اول تأثیری بر پنج بیت دیگر ثبات IE ندارد ، در حالی که روش دوم بوضوح بیتهای دیگر را پاک می کند .
بهتر است که در شروع برنامه IE را با دستور "MOVE BYTE" مقدار دهی کنیم ، ( یعنی به دنیال تغذیه یا reset( کردن سیستم ) اما برای فعال و غیر فعال کردن وقفه های به ثورت معلق داخل برنامه ، باید از دستورهای Set bit و Clear bit استفاده کرد تا روی بیتهای دیگر ثبات IE تأثیری نداشته باشد .
2-2- تقدیم وقفه هر منبع وقفه در یکی از دو طریق بیت آدرس پذیر مخصوصی در ثبات IP (تقدیم وقفه) در آدرس 0b8h برنامه ریزی می شود ( جدول 2 را ببینید ) پس از راه اندازی مجدد سیستم IP پاک شده و همه وقفه ها در سطح تقدم پایین به صورت پیش فرض قرار می یگرند .
نظریه تقدیم این امکان را می دهد که وقفه ها بر اساس تقدم بالاتر ، توسط ISR سرویس شوند .
در 8051 این امر به آسانی انجام می شود ، چون تنها دو سطح تقدیم وجود دارد .
چنانچه هنگام سرویس دهی به یک وقفه یا تقدم پائین ، وقفه ای با تقدم بالاترروی دهد ، توسط ISR مورد پذیرش قرار می یگرد ، ولی یک وقفه با تقدم بالاتر مورد وقفه قرار نمی گیرد .
برنامه اصلی ، در سطح پایه اجرا شده و با هیچ وقفه ای همراه نیست ، و همواره می تواند بدون توجه به تقدم وقفه ها مرد وقفه واقه شود .
در صورت روی دادن همزمان دووقفه با تقدمهای متفاوت ، ابتدا وقفه با تقدم بالاتر سرویس دهی می شود .
جدول 2 خلاصه ثبات IP (تقدم وقفه ) 3-2 ترتیب اجرا اگر دو وقفه با یک تقدم ، هممان اتفاق بیفتند ، یک ترتیب اجرای ثابت نوبت سرویس دهی هرکدام از آنها تعیین می کد .
ترتیب اجرا : 0 خارجی ، تایمر 0;1 خارجی ، تایمر1; درگاه سریال ، و تایمر 2 می باشد .
شکل 2 ، پنج منبع وقه ، فرایند فعال کرد کلی و خاص ، ترتیب اجرا ، و سطوحتقدیم را شرح می دهد .
حالت همه منابعوقفه از طریق بیتهای پرچم در SFR ها قابل دستیابی است .
البته اگر وقفه ای غیر فعال شده باشد ، اتفاق نخواهد افتاد ، اما نرم افزار باز هم پرچم وقفه را تست می کند .
مثالهایدرگاه سریال و تایمر در دو فصل اخیر بدون استفاده واقعی از وقفه ها ، بطوروسیع از پرچمهای وقفه بهره بردند .
یک وقفه درگا سریال ناشی از OR منطقی دریافت وقفه (RI) یا ارسل وقفه (TI) می باشد همچنین وقفه های تایمر2 با سرریز تایمر (TF2) یا پرچم ورودی خارجی (EXF2) توید می شوند .
بیتهای پرچم که مقفه ها را تولید می کنند ، در جدول 3-6 خلاصه شده اند .
3-6 وقفه های پردازنده هنگام وقوع یک وقفه و پذیرش آن توسط CPU ، برنامه اصلی مورد وقفه قرار می یگرد واعمال زیر انجام می شوند : اجرای دستورالعمل فعالی کامل می شود .
PC در پشته ذخیره می شود .
وضعیت وقفه جاری بطور داخلی ذخیره می شود .
وقفه های.
مسطح با این وقفه متوقف میشوند .
PCبا آدرس برداری ISR بار می شود .
ISR اجرا می شود .
جدول 3 بیتهای پرچم وقفه اجرای ISR ، پاسخگویی به وقفه است ، و با دستورالعمل RETI (برگشت از وقفه) خاتمه می یابد.
با انجام این عمل مقدار قبلی PC از پشته بازیابی شده و وضعیت قبلی نیز ذخیره می گردد .
اجرای برنامه اصلی پس از وقفه ادامه مییابد .
بردارهای وقفه هنگامی که یک وقفه مورد پذیرش قرار می گیرد ، عدد بار شده در PC بردار وقفه نامیده می شود ; که در واقع آدرس شروع ISR برای منبع وقفه است .
بردارهای وقفه در جدول 4-6 ارائه شده اند .
بردار reset سیستم (RST در آدرس 0000H ) نیر در جدول آمده است .
از آن جا که این حالت مانند یک وقفه است ، برنامه اصلی رامورد وقفه قرار داده و PC را با مقدار بار می کند .
هنگام " بردار کردن یک وقفه " پرچمیکه باعث وقه می شود ، بطور خودکار توسط سخت افزار پرک می گردد .
RI و TI برای وقفه های درگاه سریال و TF2 و EXF2 برای وقفه های تایمر2 ، از این امر مستثنا هستند .
چون برای هر یک از یوقفه ها دو منبع وجود دارد ، پاک کردن پرچم وقفه توسط CPU عملی نیست .
این بیتها باید در ISR برای تعیین منبع وقفه ، آزمایش شوند ؛ و سپس پرچم وقفه دهند توسط نرم افزار پاک می شود .
معمولاٌ با توجه به مبنع وقفه انشعابی به عملیاتی مناسب صورت می گیرد .
چون بردارهای وقفه در انتهای حافظه کد هستند ، اولین دستورالعمل بر نامه اصلی غالباٌ یک پرش از رویناحیه حافظه ، مانند LJMP 0030H می باشد .
جدول 4 بردارهای وقفه 4- طراحی برنامه با استفاده از وقفه ها در مثالهای فصل 3و 4 از وقفه ها استفاده نشد ، حلقه های انتظاربرای تست پرچمهای سرریژ تایمر (TF0 ، TF1 یا TF2 ) یا پرچمهای دریافت و ارسال درگاه سریال (T1 یا RI ) ، به طور گسترده ای بکار رفتند .
مشکل این روش اسن است که تمامی وقت CPU صرف تست پرچمهایی که باید 1 شوند ، می گردد .
این امر هنگامی که در مقاصد کنترلی ، میکروکنترل باید دستگاههای ورودی وخروجی زیادی را بطور همزمان کنترل کند ، مناسب نیست .
در این بخش ، مثالهایی برای تشریح عملیروشهای پیاده سازی نرم افزار برای مقاصد کمترلی ، ارائه می شوند .
نکته اصلی ، وقفه است .
اگرچه مثالها لزوماٌ بزرگ نیستند ، اما پیچیده می باشند و برای شرح انها قدم به قدم حرکت خواهیم کرد .
به خواننده توصیه می کنیم که مثالها را به آرامی مطالعه کرده و نرم افزار را بادقت زیاد بررسی کند .
پیچیده ترین خطاها در طراحی سیستم غالباٌبا وقفه ها در ارتباط می باشند و جزئیات باید بدرستی درک شوند .
چون ما از وقفه ها استفاده می کنیم ، مثالها کامل و خود کفا خواهند بود .
هر برنامه ، با این فرض که پس از reset شدن سیستم اجرای آن شروع می شود ، از آدرس 0000H آغاز می شود .
این برنامه ها برای مقاصد کاملاٌ جدید و تاز در ROM یا EPROM ذخیره می شوند .
قالب پیشنهادی برای یک برنامه خد کفا با استفاده از وقفه ها ، در زیر نشان داده شده است : ORG 0000ا ;RESET ENTRY POINT LJMP .
;ISR ENTRY POINTS .
ORG 0030H ; PROGRAM ENTY POINT : .
; MAIN PROGRAM BEGINS .
.
اولیت دستور ، مطابق جدول 4-6 به آدرس 0030H ، درست بالای محل برداری که ISR ها می شوند ، پرش می کند .
چنانچه در شکل 3-6 نشان داده شده است ، برنامه اصلی از آدرس 0030H شروع می شود .
1-4- رولهای سرویس وقفه کوچک روالهای سرویس وقفه باید از انتهای حافظه در آدرسهای نشان داده شده در جدول 4-6 شروع شوند اگرچه بین نقطه ورود هر یک از وقفه ها ، فقط هشت یاب وجوددارد ، این مقدار حافظه غالباٌ برای انجام عملیات مناسب و بازگشت از از ISR به برنامه اصلی ، کافی است .
اگر تنهااز یک منبع وقفه استفاده شود ، مثلاٌ تایمر 0 ، بایدقالب زیر را به کار برد : ORG 0000H ;RESET LJMP ORG 000BH ;Timer 0 ENTRY POINT TOTSR .
;Timer 0 ISR BEGINS .
RETI ;RETURN TO MAIN PROGRAM .
اگر وقفه ها بیشتر باشند ، باید از شروع شدن آنها از محل صحیح ( جدول 4-6را ملاحظه کنید ) که باعث راه اندازی مجدد ISR بعدی نشود ، اطمینان حصل کرد، چون در مثال بالا از یک وقفه استفاده شد است ، پس از دستورالعمل RETI برنامه اصلی فوراٌ شروع می شود .
2-4 روالهای سرویس وقفه بزرگ اگر یک ISR از هشت بایت بیشتر باشد ، باید آن را ب حافظه کد انتقال داد یا نقطه ورود آن را برای وقفه بعدی تغییر داد .
برای مثال ، ISR با یم پرش به ناحیه ای ازحافظه کد که بتوان آن را وسعت داد ، آغاز می شود .
با در نظر گرفتن تایمر 0 در حال حاضر بتنهایی ، می توان از قالب زیر استفاده کرد .
ORG 000H ;RESET ENTRY POINT LJMP ORG 000BH ;TIMER 0 ENTRY POINT LJMP TOIGR ORG 0030H ;ABOVE INTERRUPT VETORS .
TOISR: .
;TIMER 0 ISR RET ;RETURN TO MAIN PROGRM برای سهولت ، برنامه ها تنها یک کار را در یک زمان انجام خواهندداد .
برنامه اصلی ، تایمر ، درگاه سریال ، و ثباتهای وقفه را بطور مناسب مقدار دهی می کند و سپس یچ کاری انجام نمی دهد .
تمامی کار توسط IS انجام می شود .
پس از دستور العمل مقدار دهی ، برنامه اصلی شامل دستور العمل زیر است : HERE : SJMP HERE هنگام وقوع یک وقفه ، برنامه اصلی موقتاٌمتوقف شده و ISR اجرا می شود ، دستور RETI در پایان ISR کنترل را به برنامه اصلی برگردانده و پس از آن کاری انجام نمیدهد .
این عمل چندان سهم دور از ذهن نیست .
در بسیاری ازمابردهای کنترلی قسمت عمده کار در حقیقت توسط روال سرویس وقفه انجام می شود .
وقفه های تایمر هنگامی روی می دهند که ثباتهای تایمر (TLx/THx) سرریز کرده و پرچم سرریز (TFx) را 1 کنند .
این مثال در فصل 4 بدون استفاده از وقفه ها آمده است (مثال راملاحظه کنید ) .
بدنه برنامه ، همان است اما در این جا از وقفه ها استفاده خواهیم کرد .
برنامه مزبور عبارت است از : 0000 5 ORG 0 ; RESET ENTRY POINT 0000 020030 6 LJMP ;Jump above interrpt vectors 000B 7 ORG 000BH ;Timer 0 interrupt vector 000B B290 8 TOISER; CPL P1.0 ;Toggle port bit این یک برنامه کامل است ، که می تواند درون EPROM ریخته شده و در کامپیوتر تک بورد 8051 نصب شود .
بلافاصله پس از راه اندازی مجدد شمارنده برنامه با عدد 0000H بار می شود ،اولین دستورالعملیکه اجرا می شود ، ljmp main است ، که isr تابمر را به آدرس 0030h در حافظه کد انشعاب می دهد .
سه دستور العمل بعدی (خط های 11 تا 13 ) تایمر 0 را در حالت بار شدن سخودکار 8 بیتی ، با سرریزه ها در هر 5 یکبار ، مقدار دهی می کنند .
دستورالعل IE MOV , #82H وقفه های تایمر 0را فعال می کند ، بگونه ای که سرریز تایمر تولید یک وقفه می نماید .
البته اولین سرریز پس از اتفاق می افتد ، برنامه اصلی متوقف شده و ISR تایمر 0اجرا می گردد .
ISR بسادگی بیت درگاه را متمم کرده و پس از حلقه انجام ندادن کار به مدت ، به برنامه اصلی باز می گردد .
توجه کنید که پرچم ایمر TF0 بوضوح توسط نرم افزار پاک نمی شود .
هنگامی که وقفه ها فعال شوند ، TFO هنگام پاسخ CPU به وقفه بطور خودکار توسط سخت افزار پاک می شود .
آدرس بازگشت در برنامه اصلی ، لزوماٌ در محل دستورالعمل SJMP می باشد .
این آدرس در پشته داخلی 8051 ، پوش می شود تا هر یک از وقفه ها را جهت دهی کند و در پایان ISR و اجرای دستورالعمل RETI از پشته ، پاپ می شود .
چون به SP مقداری داده نشده است ، مقدار 07H به صورت پیش فرض برای آن درنظر گرفته می شود .
عملیات پوش آدرس بازگشت به RAM داخلی را در محل و قرار می دهد .
آرایش سخت افزاری و زمان بندی های لازم برای شکل موجها در شکل 4 نشان داده شده است .
این ترکیب خروجی ها برای تولید در یک سیستم بدون وقفه ، به طریقه خارجی مشکل است .
تایمر 0 همزمانی سیگنال 7KHz را فراهم و مانند مثال قبلی در حالت 2 کارمی کند و تایمر 1 همزمانی سیگنال 500HZ را ایجاد کرده و در حالت 16 بیتی کار می کند .
چون در 500Hz شکل موج باید 1ms در حالت بالا و 1ms در حالت پایین باشد ، نمیتوان از حالت 2 استفاده کرد .
( به خاطر آورید که ماکزیمم بازه زمانیدر حالت 2 هنگامی که 8051 در 12MHz کار می کند ، 25 است ) .
برنامه به صورت زیر می باشد .
این قالب را نیر می توان EPROM و یا ROM نصب کرد و در و در تولدات 8051 قرار داد .
برنامه اصلی و ISR ها ، بالای محل برداری راه اندازی مجدد سیستم و وقفه ها قرار می گیرند .
هر دو شکل موج با دستورالعمل "CPL,bit" تولید می شوند ، اما بازه های زمان بندی ، در اینجا کمیمتفاوت میباشند .
چون ثباتهای TL1/TH1 باید پس از هر سرریز مجدداٌ با شوند (یعنی پساز هر وقفه ) ISR تایر 1 (الف) تایمر را متوقف می کند ، (ب) TL1/TH1 را مجدداٌ بارگذاری می کند (پ) کارتایمر را شروع می کند و سپس (ت) بیت درگاه را متمم می کند .
دقت کنید که TL1/TH1 ، بر خلاف TH0 ، در آغاز برنامه اصلی مقدار دهی نمیشوند .
چون پس از هر سرزیر TL1/TH1 بید مجدداٌ با شوند ( یعنی پس از هر وقفه ) ISR تایمر 1 (الف) تایمر را متقف می کند ، (ب) TL1/TH1 را مجدداٌ بارگذاری می کند ، (پ) کارتایمر را شروع می کند و سپس (ت) بیت درگاه را متمم می کند .
دقت کنید که TL1/TH1 ، بر خلاف TH0 ، در آغاز بر نامه اصلی مقدار دهی نمی شوند .
چون پس از هر سرریز TL1/TH1 باید مجدداٌ مقداردهی شوند ، TF1 در برنامه اصلی 1 می شود ، تا به محض وقوع یک وقفه ، وقفه ای را تولید نماید .
این امر بطور موثری شکل موج 500Hz را تولید می کند .
ISR تایر0 مانند مثال قبل بسادگی بیت درگاه رامتمم کرده ، به برنامه اصلی باز می گردد .
دستورالعمل SJMP $ که در برنامه اصلی به کار رفته است ، مختصر شد HERE;SJMP HERE می باشد .
از لحاظ عملکرد ، هر دو، معادل یکدیگر هستند .
(" نمادهای اسمبلر مخصوص " را در فصل 7 ملاحظه کنید.
) 5- وقفه های درگاه سریال وقفه های درگاه سریال هنگامی روی می دهند که پرچم ارسال وقفه (TI) با پرچم دریافت وقفه (RI) ، 1 شود .
ارسالی هنگام پایان بافتن ارسال کارکتر قبلی نوشته شده در SBUF ،اتفاق می افتد.
وقفه دریافتی پس از دریافت کامل کاراکتر روی می دهد و کارکتر در SBUF قرار می گیرد تا خوانده شود .
وقفه های درگاه سریال کمی با وقفه های تایمر تفاوت دارند .
پرچمی که باعث وقفه درگاه سریال می شود ، توسط نرم افزار هنگام پاسخگویی CPU به وقفه پاک نمی شود .
دلیل این امر آن است که دو منبع TI یا RI برای وقفه درگاه سریال ، وجود دارند .
منبع وقفه باید در ISR تعیین ، و پرچم وقفه دهنده توسط نرم افزار پاک شود .
به یاد آورید که با وقفه های تایمر ، پرچم وقفه دهنده توسط سخت افزار هنگام پاسخ دادن پردازنده به ISR ، پاک میشود .
در نمودار ASCII ، 128 کد 7 بیتی وجود دارد (ضمیمه ج را ملاحظه کنید ) ، که شامل 95 کد گرافیکی (20H تا 7EH ) و 33 کد کنترلی ( 00H تا 1F و 7FH ) می باشد .
برنامه ریز، یک برنامه خودکنترل کننده قابل اجراست ، که بلافاصله پس از راه اندازی مجدد سیستم ازEPROM یا ROM اجرا میشود.
پس از پرش به MAIN در آدرسهای کد 0030H ، به دستورالعمل اول ، تایمر 1 را مقدار دهی کرده و 1200 پالسساعت را برای درگه سریال فرهم می کنند (خط های 10 تا 12 ) دستور العمل MOV SCON,#42H ، درگاه سریال را برای حالت 1 (UART هشت بیتی) مقدار دهی می کند و پرچم TI برای ایجاد وقفه هنگام فعال شدن وقفه ها ، 1 می شود .
سپس اولین کد گرافیکی ASCII (20H) در A بار شده و وقفه هنگام های درگاه سریال فعال می شوند .
سرانجام ، بدنه اصلی برنامه وارد حلق انجام ندادن کار می شود (SJMP $).
روال سرویس وقفه درگاه سریال هنگام شروع برنامه صلی همه این اعمال را انجام می دهد .
دو دستور العمل نخست ، انبار را تست می کنند ، و اگر کد ASCII به 7FH رسیده باشد ( یعنی آخرین که ارسال شده 7EH باشد ) ، انبر را به 20H با ر می کنند ( خط های 10 تا 20) سس کد ASCII به باقر وقفه ارسالی پاک فرستاده می شود (CLR TI) و ISR خاتمه می یابد (RETI) .
کنترل به برنامه اصلی بازگشته و SJMP $ اجرا می شود تا TI در پایان ارسال کارکتر بعدی 1 شود .
اگر سرعت CPU را با سرعت ارسال کارکتر مقایسه کنیم ، خواهی دید که SJMP$ در درصد بالایی اززمان این برنامه اجرا می شود .
این درصد چقدر است ؟
در سرعت 1200 ، هر بیت ارسال شده 1/1200=0/833ms زمان میگیرد .
بنابراین ، هشت بیت داده به همراه دو بیت شروع و توقف ، 8/33ms یا زمان خواهند گرفت بیشترین زمان صرف شده برای SPISR از جمع شیکلهای هر دستور العمل و ضرب آن در (با فرض عملکرد در 12MHz ) بهدست می آید ؛ که خواهد بود ؛ بنابراین از برای ارسال هر کاراکتر ،تنها 8 صرف روال سرویسوقفه می شود .
دستورالعمل SJMP $ تقریباٌ در %90/99=100*8333 8325 زمان اجرا می شود .
چون از وقفه ها استفاده می شود ،می توان به جای دستروالعمل SJMP $ از سایر دستورالعملهایی که کارهای دیگریرا نیز انجام می دهند بهره برد .
وقفه ها هر رخ داده و کارکترها مانند برنامه قبل به درگاه سریال ارسال می شوند .
6- وقفه های خرجی وقفه های خارجی ، ناشی از سطح پایین یا لبه منفی روی پایه INT0 یا INT1 در 8051 IC می باشند این اعمال وظایف دیگری به ترتیب برای درگاه 3 ، بیتهای P3.2 (پایه 12) و P3.3 (پایه 13) هستند .
پرچمهایی که واقعاًً این وقفه ها را تولید می کنند ، بیتهای IE0 و IE1 در TCON هستند .
هنگام رخ دادن یک وقفه خارجی ، پرچمی کهوقفه را تولید کرده در صورتی که هنگام اسخگویی به ISR وقفه در حالت گذار فعال شده باشد توسط سخت افزار پاک می شود .
اگر وقفه براساس سطح فعال شود ، به جای سخت افزار روی تراشه ، کنبع متقاضی خارجی سطح پرچم تقاضا را کنترل می کند .
انتخابوقفه های فعال شونده با سطح پایین نسبت به وقفه های فعال شده بالبه منفی از طریق بیتهای ITO و IT1 در TCON قابل برنامه ریزی هستند .
بطور مثال ،اگر IT=0 باشد ، وقفه 1 خارجی با ظاهرشدن سطح پائین روی لبه پایه INT1 تحریک می شود .
اگر IT1=1 باشد ، وقفه 1 خارجی تحریک شده با لب خواهد بود .
در این حالت اگر نمونه های رسیده به پایه INT1 در یک سیکل ، بالا ، و در سیکل دیگر ، پایین باشند ؛ پرچم تقاضای وقفه IE1 در TCON ، 1 می شود سپس بیت پرچم IE1 تقاضایوقفه می کند.
چون پایه های وقفه خارجی در هر سیکل ماشین نمونه برداری می شوند ، هر ورودی حداقل باید 12 یوددندسان ساز باقی بماند تا از نمونه برداری صحیح اطمینان حاصلشود .
اگر وقفه های خارجی فعال شوند در حالت گذار باشند ، منبعخارجی باید پایه تقاضا را حداقل برای 1 سیکل در حالت بالا نگه دارد ، و سپس آنرا حداقل 1 سیکل دیگر دی حالت پائین حفظ کند تا مطمئن شویم که حالت گذار انجام شده است .
هنگام پاسخگویی به وقفه توسط IE0,CPU و IE1 به طور خودکار پاک می شوند .
چنانچهوقفه خارجی فعال شوندهبا لبه باشد ، منبع خارجیباید تقاضایوقفه راتا هنگام تولید آن فعال نگه دارد .
سپس باید تقاضا را قبل ازکامل شده روال سرویس وقفه ، غیر فعال کند ، وگرنه وقفه دیگیر تولید خواهد شد .
معمولاٌ عملی در ISR باعث می شود که منبع متقاضی با دریافت سیگنالی غیرفعال شود .
رابط زیر برای این مثال فرض می شود .
سیم پیچ ON/OFF به P1.7 به ثورت زیر متصل می شود : در حالی که سیم پیچ درگیر است _ کور روشناست ) P1.7=1 در حالی که سیم پیچ آزاد است .
( کوره خاموش است ) P1.7=0 حس کننده ها به INT0 و INT1 متصل شده و بترتیب سیگنالهای HOT و COLD را به صورت زیرایجاد می کنند : اگر C 21 > T باشد ، 0= HOT اگر C 19 برنامه باید کوره رابرای C 19 T خاموش نماید .
آرایش سخت افزاری و نمودار زمانبندی در شکل 6 به نمایش در آمدهاند .
سه دستور العمل برنامهنخست برنامه اصلی (خطوط 14 تا 16 ) وقفه های خارجی را فعال کرده و INTO و INT1 را به صورت تحریک شونده با لبه منفی در می آورند .
چون حالت جاری (P3.3)HOT و COLD (P3.3) نا معلوم است ، سه دستور العمل بعدی (خطوط 17 تا 19) برای روشن یاخاموش کردن کوره لازم هستند .
ابتدا کوره روشن میشود (SETB P1.7) و سپس از ورودی HOT نمونه برادری می گردد .
(JB P3.2, SKIP) اگر HOT در وضعیت بالا باشد ، C 21 > T خواهد بود ، بنابراین دستورالعمل بعدی حذف شده و کوره در حالت روشن باقی می ماند .
اما ، اگر HOT در وضعیت پایین باشد C 21 > T بوده و عمل پرش انجام نمی شود .
دستورالعمل بعدی قبل از ورود به حلقه به حلقه انجام ندادن کار ، کوره را خاموش می کند (CLR P1.7) .
یک بار همه چیز بدرستی در برنامه پیش بینی شد ، کار کمی برای انجام دادن باقی می ماند .
هر بار که دما از C 21 > T بالاتر رود ، یا کمتر از C 19 شود ، یک وقفه روی داده و ISR کوره را روشن SETB ) (P1.7 یا خاموش (CLR P1.7) می کند و به برنامه اصلی باز می گردد .
دقت کنید که دستور ORG 0003H بلافاصله قبل از بر حسب EXOISR لازم نیست .
چون طول دستورالعمل LJMP MAIN سه بایت است ، EXOISR باید از 0003H شروع شود ، که نقطه ورودی صحیح برای وقفه های 0 خارجی است .
در حل این مثال از سه وقفه استفاده شده است : 0 خارجی (حس کننده درب ) تایمر 0 (فرکانس 400HZ ) و تایمر 1 (1 ثانیه زمان خروجی ) آرایش سخت ازاری و زمانبندی هادر شکل (6) به نمایش در آمده اند .
این برنامه بزرگترین برنامه تا این زمان بوده است .
پنج بخش مجزا عبارتند از : مجلهای بردار وقفه 0 خارجی در ابتدا فعال می شود (MOV IE , # 81H) ، بنابراین شرط " باز بودن درب " قبل از پذیرش هر وقفه مورد نیازاست .
در نهایت SJMP $ برنامه اصلی را در حلقه انجام ندادن کار قرار می دهد.
هنگامی که شرط باز بدون درب حس شود (کالت گذار از بالا به پایین در پایه INTO ) ، یک وقفه 0 خارجی تولید می شود EXOISR با قرارداد مقدار ثابت 20 در R7 ( در ادامه خواهیم دید ) آغاز می شود .
سپس پرچمهای سرریزهر دو تایمر وقفه های تایمر فعال می کنند ؛ اما وقفه های تایمر هنگامی روی می دهند که بیت های مربوطه آنها در ثبات IE فعال شده باشند .
دو دستور العمل بعدی (SETB ET1 , SETB ET0) وقفه های تایمر را فعال می کنند .
سرانجام EXOISR با RET1 خاتمه یافته و به برنامه اصلی بازگردد .
تایمر 0 یک زمان 1 ثانیه ای ، و ایمر 1 فرکانس 400Hz را تولید می کند .
پس از بازگشت EXOISR به برنامه اصلی وقفه های تایمر بلافاصله تولید میگردند ( و پس از اجرای SJMP $ مورد پذیرش واقع می شوند .
) .
به علت ترتیب اجرای ثابت ( شکل 2 را ببینید ) ، ایتدا وقفه های تایمر 0 سرویس دهی می شوند.
سزمان 1 ثانیهای از 20 بار تکرار زمان حاصل می شود.
R7 به عنوان شمارنده عمل می کند .
در 19 مرتبه از 20 مرتبه ، TOISR ، به این صورت عمل می کند : ابتدا ، تایمر 0 خاموش شده و از R7 یک واحد کم می شود .
سپس ، THO/TLO با 50000- بارگذاری مجدد می شود ، تایمر روشن شده و وقفه پایان می پذیرد .
در وقفه بیستم تایمر R7,0 به صفررسیده است ( 1 ثانی گذشته است) .
هر دو وقفه تایمر غیر فعال شده (CLR ET1,CLR ETO) و وقفه خاتمه می یابد .
تا باز شدن مجدد درب وقفهای تولید نخواهد شد .
فرکانس 400Hz بااستفاده از وقفه های تایمر 1 برنامه ریزی می شود .
برای 400Hz ،نیاز به پریود 1/400=2500 یا 1250 در وضعیت بالا و 1250 در وضعیت پایین داریم .
هر ISR 1 بسادگی 1250- را در TH1/TL1 قرار می دهد ، بیت درگاه راه انداز بلندگو مم می کند ، و سپس خاتمه می یابد .
7-6 زمان بندی وقفه در هر سیکل ماشین از وقفه ها نمونه برداری شده و در S5P2 ذخیره می شود .
(شکل 7 را ببینید ) این نمونه ها در سیکل ماشین بعدی حفظ شده و اگر وجودداشته باشد ،با شرط های زیر پذیرفته می شود : (الف) وقفه دیگری همسطح یاباتقدم بالاتر از این وقفه در جریان نباشد ، (ب) این سیکل ، اخرین سیکل دستورالعمل باشد ، و (پ) دسورالعمل جاری RETI یا هر نوع دسترسی به IE یا IP نباشد .
در دو سیکل ماشین بعدی پرزانده PC را در پشته پوش کرده ، آن را با آدرس برداری وقفه ار می کند .
آنگاه ISR شروع می شود .