کنترلر   8051

     


یک سیستم میکرو کامپیوتری

RAM

ROM

ابزار موازی

ابزار سری

وقفه خارجی

پالس خارجی

رابط سریال

رابط موازی

کنترل وقفه

TIMER

میکرو کنترلر ها

 

 

 

اولین خانواده میکرو کنترلر ها با نام MCS-51 توسط شرکت اینتل طراحی و ساخته شد .بعد ها شرکت های دیگری تحت مجوز اینتل شروع به تولید IC های میکرو کنترلر کردند .

از خانواده MCS-51 اولین عضو 8051 می باشد مشخصات این IC به صورت زیر است:

 



1 - 4 کیلو بایت ROM

2- 128 بایت RAM

3-      4  پورت ورودی و خروجی 8 بیتی

4-  دو تایمر/شمارنده 16 بیتی

5- رابط سریال برای ارتیاط با دیگر وسایل

6-     64  کیلو بایت حافظه کد خارجی و 64 کیلو بایت هم حافظه داده خارجی را می تواند آدرس دهی کند

7- پردازنده بولی برای انجام اعمال بیتی

8-     210 مکان بیت آدرس پذیر


پایه ها :

این IC همانگونه که در شکل بعد می بینید دارای 40 پایه می باشد پایه 20 به زمین و پایه شماره 40 به منبع تغذیه 5 ولت متصل می شود.این میکرو کنترلر دارای 4 پورت I/O (ورودی - خروجی ) 8بیتی می باشد که 32 پایه از 40 پایه را به خود اختصاص داده اند به جز پورت شماره 1 سه پورت دیگر دو کاره هستند و علاوه بر عمل ورودی - خروجی کار دیگری را نیز بر عهده دارند.

پورت شماره صفر:

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

پورت شماره 2:

(پایه های شماره 21 تا 28) همانند پورت شماره صفر یک درگاه دو منظوره است و بایت بالای آدرس را در استفاده از حافظه خارجی انتقال می دهد.

پورت شماره 3:

علاوه بر ورودی و خروجی بودن ، هر یک از پایه های آن دارای عملکرد بخصوصی هستند که در جدول زیر آمده است .

PSEN:
(پایه شماره 29) این پایه فعال صفر است ( یعنی در صورتی که به این پایه صفر منطقی بدهیم عملکرد تعریف شده برای این پایه انجام میشود).PSEN مخفف Program Storage Enable است در صورتی که از حافظه خارجی برای کد استفاده کنیم این پایه به پایه OE ( Output Enable) EPROM حاوی کد متصل می شود و میکرو کنترلر بدین ترتیب می تواند برنامه را از حافظه EPROM بخواند .

ALE:
(پایه شماره 30) این پایه هم فعال صفر است .مخفف Address Latch Enable می باشد در توضیح پورت شماره صفر گفتیم که این پورت به عنوان آدرس و داده مالتی پلکس استفاده می شود. هنگامی که ALE فعال باشد پورت شماره صفر در نیم سیکل اول آدرس را نگه می دارد و در نیم سیکل بعدی حافظه داده را نگه میدارد به عبارت دیگر این پورت در نیم سیکل اول به عنوان گذرگاه آدرس و در نیم سیکل بعدی به عنوان گذرگاه داده عمل می کند .

EA:
(پایه 31 )فعال صفرو مخفف External Access می باشد این پایه به صفر ولت یا 5 ولت متصل می شود . در صورتی که به 5 ولت وصل شود برنامه از ROM داخلی میکرو کنترلر اجرا می شود و در صورتی که به صفر ولت متصل سود برنامه از EPROM خارجی اجرا می شود.

RST:
( پایه 9) سیستم را reset می کند . در صورتی که این پایه 5 ولت به آن اعمال شود برنامه از اولین دستور مجددا اجرا می شود . این دکمه مشابه دکمه ریست کامپیوتر می باشد .



حافظه ی8051:

بانک های ثبات :

8051 دارای 8 ثبات با نام های R0-R7 می باشد دستوراتی که از این ثبات ها استفاده می کنند نسبت به دستورات مشابه خود که از انواع دیگر آدرس دهی استفاده می کنند دارای تعداد بایت کمتر و سرعت بیشتری هستند بنابراین در صورتی که از داده ای به طور متناوب در برنامه استفاده می کنیم بهتر است که این داده در یکی از ثبات های بانک ثبات قرار گیرد .

در 8051 ، 4 بانک ثبات وجود دارد که در هر لحظه از زمان می توان فقط یکی از این بانکها را فعال و از آن استفاده نمود .برای فعال کردن یک بانک ثبات از دو بیت با نامهای PSW.3, PSW.4 استفاده می کنیم ان دو بیت جزئ ثبات PSW هستند.

