الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

با سلام و عرض ادب خدمت هموطنان عزیز
در این سایت قصد داریم موضوعاتی که در حیطه الکترونیک ،مکانیک و برنامه نویسی ربات ها دارای جذابیت خاصی می باشد رو آموزش بدیم. امیدواریم که با نظرات شما عزیزان شاهد آموزشهای جامعی در این زمینه باشیم.
با تشکر

نویسندگان
پیوندهای روزانه
طبقه بندی موضوعی
آخرین نظرات

چهارشنبه, ۲۵ آذر ۱۳۹۴، ۰۳:۲۲ ب.ظ

۰

 

 

در این بخش به ادامه بررسی رجیسترهای میکروکنترلر AVR خواهیم پرداخت.

مبحث این دفعه،بررسی رجیستر SREG میباشد.

 

با ما در ادامه مطلب همراه باشید !

در بخش قبلی در مورد رجیسترهای مهم I/O صحبت کردیم.

در ادامه به بررسی رجیستر "وضعیت" یا همون "Status Register" خواهیم پرداخت.

تقریبا میشه گفت که در برنامه نویسی با کامپایلرهای رایج،زیاد کارتون به این رجیستر گیر نمیکنه،اما خیلی رجیستر معروف و اساسی ای هست !

 

اول از همه یه نگاه به سر و ریختش بندازید :

 

طبق معمول 8 تا بیت داره (دیگه اینو باید بدونید که همه رجیسترهای میکرو AVR هشت بیتی هستند !).

با نام های I-T-H-S-V-N-Z-C .

 

خب این از شکل و شمایلش !

 

بریم سر اصل مطلب :

 

این رجیستر وضعیت جاری پردازنده را نشان میدهد و بر اثر برخی از عملیات CPU فعال میشود.

هنگام Reset شدن تمامی بیت های آن "0" میشوند.

 

به زبان خودمونیش این میشه :

ببینید ! وقتی میکرو دستورات یک سیکل رو انجام داد،سیکل که انجام شد وضعیت عملیات محاسباتی انجام شده رو اعلام میکنه.

در واقع این رجیستر همواره دارای اطلاعاتی از آخرین دستور محاسباتی اجرا شده است.

 

هرکدوم از بیتها که ازش بعنوان "فلگ (Flag)" یا "پرچم" نیز یاد میشود با حرف اختصاری وظیفه خود،نامگذاری میشوند.

 

حالا شروع میکنیم به توضیح هریک از فلگ ها و شرح وظایف آنها :

 

0.فلگ "C" یا همون "Carry" :

این بیت نشان دهنده وجود یک Carry در عملیات منطقی و محاسباتی انجام شده میباشد.

در صورت وجود Carry در عملیات این فلگ "یک" میشود.

 

Carry دیگه چه ... (چیه laugh) ؟

به هیچ عنوان نگرخید !

دوستانی که با مبحث مدارات منطقی آشنایی دارند حتما مفهوم "کری" رو میدونند چیه.(شاید به اسم "بیت نقلی" بشناسیدش )

حالا یه مثال هم میزنیم برای دوستانی که نمیدونند چیه یا یادشون نمیاد ؛

فرض کنید تو برنامه قراره دو تا عدد 11111111 و 1 با هم جمع بشند :

 

 

این "یکی" که بیت اضافی هست و بیت نهم حساب میشه رو Carry مینامند !

در واقع میکرو از طریق این پرچم متوجه میشه که علاوه بر هشت بیت اصلی،یک بیت نهمی هم وجود داره که اون در قالب هشت بیت نمیگنجیده !!!

حالا فرض رو بر این بگیرید که این فلگ اصلا تعبیه نشده بود ! میکرو از کجا میخواست بفهمه که حاصل 100000000 هست نه 00000000 ?!!

 

1.فلگ "Z" یا همون "Zero Flag" :

هنگامی که نتیجه عملیات ریاضی برابر صفر باشد برابر "یک" میشود.


2.فلگ "N" یا همون "Negative Flag" :

هنگامی که نتیجه یک عملیات منطقی یا ریاضی منفی شود این پرچم "یک" خواهد شد.

منفی بودن یک عدد مساوی با "1" بودن بیت شماره هفت عدد باینری (آخرین بیت) میباشد :

 


3.فلگ "V" یا همون "Overflow" :

این فلگ اعلام میکند که در انجام عملیات Overflow رخ داده است.

با Overflow شدن عملیات ، این بیت "یک" میشود.

 

این Overflow چقدر اسمش آشناست !

چی بود ؟؟؟

هرگاه دو عدد مثبت با هم جمع شوند و حاصل عددی منفی شود و یا هرگاه دو عدد منفی با هم جمع شوند و حاصل مثبت شود میگویند "Overflow" رخ داده است.

که باعث میشود خطا رخ دهد و نتایج اشتباهی بدست بیاد.

