up
Search      menu
علم و تکنولوژی :: مقاله ميکرو کنترلر PDF
QR code - ميکرو کنترلر

ميکرو کنترلر

انواع روش هاي آدرس دهي در ميکرو کنترلر

مبحث مهمي که در برنامه نويسي به زبان اسمبلي وجود دارد شيوه هاي آدرس دهي است .منظور از آدرس دهي روش دستيابي ميکرو پروسسور به اطلاعات است آدرس دهي ، مبدا و مقصد داده را تعيين مي کند و اينکه در جريان انتقال داده از مقصد به مبدا چه عملياتي بايستي انجام شود .قبل از پرداختن به تشريح دستور العمل هاي اسمبلي 8051 ، انواع شيوه هاي آدرس دهي را بيان مي کنيم.
در 8051 هشت نوع آدرس دهي وجود دارد که در اين مطلب اين شيوه هاي آدرس دهي را با هم بررسي خواهيم کرد.
• آدرس دهي ثبات(Register Addressing)
• آدرس دهي مستقيم (Direct Addressing)
• آدرس دهي غير مستقيم (Indirect Addressing)
• آدرس دهي فوري (Immediate Addressing)
• آدرس دهي نسبي (Relative Addressing)
• آدرس دهي مطلق( Absolute Addressing)
• آدرس دهي طولاني (Long addressing)
• آدرس دهي دهي انديس دار (Index Addressing)
آدرس دهي ثبات:
همانگونه که مي دانيد در 8051 هشت ثبات با نام بانک ثبات وجود دارند که اين ثبات ها به صورت تک تک با نام هاي R0-R7 شناخته مي شوند تعدادي از دستور العمل هاي 8051 بر روي اين ثبات ها کار مي کنند اين دستور العمل ها را دستور هاي با آدرس دهي ثبات گويند.البته چند دستور ديگر هم وجود دارند که فقط بر روي يک ثبات خاص عمل ميکنند مانند ثبات هاي A,B و ثبات DPTR(همان اشاره گر داده) و بيت C (داده نقلي) ثبات PSW( کلمه وضعيت برنامه) اين دستور العمل ها هم آدرس دهي ثبات را به کار گرفته اند.
مثالي از اين نوع دستورات به صورت زير است (اگر مفهوم دستورات را متوجه نمي شويد اشکالي ندارد در مقاله هاي بعدي توضيح کافي بر روي تک تک دستورات داده خواهد شد ):
ADD A,R0
INC DPTR
MUL AB
DIV AB
آدرس دهي مستقيم :
گفتيم که هر بايت (8 بيت) از حافظه ميکرو به وسيله عددي منحصر به فرد که شماره رديف آن بايت است مشخص مي شود اين عدد منحصر به فرد آدرس نام دارد . از اين جهت مي گوييم منحصر به فرد زيرا هيچ دو بايت از حافظه ي ميکرو داراي يک آدرس نيستند!.
با استفاده از اين آدرس مي توان به کليه مکانهاي حافظه دسترسي داشت .آدرس دهي مستقيم از اين آدرس استفاده مي کند .
علاوه بر آدرس ، بيشتر مکان هاي حافظه داراي نام نيز هستند.براي مثال پورت يک، هم داراي آدرس 90H است و هم نام P1 را دارد . استفاده از هردو (نام يا آدرس) در برنامه نويسي مجاز است .
در برنامه نويسي هنگامي که عددي را بدون هيچ پيشوندي مي نويسند نشان دهنده استفاده از آدرس دهي مستقيم است.
آدرس دهي غير مستقيم :
آدرس دهي غير مستقيم نيز از آدرس بيات مورد نظر استفاده مي کند .تفاوت آن با آدرس دهي مستقيم اين است که در آدرس دهي غير مستقيم آدرس مکان حافظه ابتدا در يکي از ثبات هاي بانک ثبات قرار مي گيرد وسپس ثبات مذکور به همراه پيشوند @( At sign) در دستور العمل استفاده مي شود.
کاربرد اين نوع آدرس دهي براي مواقعي است که آدرس يک متغير بايستي در زمان اجراي برنامه ، نه در زمان نوشتن کد ، محاسبه شود و نيز هنگام استفاده از مکانهاي متوالي حافظه نيز بايد از آدرس دهي غير مستقيم استفاده کنيم . در موارد بالا نمي توانيم از آدرس دهي مستقيم و ثبات استفاده کنيم زيرا اين دو آدرس دهي در هنگام کامپايل برنامه به آدرس مکان حافظه نياز دارند در حالي که ما آدرس مکان حافظه را نمي دانيم .
براي فهم بيشتر مطلب دو دستور زبر را در نظر بگيريد:
MOV R0,#90h
MOV @R0,A
دستور اول عدد 90 در مبناي شانزده زا در ثبات R0 قرار مي دهد – به علامت #( number sign) قبل از عدد توجه کنيد مبحث بعدي آدرس دهي ماست- عدد 90h آدرس پورت يک مي باشد . دستور دوم به ميکرو دستور مي دهد تا محتواي ثبات A را در آدرسي که در R0 است( يا مکاني که R0 به آن اشاره مي کند ) قرار بده .
جمله بالا در مفاهيم برنامه نويسي به نام اشاره گر معروف است . اشاره گر متغيري است که آدرس مکاني از حافظه را در خود نگه مي دارد .
در اين دستور @R0 معادل همان P1 است .
آدرس دهي فوري يا بلافصل :
در صورتي که بخواهيم يک عدد ثابت – نه يک آدرس – را در مکاني از حافظه قرار دهيم از آدرس دهي فوري استفاده مي کنيم .دستور اول در مثال قبلي نوعي از آدرس دهي فوري بود . مشخصه ي آدرس دهي فوري استفاده از پيشوند # قبل از عدد است .
در صورتي که در يک دستور از عددي استفاده کنيم اگر عدد بدون پيشوند باشد نوع آدرس دهي مستقيم است و در صورتي که عدد پيشوند # داشته باشد آدرس دهي فوري خواهد بود .به اين دو دستور توجه کنيد تا اين جمله را بهتر متوجه شويد:
MOV A,#90h
MOV A,90h
دستور اول عدد 90 در مبناي شانزده را در ثبات A قرار مي دهد . بعد از اجراي دستور مطمئن هستيم که محتواي ثبات A ، 90h است . دستور دوم مقداري را که در آدرس 90h حافظه است در ثبات A قرار مي دهد يادآوري مي کنم که 90h آدرس پورت يک است .بنابراين هر عددي که بر روي پورت يک قرار داشته باشد در درون ثبات A قرار خواهد گرفت .و ما از مقدار اين عدد هيچ اطلاعي نداريم .
توجه:
در برنامه نويسي ميکرو مي توان از مبنا هاي عددي مختلف ستفاده کرد . اين کار با اسفاده از نوشتن عدد و نوشتن مشخصهي عدد درست بعد از آن ، به عنوان پسوند (در سمت راست عدد) صورت مي گيرد .
مشخصه ي مبنا هاي عددي به صورت زير است:
B براي مبناي دودويي يا binary
D براي مبناي دهدهي ياdecimal
H براي مبناي شانزدهي يا hexadecimal
در صورتي که قصد استفاده از مبناي ده را داشته باشيم مي توانيم از پسوند D صرفنظر کنيم مبناي ده پيش فرض کامپايلر است .
اگر از مبناي شانزدهي در برنامه استفاده کرديم اگر اولين رقم سمت چپ عدد ( پر ارزش ترين رقم ) رقمي بين A-F در مبناي شانزده بود بايد قبل از عدد يک صفر 0 قرار دهيم مثلا عدد 0FFh بنويسيم.
آدرس دهي نسبي :
اين نوع آدرس دهي در چند دستورالعمل پرشي به کار رفته است.(مانند sjmp) با استفاده از اين نوع آدرس دهي مي توان به 127 بايت بالاتر و 127 بايت پاينتر از مکان فعلي برنامه پرش کرد . هنگامي که کامپاير به اين نوع دستورات پرشي مي رسد آدرس مبدا را از آدرس مقصد تفريق مي کند ونتيجه را به شمارنده برنامه اضافه مي کند (pc) دستور زير را در نظر بگيريد:
90 sjmp 100
اکنون در مکان 90 حافظه هستيم برنامه مي خواهد به مکان 100 پرش کوتاه انجام دهد .آدرس مبدا از مقصد کم مي شود (100-90) و به pc ، +10 واحد اضافه مي گردد.
مزيت اين نوع آدرس دهي اين است که کد مستقل از مکان ايجاد مي کند.
آدرس دهي مطلق :
تنها دو دستور العمل Acall,Ajmp از اين نوع آدرس دهي استفاده مي کنند آدرس مبدا و مقصد هر دو بايد در يک صفحه دو کيلو بايتي از حافظه باشند . اين دستورات کد وابسته به مکان توليد مي کنند .
آدرس دهي طولاني :
دو دستور Ljmp ,Lcall از اين نوع آدرس دهي استفاده مي کنند.مبدا و مقصد مي توانند در يک صفحه 64 کيلو بايتي باشند ( کل فضاي حافظه پوشش داده شده است ).
اين نوع آدرس دهي هم وابسته به مکان است.
توجه :
منظور از کد وابسته به مکان بدين صورت است:
فرض کنيد برنامه اي نوشته ايم که از فضاي 100 حافظه شروع مي شود .برنامه زير
100 sjmp there
101….
….
….
105 there :Ajmp 110
…..
….
110 here: ------
در اين برنامه از آدرس 100 به 105 که داراي برچسب there است پرش مي کند و از there هم به here پرش ميکند .حال اگر همين برنامه را روي ميکروي ديگري که برنامه از آدرس 50 شروع شده باشد اجرا کنيم منطق برنامه به صورت زير در مي آيد:
50 sjmp there
101….
….
….
55 there :Ajmp 110
…..
….
60 here: ------
--- ----- ----
110 :---- ----
دستور sjmp که از آدرس دهي نسبي استفاده مي کند به مکان درست there پرش مي کند اما دستور ajmp که از آدرس دهي مطلق استفاده مي کند به جاي پرش به here به مکان 10 حافظه پرش مي کند که اصلا مورد نظر برنامه نويس نبوده است !!!
براي رفع اين مشکل از دستور ORG در ابتداي برنامه استفاده مي کنيم تا به کامپايلر بگوييم که برنامه ما بايد از چه مکان حافظه اي بايستي شروع شود .
ORG 100
100 sjmp there
101….
….
….
105 there :Ajmp 110
…..
….
110 here: ------
آدرس دهي انديس دار:
اين آدرس دهي از يک ثبات پايه (pc يا DPTR ) و يک فاصله نسبي (A) براي دستور العمل هاي JMPو MOVC استفاده مي کند اين نوع آدرس دهي در نوشتن جداول جستجو(LOOKUP Table) استفاده مي شوددر آينده نمونه اي از اين نوع برنامه ها را خواهيم نوشت .
MOVC A,@A+DPTR