ثبات PSW:

مخفف Program status word یا کلمه وضعیت سیستم است . این ثبات در هر سیکل ماشین بسته به وضعیت و جواب برنامه تغییر می کند و برنامه نویس می تواند بر اساس این تغییرات منطق برنامه را تغییر دهد. PSW مشابه Flag های ریز پردازنده های سیستم های میکرو کامپیوتری می باشد.



(Program status register) psw

CY
AC
F0
RS1
RS0
OV
----
P







بیت P:

این بیت برای تنظیم توازن زوج مقدار آن صفر یا یک می شود.در صورتی که تعداد یک های داخل Accumulator فرد باشد این بیت یک می شود تا مجموع یک ها زوج باشد این یک روش ساده تشخیص تعداد فرد خطا در انتقال اطلاعات می باشد. برای مثال اگر Accumulator عدد 00000011 را در مبنای دو در خود داشته باشد چون در این مثال تعداد 1 ها دو عدد می باشد بنابراین بیت توازن صفر می شود تا تعداد یک ها زوج باقی بماند .

بیت OV:

این بیت با نام (Over flowسر ریز ( نام دارد .اگر هنگام جمع یا تفریق حسابی (اعداد علامتدار) نتیجه از +127 بیشتر یا از -127 متر شود این بیت 1 می شود.


بیت RS1,RS0 :این دو بیت به منظور فعال کردن یکی از چهار بانک ثبات مورداستفاده قرار می گیرد.مقدار پیش فرض این دو بیت 00 است که بانک ثبات صفر را فعال می کند .





بیت F0:

این بیت با نام پرچم صفر هم شناخته شده است .اگر نتیجه ی یک عمل حسابی صفر شود این بیت یک می شود.

بیت AC:

)بیت نقلی کمکی) در هنگام انجام عملیات حسابی در صورتی که از بیت شماره 3 به شماره 4 رقم نقلی داشته باشیم در این صورت این بیت یک می شود .

بیت CY :

)بیت نقلی) اگر در طول عملیات حسابی از بیت 7 رقم نقلی به بیت بالا تر داشته باشیم این بیت یک می باشد .

ثبات A:

Accumulator یا انباره نامیده می شود.این ثبات همه منظوره است بیشتر دستورات میکرو کنترلر با این ثبات کار می کند .بنابراین ابتدا باید داده در این ثبات قرار گیرد سپس عملیات انجام شود.

ثبات B:

جزو ثبات های عمومی است برای انجام عملیات ضرب و تقسیم به همراه ثبات A به کار می رود.

ثبات DPTR :

این ثبات یک ثبات 16 بیتی است که از دو ثبات 8 بیتی با نامهای DPL و DPH ساخته شده است و به عنوان اشاره گر داده به کار می رود در هنگام استفاده از حافظه داده خارجی کاربرد این ثبات را خواهیم دید.




برای کار با میکرو کنترلر به چه چیزی احتیاج داریم؟

اولین چیزی که در یک پروژه میکرو کنترلری برجسته تر به نظر می رسد کد نویسی است .یک برنامه نویس میکرو کنترلر باید با زبان اسمبلی آشنا باشد . البته کلمه " اسمبلی " یک کلمه عمومی است و به کلیه زبانهای سطح پایین (low level) گفته می شود در حالی که هر میکرو کنترلری یا میکرو پروسسوری اسمبلی مختص به خود را دارد یعنی اسمبلی 8051 با اسمبلی Z80 متفاوت است در میکرو پروسسور ها هم تفاوت زیادی بین اسمبلی نسل های میکرو پروسسور ها وجود دارد اسمبلی Z80 با اسمبلی پنتیوم تفاوت دارد به زبان دیگر چون معماری میکرو ها با هم متفاوت است در نتیجه اسمبلی آنها هم با هم متفاوت است .البته کسی که با اسمبلی یک میکرو آشنا باشد برنامه نویسی در یک میکروی دیگر برایش زیاد دشوار نیست . زبان های دیگری هم برای برنامه نویسی میکرو کنترلر استفاده می شوند مانند C و pascal البته این زبان ها هر کدام در یک کامپایلر به خصوص کار می کنند برای مثال کامپایلر keil هر دو زبان اسمبلی و C را پشتیبانی می کند .

با فرض اینکه ما با زبان اسمبلی 8051 آشنا هستیم برنامه خود را در ادیتور مانند keil یا Notepad می نویسیم و سپس به وسیله یک کامپایلر مانند ASM51 که کامپایلر اینتل برای 8051 است برنامه را به فایل HEX تبدیل می کنیم .( keil خود دارای کامپایلر است و فایل Hex را تولید می کند) فایل Hex درست مانند فایلهای EXE در کامپیوتر است یعنی یک فایل اجرایی برای میکرو کنترلر است . بعد از کامپایل کردن باید برنامه توسط یک پرو گرامر ( وسیله ای که IC8051 را برنامه ریزی می کند) بر روی IC قرار گیرد .

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