در واقع ما انتظار داریم با جمع دو عدد مثبت حاصل عددی مثبت شود و با جمع دو عدد منفی حاصل عددی منفی شود.

 

به مثال زیر نگاه کنید :

 

دقیقا همون اتفاق افتاده !

دو تا عدد منفی جمع شدند و حاصل مثبت شده !

 

میکرو باید آگاه بشه که خطا رخ داده ! نه ؟!

پس وظیفه این فلگ اعلام خطا به میکرو هست که محاسبات دچار اشتباه نشند خدای ناکرده !!!


4.فلگ "S" یا همون "Sign Flag" :

این فلگ در واقع علامت واقعی عدد را نمایش میدهد !

حالا چجوری ؟!

خیلی ساده ! با استفاده از یک عمل منطقی با نام "XOR".

میکرو میاد حاصل فلگ های "N" و "V" رو با هم XOR میکنه ! جوابشو میزاره تو فلگ "S".


5.فلگ "H" یا همون "Halfcarry Flag" :

اگر بین بیت 3 و 4 یک عدد باینری،Carry حاصل بشه این فلگ "یک" میشود.(معمولا در انجام عملیات BCD استفاده میشود !)


6.فلگ "T" یا همون "Transferbit Flag" :

از این فلگ جهت بارگذاری و ذخیره بیت ها از رجیستری به رجیستر دیگر استفاده میشود.(بی خیالش بشید فعلا !!!)


7.فلگ "I" یا همون "Interupt Flag" :

این فلگ مجوز صدور وقفه را صادر میکند.(وقفه دیگه چیه؟؟؟ (دوباره هول نکن عزیز دل برادر !!!))

هرگاه قرار باشه وقفه ای رخ بده،بعد از اینکه دستور اجرای وقفه صادر شد میکرو چک میکنه که آیا اصلا اجازه داره اون وقفه رو عملیاتی کنه یا نه ؟!

با "یک" شدن این پرچم،مجوز صادر میشود و پس از اجرای وقفه مجددا "صفر" میشود.


 

خب این هم از بررسی مهم ترین رجیستر میکروکنترلر AVR تحت عنوان Status Register یا SREG .

همونطور که بالاتر خدمتتون عرض کردم ما با این رجیستر بصورت مستقیم کاری نداریم مگر اینکه بخوایم در سطح "اسمبلی" برنامه نویسی کنیم.

 

یه توضیح کلی و مختصر بدم برای کسانی که شاید با این رجیستر احساس غربت پیدا کردند :

 

ببین آقاجون !

میکرو دستوراتی که توسط برنامه نویس نوشته شده رو قراره اجرا کنه.

شروع میکنه به ترتیب و خط به خط اجرا کردن برنامه نوشته شده.

همونطور که قبلا گفته شد به دلیل معماری خاص میکروکنترلر AVR اکثر دستورات در یک سیکل انجام میشوند.

میکرو یک دستور،مثلا "جمع" رو انجام میده.بعد از اینکه دستور اجرا شد حاصل رو بر میگردونه !

حاصل جمع میتونه هر عددی باشه ! (قرار نیست فقط 2 تا عدد خاص رو باهم جمع کنیم که !)

حاصل میتونه صفر،منفی،مثبت،دارای بیت نقلی،دارای خطای Overflow،دارای بیت نیم نقلی و ... باشه.

اما به دلیل فرم خاص 8 تایی بودن عدد باینری،باید یه سری ملاحظاتی رعایت بشه.

فرضا اگه عدد نهمی اضافه بشه،داخل قالب 8 تایی نمیگنجه و همین امر باعث بروز خطا در محاسبات میشه !

میکروکنترلر مادر مرده هم قراره برای من و شما عملیات منطقی و ریاضی رو انجام بده.ما هم کلی روش حساب کردیم و زشته که جواب اشتباه بده !

حالا برای اینکه اشتباه نکنه،بعد از اینکه هر دستوری رو اجرا کرد میاد و این رجیستر رو چک میکنه و موارد لازم رو لحاظ میکنه.

برای اینکه به موارد بالا پی ببرید مثالهای گفته شده را دقیقا بررسی کنید.

 

از بین این 8 فلگ،مهمترینشون برای ما،فلگ "Interupt Flag" هست که تحت عنوان فلگ "I" ازش یاد میشه.

فلگ صدور مجوز وقفه ! (میدونم که تو دلتون چه بد و بیراه هایی به من میدید ! اما عجله نکنید به توضیح وقفه هم میرسیم ).

اینکه وقفه چیه و به چه دردی میخوره مربوط به بحثای بعدیه،فعلا بدونید که با چنین فلگی کار داریم !!!

موفق باشید ...


منبع : www.noise.blog.ir
موافقین ۰ مخالفین ۰ ۹۴/۰۹/۲۵
قاسم قاسمی

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی