پايه‌هاي P3.2 و P3.3 براي I/O معمولي به كار مي‌رود، مگر اينكه بيت‌هاي INT0 و INT1 در ثبات IE فعال شوند. پس از فعال شدن وقفه‌هاي سخت افزاري در ثبات IE، كنترل‌گر از پايه INTn در ازاء هر سيكل ماشين براي سيگنال سطح پايين شروع به نمونه‌برداي مي‌كند. طبق مستندات سازنده، پايه بايد تا شروع اجراي ISR پايين نگهداشته گردد. “اگر پايه INTn قبل از شروع اجراي ISR به منطق بالا بازگردد، وقفه‌اي رخ نخواهد داد. با اين وجود، بدليل فعال شدن وقفه با در نظر داشتن سطح پايين سيگنال وقفه، بايد قبل از اجراي دستور RETI ، آن را به سطح بالا آورد. مجدداً طبق مستندات يكي ديگر از سازندگان اگر پايه INTn پس از اجراي دستور RETI در ISR، همچنان در سطح پايين باقي بماند، وقفه ديگري پس از اجراي يك دستور رخ خواهد داد. ”

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

بنابراين به مقصود اطمينان از فعال شدن وقفه سخت افزاري در ايه INTn ، مطمئن شويد كه طول سيگنال سطح پايين حدود چهار برابر سيكل ماشين می باشد و بشتر نيت. دليل اين می باشد كه وقفه حساس به سطح لچ نيست.

بنابراين پايه بايد تا شروع اجراي ISR پايين بماند.

وقفه‌هاي حساس به لبه

همانطور كه قبلاً بيان گردید، پس از بازنشاني 8051، وقفه‌هاي INT0 و INT1 حساس به سطح خواهد گردید. براي تبديل آنها به نوع حساس به لبه، بايد بيت هاي ثبات TCON را برنامه‌نويسي كنيم. ثبات TCON، همراه با ديگر چيزها، بيت هاي پرچم IT1,IT0 كه تعيين كننده وقفه حساس به سطح يا لبه هستند، را نگه مي‌دارد. IT0 ,IT1 به ترتيب بيت‌هاي D0 و D2 از ثبات TCOn هستند. به آنها TCON.0 و TCON.2 هم مي‌گويند زيرا       ثبات TCON از نوع آدرس پذير بيتي می باشد. پس از بازنشاني، هر دو

TCON.0 ( ITO ) و TCON.2 ( IT1 ) در منطق 0 هستند، به اين معني كه وقفه‌هاي سخت افزاري پايه‌هاي INT0 و ITN1 به سطح حساس مي‌باشند. با بالا بردن بيت‌هاي TCON.0 و TCON.2 كه با دستوراتي زیرا “ SET B TCON.0 ” و

“ SET B TCON.2” انجام مي‌گردد، وقفه‌هاي سخت افزاري بيروني INT0 و ITN1، سيگنال‌هاي حساس به لبه خواهند گردید. مثلاً، دستور “ SET B TCON.2 ” آن چیز که را كه وقفه حساس به لبه می باشد در INT1 به وجودمي‌آورد. در اين حالت هنگام با گذر سطح بالا به پايين در سيگنال اعمال شده به پايه P3.3، ميكروكنترلر وقفه يافته و بمكان 0013H در جدول بردار وقفه براي سرويس ISR خواهد پريد. البته فرض بر اين می باشد كه بيت وقفه در ثبات IE فعال شده می باشد.

اكنون به مثال 6-11 توجه كنيد. تنها اختلاف اين برنامه با برنامه مثال5-11 اين می باشد كه در اولين خط MAIN ، دستور “SET B TCON.2 ” موجب مي‌گردد. تا UNT1 يك وقفه حساسبه لبه باشد. وقتي كه لبه پايين رونده سيگنال به پايه ITN1 اعمال گردید، LED يك لحظه روشن مي‌گردد. دوره روشن ماندن LED به تأخير زماني درون IER براي INT1 بستگي دارد. براي روشن كردن مجدد LED ، يك پالس بالا به پايين ديگر بايد به پايه P3.3 اعمال گردد. اين برخلاف مثال 5-11 می باشد. در مثال 5-11 با در نظر داشتن طبيعت حساسيت به سطح وقفه، مادامي كه ITN1 در سطح پايين نگه داشته گردید، LED در وضعيت روشن بود. ولي در اين مثال براي روشن كردن مجدد LED ، پالس ITN1 بايد به بالا برگدانده شده و سپس به سطح پايين برده گردد تا يك لبه پايين رونده براي فعال كردن وقفه انجام گردد.

نمونه‌برداري وقفه حساس به لبه

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

لبه پايين رونده بوسيله 8051 لچ شده و بوسيله قبات TCON نگهداري مي‌گردد. بيت‌هاي TCON.1 و TCON.3 لبه پايين رونده لج شده را بترتيب باري INT0 و ITN1 نگه مي‌دارند. TCON.1 و TCON.3 را IE0 و IE1 هم مي‌خوانند، شكل 6-11، آنها همچون پرچم هاي وقفه در حال سرويس اقدام مي‌كنند. وقتي كه پرچم وقفه در حال سرويس بال برود، باين معني می باشد كه به دنياي بيرون اعلام گردد، وقفه در حال سرويس می باشد و تا پايان سرويس به اين پايه وقفه INTn پاسخي داده نخواهد گردید. اين درست مانند سيگنال مشغولي بر روي تلفني می باشد كه در حال حاضر مشغول باشد. با در نظر داشتن بيت‌هاي IT0 و IT1 در ثبات TCON ، بر دو نكته بايد تأكيد كرد.

1- اولين نكته اين می باشد كه وقتي ISR ها پايان يافتند ( يعني دستور RETI اجرا گردید)، اين بيت‌ها ( TCON.1 و TCON.3 ) پاك مي‌شوند و باين معني می باشد كه وقفه پايان يافته و 8051 آماده پاسخگويي به وقفه ديگري در آن پايه می باشد.

براي تشخيص وقفه ديگر، پايه بايد به سطح بالا بازگردد و مجدداً به پايين بيايد تا بعنوان يك وقفه حساس به لبه شناخته گردد.

2- نكته دوم اين می باشد كه در حين اجراي سیاق سرويس وقفه، پايه INTn بدون در نظر داشتن اينكه چند بار گذر بالا به پايين را انجام مي‌دهد، چشم پوشي مي گردد. در واقع يكي از وظايف دستور RETI اين می باشد كه بيت مربوطه را در ثبات TCON ( TCON.1 يا TCON.3 ) پاك كند. اين به آن معني می باشد سیاق سرويس در حال اجرا نسيت و سرويس دهي پايان يافته می باشد. باين دليل TCON.1 و TCON.3 در ثبات TCON را پرچم‌هاي در حال سروي وقفه مي‌خوانند. هر وقت كه در پايه INT لبه پايين رونده تشخيص داده گردد، پرچم در حال سرويس بالا خواهد رفت و درهنگام اجراي ISR همچنان باقي مي‌ماند. اين پرچم فقط بوسيله RETI، كه آخرين دستور ISR می باشد پاك مي‌گردد. باين دليل نيازي براي بهره گیری از دستوري مثل “ CLR TCON.1 ( “CLR TCON.3 براي INT1 ) قبل از RETI در ISR مربوطه نيست. همانطور كه در بخش بعدي خواهيم ديد. اين مطلب در وقفه سريال صادق نيست.

IT0 و IT1

TCON.0 و TCON.2 بتريتب IT0 و IT1 خوانده مي‌شوند. اين دو بيت مدهاي سطح پايين يا حساس به لبه را در وقفه‌هاي سخت افزاري بيروني پايه‌هاي INT0 و ITN1 تنظيم مي كنند. هر دوي آنها پس از بازنشاني 0 مي‌شوند، كه بدينوسيله از نوع حساس به سطح پايين خواهند گردید. برنامه‌نويس مي‌تواند هر يك از آنها را به وقفه سخت‌افزاري بيروني حساس به لبه تبديل نمايد. در يك سيستم مفروض مبتني بر 8051 ، يكبار كه در 1 يا 0 تنظيم شوند، ديگر تغيير نمي‌يابند زيرا طراح آن را بعنوان وقفه حساس به لبه يا سطح تثبيت نموده می باشد.

IE0 و IE1

شما می توانید تکه های دیگری از این مطلب را در شماره بندی انتهای صفحه بخوانید              

TCON.1 و TCON.3 بترتيب IE0 و IE1 خوانده مي‌شوند. اين دو بيت بوسيله 8051 فقط براي رديابي وقفه حساس به لبه بكار مي‌طریقه، به بان ديگر اگر IT0 و IT1 هر دو 0 باشند، وقفه‌هاي سخت‌افزاري هر دو حساس به سطح پايين هستند. اين مطلب براي IE0 و IE1 هیچگاه چنين نيست. بيت‌هاي IE0 و IE1 بوسيله 8051 فقط براي لچ گذر لبه بالا به پايين در پايه‌هاي INT0 و ITN1 بكار مي‌طریقه. بعد از پالس‌گذار لبه در پايه INT0 ( يا ITN1 )، 8051 در ثبات TCON بيت IEx را علامت مي‌زند ( به سطح بالا مي‌برد)، به بردار مربوطه در جدول بردار وقفه مي پرد، و شروع به اجراي ISR مي‌نمايد. در حين اجراي ISR، هيچ تغيير سطح يا پالس H به L در INT0 ( يا INT1 ) تشخيص داده نمي‌گردد، و بنابراين از وقع هر وققه‌اي در وقفه جلوگيري مي‌نمايد. تنها اجراي دستور RETI در پايان ISR بيت IEx را پاك كرده و مشخص مي‌كند كه پالس جديد H به L

( بالا به پايين ) مجدداً وقفه‌ را فعال خواهد كرد. از اين بحث مي‌توان ديد كه بيت‌هاي IE0 و IE1 در درون بوسيله 8051 بكار مي‌ورد تا مشخص گردد ايا وقفه‌اي در حال اقدام می باشد يا خير. به بيان ديگر برنامه‌نويس كاري با اين بيت‌ها ندارد زيرا آنها مخصوص بهره گیری داخلي هستند.


TR0 و TR1

اين بيت ها، همان D4 ( TCON.4 ) و D6 ( TCON.6 ) از ثبات TCON هستند. ما اين بيت‌ها را دفصل 9 معرفي كرديم. آنها براي شروع و توقف تايمرهاي 0 و 1 بكار مي‌رفتند. گرچه ما از دستوري زیرا “ SETB TRx ” يا CLR TRx بهره گیری كرديم، ولي مي‌توانستيم دستورات “SETB TCON.4 ” و “ CLR TCON.4 ” هم بهره گیری نمائيم زيرا TCON يك ثبات آدرس پذير بيتي می باشد.

TF0 ‏و TF1

اين بيت‌ها همان D5 ( TCON.5 ) و D7 ( TCON.7 ) از ثبات TCON مي‌باشند. آنها بترتيب بوسيله تايمرهاي 0 و 1 براي مشخص كردن عبور از 0 بكار مي‌رفتند. گرچه ما از JNB Tfx , target   و “ CLR Trx ” بهره گیری كرديم، ولي مي توانستيم دستوراتي مانند TCON.5 JNB target و “ CLR TCON.5 ” را هم بكار ببريم زيرا TCON يك ثبات آدرس پذير بيتي می باشد.

قبل از پايان اين بخش به ليست همه پرچم هاي وقفه در جدول 2-11 توجه كنيد. در حالي كه ثبات TCON چهار پرچم وقفه را نگه مي‌دارد، در 8051 ، ثبات SCON پرچم هاي RI و TI را داراست.

شما می توانید مطالب مشابه این مطلب را با جستجو در همین سایت بخوانید                     

 

‌اولويت وقفه در 8051

عنوان مورد بحث بعدي اين می باشد كه اگر دو وقفه بطور همزمان فعال شوند، چه خواهد گردید؟ كدام يك از اين دو آغاز پاسخ داده مي گردد. اولويت وقفه تيتر اصلي در اين بخش می باشد.

اولويت وقفه بعد از بازنشاني

وقتي كه 8051 روشن گردد، اولويت ها بر طبق جدول 3-11 منتسب مي شوند. مثلاً از جدول 3-11 مي بينيم كه اگر وقفه سخت افزاري بيروني 0 و 1 بطور همزمان فعال شوند، آغاز به وقفه (INT0)0 پاسخ داده مي گردد. پس از سرويس دهي INT0 ، نوبت به سرويس دهي INT1 مي رسد زيرا INT1 داراي اولويت پايين تري می باشد. در واقعيت، مراتب اولويت در جدول چيزي غیر از رشته سركشي دروني نيست كه در آن 8051 وقفه ها برحسب ترتيب ليست شده در جدول 3-11 سركشي مي نمايد و بر طبق آن پاسخ مي دهد.

تنظيم اولويت وقفه با ثبات IP

مي توانيم با بر هم زدن ترتيب جدول 3-11 اولويت بالاتر را به هر يك از وقفه ها بدهيم. اين كار با برنامه نويسي ثباتي بنام IP (اولويت وقفه) انجام مي گردد . شكل 8-11 بيت هاي ثبات IP را نشان مي دهد. پس از بازنشانده شدن، ثبات IP تماماً 0 خواهد بود، و بنابراين ترتيب اولويت مطابق جدول 12-11 توجه كنيد.

نكته ديگري كه بايد روشن گردد اين می باشد كه دو يا چند بيت اولويت وقفه در ثبات IP در سطح بالا قرار گيرند. در اين حالت، ضمن اينكه اين وقفه ها اولويت بالاتري از ديگران دارند، بر طبق ترتيبشان درجدول 3-11 خواهند بود. مثال 13-11 ملاحظه گردد.

وقفه در درون وقفه

اگر 8051 در حال اجراي ISR متعلق به يك وقفه باشد و وقفه ديگري فعال گردد چه خواهد گردید؟ در اين حالت يك وقفه با اولويت بالاتر مي تواند اولويت پايين را وقفه دهد. اين، وقفه در درون وقفه می باشد. در 8051، يك وقفه پايين رتبه مي تواند با وقفه بالاتر وقفه يابد و نه با وقفه پايين تر. گرچه همه وقفه ها لچ شده و در درون نگهداري مي شوند، هيچ وقفه اولويت پايين تر نمي تواند توجه فوري CPU تا اتمام سرويس هاي وقفه هاي بالا رتبه در 8051 را به خود جلب كند.