مبحث مهمی که در برنامه نویسی به زبان اسمبلی وجود دارد شیوه های آدرس دهی است .منظور از آدرس دهی روش دستیابی میکرو پروسسور به اطلاعات است آدرس دهی ، مبدا و مقصد داده را تعیین می کند و اینکه در جریان انتقال داده از مقصد به مبدا چه عملیاتی بایستی انجام شود .قبل از پرداختن به تشریح دستور العمل های اسمبلی 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 صرفنظر کنیم مبنای ده پیش فرض کامپایلر است .


 

 

اسمبل كردن و اجرای یك برنامه در 8051:

1.       ابتدا برنامه باید در یك ادیتور مناسب نوشته شود. ادیتور باید قادر به تولید فایل اسكی باشد (مثل Notepade ). فایل مبدا بسته به اسمبلر به كار رفته دارای توسعه ″asm″ یا ″src″ می‏ باشد.

2. فایل مبدا كه حامل كد عمیات ایجاد شده از مرحله 1 است به اسمبلر 8051 داده می‏ شود. اسمبلر دستورالعمل‏ها را به كد ماشین تبدیل می ‏كند.
اسمبلر یك فایل مقصد (obj) و یك فایل لیست (lst) ایجاد می ‏كند. اسمبلر 8051 فایل‏های asm را كه از دستورات زبان اسمبلی ساخته شده‏ اند به زبان ماشین تبدیل كرده و بدینوسیله فایل obj ایجاد می‏ گردد.
علاوه بر آن یك فایل لیست هم ایجاد می ‏شود. این فایل لیست اختیاری است و برای برنامه‏ نویسان بسیار مفید است زیرا همه كدها و آدرس‏ها همراه با خطاهایی كه اسمبلر شناسایی كرده است، در این فایل لیست می ‏شود. این فایل به وسیله ادیتوری مانند Dos Edit دستیابی شده و چاپ می ‏شود. برنامه ‏نویس فایل لیست را برای یافتن خطاهای نحوی به كار می ‏برد. پس از اصلاح همه خطاها كه در فایل لیست آمده است، فایل obj آماده ورود به برنامه پیوند است.

3. اسمبلرها نیاز به سومین مرحله دارند كه پیوند خوانده می ‏شود. برنامه پیوند یك یا چند فایل مقصد را دریافت و یك فایل مقصد مطلق را با توسعه فایل ″abs″ ایجاد می ‏نماید. این فایل به وسیله كسانی كه بر روی 8051 برنامه مونیتور دارند، مورد استفاده قرار می‏ گیرد.

4. سپس فایل ″abs″ به داخل یك برنامه به نام ″OH″ (مبدل مقصد مبنای 16) كه فایلی با توسعه ″hex″ ایجاد می‏ كند برده می ‏شود كه این یك برنامه آماده برای سوزانده شدن در ROM است. این برنامه همراه با همه اسمبلرهای 8051 ارائه می‏ شود. اسمبلرهای مبتنی بر windows هر دو مرحله 2 و 4 را در یك مرحله انجام می‏ دهند.

نحوه استفاده اتصال  lcd  به میکرو کنتر لر 8051


- برنامه Dos Edit یك فایل اسكی تولید می ‏نماید
- عموماً، نام قسمت توسعه فایل مبدا ″asm″ یا ″src″ است.

- فایل ″asm″ می ‏تواند به وسیله برنامه Dos Edit تولید شود.

- فایل ‏های ″obj″ و ″lst″ به وسیله اسمبلر ایجاد می ‏شوند.

 

 

0 یا 1

bit

0 تا 255

byte

32676- تا 32676

integer

0 تا 65535

word

-232 تا 232

long

برای تعریف اعداد اعشاری ( از -232 تا 232)

single

حداكثر 254 بیت (رشته)

string

 

 

 

نرم افزار BASCOM 8051

 

با استفاده از نرم افزار BASCOM 8051  می توان برنامه مربوطه را به زبان BASIC نوشته و با همین برنامه آن را به باینری یا هگز تبدیل کرده و روی آی سی کپی نمود. همچنین می توان قبل از کپی برنامه روی آی سی آن را شبیه سازی کرد.

 

نوشته شده در تاریخ دوشنبه 19 مهر 1389    | توسط: asad kavir asad kavir    | طبقه بندی: پروژه های برق،     | نظرات()