اساس عملکرد ميکروسکوپ انتقال الکتروني (Transmission Electron Microscope) که به اختصار به آن TEM گويند مشابه ميکروسکوپ هاي نوري است با اين تفاوت که بجا ...

ميکروکنترلر سيستم هاي مبتني بر ميکروکنترلر بلوك دياگرام سيستم مبتني بر ميکروکنترلر ملزومات سخت افزاري و اجزاء داخلي سيستمهاي مبتني بر ريزپردازنده ها م ...

موضوع ميکرو لنزيگ به نظر مي رسد که مبحث جديدي در علم ستاره شناسي باشد اما واقعيت امر اين است که اين روش عمري طولاني دارد. در سال ۱۹۳۶ آلبرت انيشتين مب ...

ميکروبيولوژي دانشي است که درباره ريزسازواره‌هايا جانداران بسيار ريز بحث و گفتگو مي‌کند. جانداراني که در ميکروبيولوژي بيشتر بررسي مي‌‌شوند شامل پروکاري ...

زمان ظهور نانوسراميک ها را مي توان دهه ۹۰ ميلادي دانست. در اين زمان بود که با توجه به خواص بسيار مطلوب پودرهاي نانوسراميکي، توجهاتي به سمت آنها جلب شد ...

حدود دو هفته از پنجاهمين سالگرد ايجاد فناوري ليزر مي گذرد و همين موضوع بهانه اي شد تا به پيشرفت هاي جديد در زمين ليزر(Laser) بپردازيم . واژه Laser مخف ...

مايت ها يا هيره هاي گرد و غبار حشرات کوچکي هستند که در فرش ها، بالش ها و پارچه ها و ساير جاهاي گرمي که غبار ممکن است جمع شود زندگي مي کنند . فضولات اي ...

عدم موفقيت دانشمندان در ساخت موتورهاي ريز، دست يابي به روبات هاي بسيار ريز را تاکنون به تاخير انداخته بود مينياتوري کردن موتورها تاکنون نتوانسته است ب ...

دانلود نسخه PDF - ميکرو کنترلر