رجیسترهای ورودی و خروجی میکروکنترلر AVR – آموزش AVR جلسه سوم

رجیسترهای ورودی و خروجی میکروکنترلر AVR

رجیسترهای ورودی و خروجی میکروکنترلر AVR

در جلسه سوم آموزش AVR سعی میکنم رجیسترهای ورودی و خروجی میکروکنترلر AVR رو هم توضیح بدم و کمی فراتر از ورودی/خروجی کردن پایه های میکرو به داخل میکروکنترلر AVR بپردازم.

 

رجیسترهای avr چه وظایفی دارند؟

همونطور که در جلسه ی اول آموزش از سری آموزش جامع AVR گفته شد . این میکروکنترلر دارای 32 رجیستر 8 بیتی میباشد.

در درس میکروپروسسور دانشجویان با رجیستر ها به شکل کامل آشنا میشن ، اما در یک توضیح کوتاه این بخشُ اینطوری معرفی میکنم که :

نوعی از واحد حافظه در میکرو هست که هر یک از 32 واحد اون 8 بیت یا یک بایت حافظه داره. این نوع حافظه چون ارتباط نزدیکی با پردازنده داره سرعت بالاتری نسبت به سایر بخش های حافظه رو در اختیار کاربر میزاره .( این واحد شباهت هایی با حافظه کَش در cpu کامپیوتر ها داره).

حالا ما با رجیستر ها چیکار داریم؟!

همونطور که گفتم یک نوع حافظه رو شامل میشه و چون سرعت بالایی داره معمولا اطلاعات مهم میکروکنترلر در اون ها ذخیره سازی میشه.اطلاعاتی مثل اینکه کدوم پایه ورودی/خروجی تنظیم میشه و اطلاعاتی از این دست که جلسات آینده مفصل بهشون پرداخته میشه.

در این بخش قراره 3 مورد از رجیستری هارو بشناسیم که عمل ورودی/خروجی رو انجام میدن و بعد از اون میتونین بدون کدویزارد تغییرات مورد نیزاتون رو در کد ها اعمال کنین .

 

رجیسترهای ورودی و خروجی میکروکنترلر AVR

رجیستری DDR :

شکل کلی این رجیستر به شکل زیر میباشد:

که بجای x با توجه به پورت مورد نظر مقدار های AوBوCوD قرار میگیره و در ادامه میشه شماره های 0 تا7 (شماره پایه ها رو قرار داد).

مقدار صفر برای این رجیستری یعنی تعریف پایه بعنوان ورودی و مقدار یک به معنی خروجی.

مثلا اگر بخوایم تمامی پایه های پورت D رو بعنوان خروجی تعریف کنیم باید بنویسیم:

مثال یک : تمایل داریم فقط 3 پایه ی اول پورت D یعنی پین های 0 تا 2 خروجی تعریف بشن باید DDR های اون رو به شکل زیر تعریف کنیم:

(پس هم میشه دونه دونه پایه رو تعریف کرد و یا یک پورت کامل رو ورودی یا خروجی تعریف کرد)

این عملیات رو میشه برای همه پورت ها انجام داد.

آدرسی دهی در میکروکنترلر ها به سه شکل صورت میگیره، دسیمال ، باینری و هگزادسیمال.

بعنوان نمونه اگر بخوایم مثال بالا رو به شکل باینری بنویسیم و 3 پایه رو خروجی تعریف کنیم  :

در این حالت هر بیت آدرس دهی یک پایه از میکرو برعهده داره.

0b در ابتدای عدد به معنی مبنای باینری میباشد.

0x در ابتدای عدد به معنی مبنای هگز میباشد.

و یا تعریف باینری و هگز زیر با هم برابر هستند.

نمایش در هگز :

 

کد هگز در کدویژن

 

رجیستری PORT :

این رجیستری زمانی کاربرد داره که ما یک پایه رو بعنوان خروجی تعریف کردیم.

زمانی که یک پایه ی میکرو خروجی تعریف میشه میتونه 2 نوع مقدار داشته باشه.مقدار یک (5 ولت) و یا مقدار صفر و حالتی بین این 2 وجود نداره.

با این رجیستری میتونیم هم مقدار اولیه ی صفر و 5 ولت هر پایه که بعنوان خروجی تعریف شده رو تعریف کنیم و هم مقدار هر پایه رو در حین برنامه در حلقه ی while تغییر بدیم.

در مثال یک سه پایه رو بعنوان خروجی تعریف کردیم.

حالا میخوایم دو پایه 0 و 2 رو پنج ولت تعریف کنیم، و پایه یک مقدار صفر داشته باشه.

پس به شکل زیر عمل میکنیم:

یا

که هر دو نمایش هم درست هستن.

 

رجیستر PINx :

این رجیستری برای خواندن یک پایه کاربرد داره ، یعنی وقتی که با رجیستری DDR مشخص کردیم یک پایه ورودی باشه ، در برنامه هرجا نیاز بود اون پایه خونده بشه از دستور پین استفاده میکنیم.
بعنوان مثال در پروژه 2 و در جلسه دوم – پورت های میکرو‌کنترلر ، با خوندن پایه و قرار دادن اون بعنوان شرط از این دستور استفاده کردیم.

اگر از آخرین ورژن کدویژن استفاده میکنید ، حتما توجه کردین که مثلا DDRA توسط کدویزارد به این شکل تعیین شده:

تعریف بالا و یا تعریف پایین از لحاظ مفهومی تفاوتی ندارن و درواقع تعریف بالا نحوه ای از نمایش به شکل باینری هست و ساختار متفاوتی نداره.

 

مثال : میخواهیم پایه های پورت D را یکی درمیان ورودی کنیم. بدون استفاده از بخش کدویزارد رجیستری های این پورت را تعریف کنید.(هم به شکل باینری و هم هگز)

این مطلب رو هم تا همینجا به پایان میرسونم.

اگر با پروتئوس آشنا نیستین ، جلسات آینده زیاد ازش استفاده میکنیم پس حتما این جلسه از آموزش AVR مهندس اعرابی رو ببنید که آموزش پروتئوس رو هم به شکل موازی درس میدن: جلسه چهارم – مهندس اعرابی

البته اگر بلد هستین کار کردن با این نرم افزار رو ، نیاز به دیدن این جلسه نیست و مطالبی که درباره AVR گفته میشه تا اینجا به شما عزیزان گفته شده یا در آینده حتما میگم.

همونطور که در جلسه قبل گفتم یکی از منابع این سری آموزشی ویدیو های ایشونه .برخی از دوستان طلب ضبط ویدیویی و آموزش با ویدئو کرده بودن اما زمانیکه ویدیو های با کیفیت وجود داره کار مفیدی نیست ضبط مجدد ویدیو.

سعی ام اینه که در مطالب از نکته هایی که ایشون در ویدیو هاشون میگن هم استفاده کنم یا مثل همین مطلب اگر نیاز بود به ویدیو های ایشون هم اشاره کنم تا کامل ترین آموزش avrجمع آوری و نوشته بشه.

در مطلب بعدی یک پروژه مناسبه آموزش آماده میکنم و بعد از اون میریم سراغ راه اندازی LCD با AVR .

موفق باشید.

حمیدرضا مودت

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

مطالب مرتبط

2 دیدگاه‌

  1. هرمزی گفت:

    واقعا عالی بود .
    دستتون درد نکنه .خیلی آموزشهای کامل و کاربردی ارائه دادید.
    ممنون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *