در زير مشخصات و عملكرد مد 2 تشريح شده می باشد.

1- اين يك تايمر 8 بيت می باشد، بنابراين فقط اعداد 00 تا FFH را براي بارشدن TH از ثبات تايمر اجازه مي دهد.

2- پس از بارشدن TH با مقدار 8 بيتي،‌8051 يك كپي از آن را به TL مي دهد. سپس تايمر بايد آغاز به كار كند. اين كار بوسيله دستور “SETB TRO” براي تايمر 0 و “SETB TRI” براي تايمر 1 انجام مي گردد. اين قسمت دقيقاً مثل مد 1 مي باشد.

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

3- پس از شروع تايمر، با افزايش ثبات TL شروع به شمارش مي كند. شمارش تا رسيدن به FFH ادامه دارد. وقتي كه از FFH به 00 باز گردد، پرچم TF را بالا مي برد. اگر از تايمر 0 بهره گیری گردد، TF0 بالا مي رود و اگر تايمر 1 مورد بهره گیری قرار گيرد، TF1 بالا خواهد رفت.

4- وقتي كه ثبات TL از FFH به 0 مي رود TF برابر 1 مي گردد و TL با مقدار اوليه بار شده در TH بطور خودكار مجدداً بار مي گردد. براي تكرار فرآيند بايد TF را فقط پاك كرده اجازه بدهيم بدون هر نيازي به بار شدن مقدار اوليه بوسيله برنامه نويس، كار ادامه يابد. اين قابليت، بر خلاف مد 1 كه در آن برنامه نويس بايد بار شدن مجدد TH و TL را انجام دهد مد 2 را بيك امكان خودكار با بار شدن اتوماتيك تبديل كرده می باشد.

بايد تأكيد كرد كه مد 2 يك تايمر 8 بيت می باشد. با اين وجود، قابليت بار شدن خودكار را دارد. در بار شدن خودكار،‌TH با مقدار اوليه بار مي گردد و سپس يك كپي از آن به TL داده مي گردد. بار كردن TH را تغيير نمي دهد، بلكه همچنان مقدار اوليه را حفظ م يكند. اين مد كاربردهاي متعددي دارد مانند آنها تنظيم ميزان باود می باشد كه در فصل 10 خواهيم ديد.

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

مراحل برنامه نويسي در مد 2

براي توليد يك تأخير زماني با مد 2 تايمر، مراحل زير را اجرا كنيد.

1- مقدار ثبات TOMD را بار كنيد تا مشخص گردد كدام تايمر بكار مي رود، و كدام مد تايمر انتخاب شده می باشد.

2- ثبات TH را با مقدار اوليه شمارش بار كنيد.

3- تايمر را شروع كنيد.

4- پرچم تايمر (TF) را با دستور “JNB TFx, target” رديابي كنيد تا ببينيد آيا بالا رفته می باشد. اگر TF بالا بود از حلقه خارج شويد.

5- پرچم TF را پاك كنيد.

6- به مرحله 4 بازگرديد زیرا مد 2 بطور خودكار بار مي گردد.

برنامه ريزي شمارنده

در آخرين بخش از تايمر/ شمارنده 8051 براي توليد تأخيرهاي زماني بهره گیری كرديم. اين تايمرها براي شمارش پديده هاي رخداده در خارج 8051 هم بهره گیری مي شوند. بهره گیری از تايمر/ شمارنده به عنوان يك پديده شمار، هر چه در بخش قبل راجع به تايمر گفته گردید، در برنامه ريزي آن به عنوان شمارنده، بجز منبع فركانس،‌صادق می باشد. وقتي كه تايمر / شمارنده به عنوان تايمر (زمان سنج) بكار رود، كريستال 8051 به عنوان منبع فركانس بكار مي رود. با اين وجود وقتي كه به عنوان شمارنده مورد بهره گیری قرار گيرد، پالس بيرون 8051 ثبات هاي TH و TL را افزايش مي دهد. در مد شمارنده، ثبات هاي TH و TL و TMOD همان هايي هستند كه در بخش قبل بحث شده؛ آنها حتي مي توانند نام يكساني داشته باشند. مدهاي تايمر هم يكسانند.

بيت C/T در ثبات TMOD

در بخش قبل ديديم كه بيت C/T در ثبات TMOD در مورد منبع ساعت براي تايمر تصميم مي گيرد. اگر C/T=0 باشد، تايمر پالس ها را از كريستال بدست مي آورد. پیش روی، وقتي C/T=1 می باشد، تايمر به عنوان شمارنده بكار رفته و پالس ها را از بيرون 8051 بدست مي آورد. بنابراين در C/T=1 شمارنده با ورود پالس ها به پايه هاي 14 و 15 رو به بالا مي شمارد. اين پايه ها T0 (ورودي تايمر 0 ) و T1 (ورودي تايمر 1 ) ناميده مي شوند. توجه كنيد كه اين دو پايه متعلق به پورت 3 هستند. در تايمر 0 ، وقتي C/T=1 می باشد، پايه P3.4 پالس ساعت را فراهم مي نمايد و بازاء هر پالس وارده از پايه، شمارنده رو به بالا مي شمارد. بطور مشابه، براي تايمر 1 ، وقتي C/T=1 باشد هر پالس ساعت وارده از پايه P3.5 موجب بالا رفتن شمارنده مي گردد.

ثبات TCON

در مثال هايي كه تا كنون ارائه شدند كاربرد پرچم هاي TRO و TR1 در روشن و خاموش كردن تايمرها را ملاحظه كرديم. اين بيت ها بخشي از ثباتي 8 بيتي به نام TCON (كنترل تايمر) می باشد. همانطور كه در جدول 2-9 ملاحظه گردید چهاربيت بالا براي ذخيره بيت هاي TF و TR در دو تايمر 0 و 1 بكار رفتند. 4 بيت پايين تر براي كنترل بيت هاي وقفه اختصاص يافته می باشد كه در فصل 11 در مورد آنها صحبت خواهيم كرد. متذكر مي شويم كه ثبات TCON يك ثبات آدرس پذير بيتي می باشد. در عوض بكارگيري دستوراتي زیرا “STEB “CLR TR1 , TR1” مي توانيم بترتيب از “SETB TCON” و “CLR TCON.6” بهره گیری كنيم. جدول 2-9 جايگزيني بعضي از دستوراتي را كه تاكنون ديده ايم نشان مي دهد.

وقفه هاي 8051

در اين بخش آغاز تفاوت بين سركشي و وقفه ها بررسي گرديده و سپس انواع وقفه هاي 8051 توصيف شده اند.

وقفه ها در برابر سركشي

يك ميكروكنترلر مي تواند چندين دستگاه را سرويس بدهد. براي انجام آن دو راه هست: روش وقفه و سركشي. در روش وقفه ، هر وقت وسيله اي به سرويس نياز داشته باشد، با ارسال يك سيگنال وقفه ميكروكنترلر را مطلع مي سازد. ميكروكنترلر پس از دريافت سيگنال وقفه،‌هر كاري را كنار گذاشته و به وسيله سرويس مي دهد. برنامه متعلق به وقفه ، سیاق سرويس وقفه (ISR)، يا اداره كننده وقفه ناميده مي گردد. در روش سركشي، ميكروكنترلر مرتباً وضعيت وسيله مورد نظر را رديابي مي كند. وقتي كه شرايط ايجاب مي كند،‌سرويس را انجام مي دهد. پس از آن به سراغ وسيله ديگر مي رود، تا اينكه همه را سرويس دهد. گرچه سركشي قادر می باشد وضعيت چندين دستگاه را رديابي كرده و تحت شرايطي آنها را سرويس دهد،‌ولي از نظر كاربرد ميكروكنترلر، يك روش كارآيي نيست. مزيت وقفه اين می باشد كه ميكروكنترلر مي تواند چندين وسيله را سرويس دهد (البته نه بطور همزمان) هر وسيله قادر می باشد توجه ميكروكنترلر را بر حسب اولويت منتسب به خود جلب كند.در روش سركشي امكان تخصيص اولويت وجود ندارد زيرا همه وسايل را بر حسب روش تخصيص دوره اي (rond-robin fasion) چك كند. مهمتر اينكه،‌در روش وقفه ميكروكنترلر قادر می باشد تا يك وسيله و تقاضاي آن را براي سرويس ناديده بگيرد. مجدداً اين كار در سركشي ميسر نيست. مهمترين دليل در ارجحيت وقفه اين می باشد كه روش سركشي بخش قابل توجهي از زمان ميكروكنترلر را با سركشي وسايل و دستگاههاي كه نياز به سرويس ندارند تلف مي كند. به بيان ديگر براي خودداري از كند شدن عملكرد ميكروكنترلر، وقفه ها بكار مي طریقه. مثلا در بحث تايمرها كه در فصل 9 انجام گردید ما از دستور “JNB TF, target” بهره گیری كرديم، و آنقدر صبر كرديم تا وقت تايمر به سر برسد. در آن مثال ضمن انتظار قادر به انجام هيچ كار ديگري نبوديم. اين همان وقت تلف شده اي می باشد كه مي توانستيم طي آن كارهاي مفيد بسياري انجام دهيم. در وضعيت تايمر،‌اگر از روش وقفه بهره گیری كنيم، ميكروكنترلر مي تواند مشغول به كار ديگري باشد و وقتي پرچم TF بالا برود به ميكروكنترلر در هر صورت وقفه بدهد.

سیاق سرويس وقفه

بازاي هر وقفه، بايد سیاق سرويس وقفه (ISR) يا اداره كننده وقفه اي وجود داشته باشد. وقتي كه وقفه اي رخ مي دهد، ميكروكنترلر سیاق سرويس وقفه را اجرا مي كند. بازاء هر وقفه بايد مكان ثابتي در حافظه تعريف گردد تا آدرس ISR را نگهدارد. مجموعه حافظه هاي كنار گذاشته شده براي نگهداري آدرس هاي ISR ، جدول بردار وقفه نام دارد.

مراحل اجراي يك وقفه

پس از فعال شدن وقفه، ميكروكنترلر وارد مراحل زير مي گردد.

1- اجراي دستور جاري را پايان مي دهد و آدرس دستور بعدي (PC) را در پشته ذخيره مي كند.

2- وضعيت جاري همه وقفه هاي دروني را نيز ذخيره مي نمايد (نه در پشته)

3- به مكان معيني از حافظه به نام جدول بردار وقفه كه آدرس سیاق سرويس وقفه را نگه مي دارد، پرش مي كند.

4- ميكروكنترلر آدرس ISR را از جدول بردار وقفه بدست آورده و به آن پرش مي نمايد. آنگاه شروع به اجراي زير سیاق سرويس وقفه مي كند تا به آخرين دستور كه RET1 می باشد برسد.

5- پس از اجراي دستور RET1 ، ميكروكنترلر به مكاني كه در آن وقفه را دريافت كرده بود، باز مي گردد آغاز، آدرس شمارنده برنامه را از پشته با برداشت از دو بايت بالاي پشته بازيافت مي كند و به PC مي فرستد. سپس شروع به اجراي برنامه از آن آدرس مي نمايد.

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

به حساسيت تأثیر پشته در مرحله 5 توجه كنيد. باين دليل بايد در دستكاري محتواي پشته در ISR دقت گردد، خصوصاً در ISR همچون فراخواني زير سیاق (CALL) ، تعداد درج ها (PUSH) و بازيافت ها (POP) بايد مساوي باشند.

 

شش وقفه در 8051

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

1- بازنشاني وقتي كه پايه بازنشاني فعال گردد، 8051 به آدرس 0000 پرش مي كند. اين همان بازنشاني مورد بحث در فصل 4 می باشد.

2- دو وقفه براي تايمرها كنار گذاشته شده می باشد: يكي براي تايمر 0 و ديگري براي تايمر 1 مكان هاي حافظه 000BH و 001BH در جدول بردار وقفه، به ترتيب متعلق به تايمر 0 و 1 هستند.

3- دو وقفه براي وقفه هاي سخت افزاري بيروني كنار گذاشته شده اند. پايه هاي شماره (P3.2)12 و (P3.3) 13 در پورت 3 به ترتيب براي وقفه هاي سخت افزاري INT1,INT0 مي باشند. اين وقفه ها ، EX2,EX1 هم خوانده مي شوند. مكان هاي 0003H و 0013H در جدول بردار وقفه به ترتيب INT1,INT0 تخصيص يافته اند.

4- تبادل داده سريال داراي وقفه اي می باشد كه متعلق به ارسال و دريافت مي باشد. مكان 0023H از جدول بردار وقفه به اين وقفه متعلق می باشد.

توجه كنيد كه در جدول 1-11 تعداد محدودي بايت براي هر وقفه كنار نهاده شده می باشد. مثلاً براي INT0 يعني وقفه 0 سخت افزار بيروني ، كلاً 8 بايت از مكان 0003 تا A000 در نظر گرفته شده می باشد. بطور مشابه 8 بايت از BH 000 تا H0012 براي TF0 ، وقفه تايمر 0 كنار گذاشته شده می باشد. اگر سیاق سرويس براي وقفه معيني آنقدر كوتاه می باشد تا در فضاي اختصاصي جاي گيرد، آن را در جدول بردار قرار دهيد تا به آدرس ISR تصریح كند.

در اين حال، بقيه بايت هاي متعلق به وقفه بلا بهره گیری مي مانند. در سه بخش بعدي، مثال هاي متعددي از برنامه نويسي وقفه كه اين مفاهيم را روشن كنند، خواهيم ديد.

از جدول 1-11 ديده مي گردد كه تنها سه بايت از فضاي ROM به پايه بازنشاني اختصاص يافته می باشد. اين مكان ها عبارتند از 0 و 1 و 2 آدرس مكان 3 متعلق می باشد به وقفه 0 سخت افزاري بيروني . باين دليل در برنامه به عنوان اولين دستور، LJMP را قرار مي دهيم و پردازنده را از جدول بردار وقفه طبق شكل 1-11 دور مي كنيم. در بخش بعد، خواهيم ديد كه چگونه اين مطالب در قالب مثال هايي پياده مي شوند.

 

فعال سازي و غير فعال سازي وقفه

پس از بازنشاني، همه وقفه ها غير فعال مي شوند، باين معني كه اگر هر كدام فعال شوند هيچيك بوسيله ميكروكنترلر پاسخ داده نمي شوند. براي اينكه ميكروكنترلر به آنها پاسخ دهد، بايد وقفه ها را با نرم افزار فعال كرد. ثباتي به نام فعال ساز وقفه ، IE ، مسئول اين تواناسازي و ناتوان كردن وقفه هاست. شكل 2-11 ثبات IE را نشان مي دهد. توجه كنيد كه IE يك ثبات آدرس پذير بيتي می باشد.

در شكل 2-11 توجه كنيد كه بيت D7 در ثبات EA,IE (تمام فعال ساز) خوانده شده می باشد. براي فعال شدن بقيه ثبات، اين بيت بايد 1 گردد. D6 بهره گیری نشده می باشد. 5D بوسيله 8052 بكار مي رود. بيت 4D براي وقفه سريال می باشد و به همين ترتيب.

مراحل فعال سازي يك وقفه

براي فعال كردن يك وقفه، مراحل زير اجرا مي گردد.

1- بيت 7D از ثبات IE (EA) بايد به سطح بالا برده گردد تا بقيه ثبات فعال گردد.

2- اگر EA=1 باشد، وقفه ها فعال شده و هنگامي كه بيت هاي مربوطه به هر وقفه در IE فعال گردد به آن وقفه پاسخ داده خواهد گردید. اگر EA=0 باشد، به هيچ وقفه اي پاسخ داده نمي گردد حتي اگر بيت هاي مربوطه در IE در سطح بالا باشند. براي درك اين نكته مهم به مثال 1-11 توجه فرماييد.

برنامه‌نويسي وقفه‌هاي تايمر

در فصل 9 چگونگي بهره گیری از تايمر 0 و تايمر 1 را با روش سركشي بحث كرديم. در اين بخش از وقفه‌ها براي برنامه‌ريزي تايمرهاي 8051 بهره گیری مي‌كنيم.

غلتيدن پرچم تايمر و وقفه

در فصل 9 بيان گردید كه، بهنگام رفتن تايمر از بالاترين شمارش ممكن به اولين شمارش، پرچم تايمر TF بالا مي‌رود. در آن فصل، ديديم كه چگونه TF را با دستور TARGET، JNB TF رديابي كنيم. در سركشي به TF مجبوريم آنقدر صبر كنيم تا TF بالا برود. مشكل موجود در اين روش اين می باشد كه ميكروكنترلر مادامي كه منتظر بالا رفتن TF می باشد گره خورده و كار ديگري نمي‌تواند انجام دهد. بهره گیری از وقفه اين مشكل را حل مي‌كند و از گره خوردن پيشروي آن جلوگيري مي‌نمايد. اگر وقفه تايمر در ثبات IE فعال گردد، هر وقت تايمر از بالاترين مقدار به پايين‌تر مقدار بغلطد (به 0 برسد)، TF بالا مي‌رود، و در نتيجه ميكروكنترلر از هر كاري كه در حال انجام آن باشد دست كشيده و به جدول بردار وقفه براي سرويس‌دهي ISR پرش مي‌كند. به اين ترتيب. ميكروكنترلر مي‌تواند تا زماني كه تايمر به 0 برسد مشغول كار ديگري باشد.

 

به نكات زير در برنامه مثال 2-11 توجه كنيد.

1- بايد از بكارگيري فضاي حافظه متعلق به جدول بردار وقفه خودداري كنيم. بنابراين همه كدهاي مقدار دهي اوليه را از حافظه 30H به بعد قرار مي‌دهيم. دستور LJMP اولين دستوري می باشد كه 8051 به هنگام روشن شدن اجرا مي‌كند. LJMP هميشه كنترل‌گر را از جدول بردار وقفه دور مي‌كند.

2- ISR براي تايمر 0 در مكان 000BH قرار دارد و به اندازه كافي براي جاي دادن فضاي آن متعلق به اين وقفه، كوچك می باشد.

3- ما وقفه تايمر 0 را با “MOV IE,# 10000010B” در برنامه اصلي “MAIN” فعال مي‌كنيم.

4- مادامي كه داده P0 بداخل آورده شده و مرتباً به P1 صادر مي‌گردد، هنگام صفر شدن تايمر (تغيير از پايه 0)، پرچم TF0 بالا مي‌رود و ميكروكنترلر از حلقه “BACK” خارج شده به 0000BH براي اجرا ISR مربوط به تايمر 0 خواهد رفت.

5- توجه كنيد كه در ISR تايمر 0 به دستور “CLR TF0” قبل از دستور RET1 نيازي نيست. دليل اين می باشد كه 8051 پرچم TF را ضمن پوش به جدول بردار وقفه پاك مي‌كند.

 

برنامه‌نويسي وقفه‌هاي سخت‌افزاري بيروني

8051 داراي دو وقفه سخت‌افزاري بيروني می باشد. پايه (P3.2)13 از 8051 كه براي NOT0 و NIT1 در نظر گرفته شده‌اند، براي وقفه‌هاي سخت‌افزاري بكار رفته‌اند. با فعال شدن اين پايه‌ها، 8051 تحت هر وضعيتي وقفه يافته و به جدول بردار وقفه براي اجراي سیاق سرويس وقفه پرش مي‌كند. در اين بخش اين دو وقفه سخت‌افزاري بيروني براي 8051 را با مثال‌هايي مطالعه خواهيم كرد.

وقفه‌هاي بيروني INT0 و INT1

در 8051 تنها دو وقفه سخت‌افزاري هست: NIT0 و INT1. اين وقفه‌ها بترتيب روي پايه‌هاي P3.2 و P3.3 از پورت 3 قرار دارند. مكان‌هاي جدول بردار وقفه براي INT0 و INT1 بترتيب عبارتند از 0003H و 0013H. همانطور كه در بخش 1-11 بيان گردید آنها بوسيله ثبات IE فعال يا غيرفعال مي‌شوند.

اين فعال شدن به چه صورت می باشد؟ براي وقفه‌هاي سخت‌افزاري بيروني دو سطح فعال شدن هست: (1) حساس به سطح، و (2) حساس به لبه. اجازه بدهيد تا به هر يك نگاه كنيم. آغاز ببينيم چگونه وقفه حساس به سطح كار مي‌كند.


وقفه حساس به سطح