پیشگفتار در اوایل دهه 60 میلادی ایالات متحده در آستانه شکل گیری تکنولوژی نوینی در مهندسی برق بود.
ترانزیستور که کمی پس از پایان جنگ جهانی دوم توسط سه دانشمند در آزمایشگاههای کمپانی بل ابداع شده بود، کم کم جایگزین رقیبش لامپ خلا می شد.
در سال 1968 رابرت نویس و گوردون مور، دو نفر از پایه گذاران اصلی کمپانی فیرچایلد شرکت جدیدی موسوم به اینتل[1] تاسیس نمو دند.
در سال 1969 یک شرکت ژاپنی سازنده ماشین حساب, به آنها سفارش یک آی سی خاص برای ماشین حسابهای جدید خود داد و یک پردازنده مرکزی (CPU) چهار بیتی بر روی یک تراشه ساخته شد و بدین ترتیب خانواده IC های اینتل 4000 متولد گردید.
این روند ادامه پیدا کرد و در سال 1972, آی سی هشت بیتی 8008 , پس از آن 8080 , 8085 ودر اواخر دهه1970 چند میکروپروسسور 16 بیتی به بازار عرضه شد .
این تحول تا امروز ادامه داشته است و میکروپروسسورهای 32 بیتی و 64 بیتی(پنتیوم) پا به عرصه وجود گذاشتهاند.
اکثر میکروکامپیوتر های اولیه به صورت کیت فروخته می شدند و برای انجام کاری خاص, باید به زبان ماشین برنامه ریزی می شدند و قابلیت تولید انبوه را نداشتند, تا اینکه در1982 شرکت IBM برای اولین بار شروع به فروش کامپیوترهای شخصی[2] نمود و امروزه شاهد جهش های ناباورانه ای در زمینه رشد تکنولوژی وقا بلیت های کامپیوترهای شخصی هستیم.
گردآورنده مقدمه این مجموعه به بررسی مبانی تکنولوژی ریز پردازندهها[3] می پردازد و به عنوان یک منبع درسی, برای درس ساختار و زبان ماشین در نظر گرفته شده است.
تمرکز ما در این کتاب، فهم اجزاء سخت افزاری یک سیستم میکروکامپیوتر و نقش نرم افزار در کنترل سخت افزار است.
قسمت عمده آنچه در این مجموعه ملاحظه می شود, از بخش های مختلف چند کتاب و نیز جزوه درس ساختار و زبان ماشین گردآوری شده است.
در این مجموعه به بررسی میکروپروسسور هشت بیتی" شریف"، میکروپروسسور هشت بیتی 8085 , میکروکنترلر[4] هشت بیتی 8051 و در انتها به اختصار به میکروکنترلر AVR می پردازیم.
البته در مورد میکروپروسسور" شریف"، به دلیل آنکه صرفا یک مدل برای یادگیری و آشنایی اولیه است, به سخت افزار چندانی پرداخته نمی شود.
دو مورد بعدی که از میکروپروسسور های واقعی و ساخت شرکت اینتل هستند بطور مفصل تر مورد بررسی قرار می گیرند.
یادآوری می نمایدکه تاکید بر ساختار سه باسه( CPU های استفاده کننده از سه باس) است که در فصل های بعدی بهنگام افزودن حافظه و I/O به کار می آید، به همین منظور, در فصل اول به معرفی باس می پردازیم.
همچنین، در این درس به آیسیهای پشتیبان[5] ویژه 8085 و روشهای I/O ی سری خواهیم پرداخت.
همچنین، به اختصار به معرفی فلسفه و توری پایه DMA و AVR می پردازیم.
فصل اول باسها و اجزای داخلی یک کامپیوتر در این فصل ابتدا با باسها[6] و زمانبندی[7] عملکرد صحیح آنها, مطالبی از قبیل سهحالته[8] و امکان اتصال خروجیهای چند گیت[9] به یکدیگر آشنا خواهیم شد.
ادامه این فصل به سایر اجزای اصلی کامپیوتر(CPU) اختصاص دارد.
1-1 باسها و عملکردشان باس را میتوان یک مجموعه خط(سیم) برای انتقال داده بین یک ارسال کننده داده و یک گیرنده تعریف کرد.
معمولا خطوط سیگنالی را که با یکدیگر وجه مشترکی دارند پهلوی هم گذاشته و آن را یک باس می نامیم.
به این ترتیب باس داده, باس آدرس و باس کنترل و غیره را به دست میآوریم.
در یک طراحی مناسب, باید مسائلی از قبیل مصونیت در مقابل نویز, اثرهای بارگذاری ac و dc, انعکاس ناشی از پالس های منطقی سریع و نیز تداخل بین هادیهای موازی باید در نظر گرفته شوند.
ولی، از آنجا که ما در این درس درصدد پرداختن به جنبه الکترونیک عناصر نیستیم، از بحث در باره این مسائل صرف نظر می کنیم.
1-1-1 باس نوع اول روی باس نوع 1, یک فرستنده سیگنال و یک گیرنده داریم.
از آنجا که میکروپروسسورها با استفاده از تکنولژی MOS [10]ساخته شده اند و توانایی جریاندهی شان بسیار محدود است, به عنوان یک قاعده کلی هرگاه بار روی باس از توانایی جریاندهی میکروپروسسور بیشتر باشد, یا گیرنده در برد اصلی نباشد بافر لازم است.
منظور از بافرکردن باس, اتخاذ روشی برای اطمینان از انتقال سطوح منطقی معتبر بر روی باس است.
شکل 1-1 چند نوع بافر [11]متداول را نشان می دهد.
آی سی هایی از خانواده [12]TTL مانند 74LS245 و 4LS244 این جنبه گیرا را دارند که در هر آیسی هشت بافر وجود دارد.
معمولا نه تنها بافر کردن فرستنده, که بافر کردن ورودی گیرنده ها نیز سودمند است, زیرا این کار مقدار بارهایی را که می توانند روی باس قرار بگیرند بسیار زیاد میکند.
در مورد این دو آیسی در بخش 1-1-3 بیشتر توضیح داده شده است.
شکل 1-1 باس نوع یک تمام بافرهای شکل 1-2 توانایی سه حالته بودن را دارند, به این معنی که علاوه بر دو حالت 0 و1 منطقی, یک حالت سوم هم میتوانند داشته باشند.
این حالت سوم در واقع حالت امپدانس بالا[13] یا مدار باز است.
بافرهای سه حالته اجازه میدهند چند فرستنده یک خط باس را کنترل کنند.
اگر تمام فرستندهها بجز یکی در حالت امپدانس بالا قرار گیرند هیچ تداخلی پیش نمیآید.
این خاصیت در مورد باس نوع سوم مورد استفاده قرار میگیرد.
1-1-2 باس نوع دوم در باس نوع 2, چند فرستنده و یک گیرنده سیگنال داریم.
این نوع باس را نمیتوان با گیتهای TTL استاندارد ساخت.
شکل 1-2 دلیل این امر را نشان میدهد.
تا وقتی هر دو فرستنده میخواهند مقدار منطقی یکسانی روی خط قرار دهند, اشکالی پیش نمیآید.
ولی همین که خروجی یکی 1 و یکی 0 باشد, باس وضعیت مبهمی پیدا میکند و بدتر اینکه امکان دارد از گیتی با خروجی 1 جریان زیادی وارد گیتی با خروجی 0 شود و هر دو گیت آسیب می ببینند.
این وضعیت, نزاع بر سر باس نام دارد.
باس نوع دو یک راه برای حل این مشکل استفاده از گیت های سه حالته[14] به عنوان فرستنده است.
با فعال کردن تنها یک فرستنده در هر زمان, نزاع بر سر باس ختم میشود.
مسالهای که این راه حل به وجود میآورد یک مدار منطقی اضافهای است که برای اطمینان از فعال کردن فقط یک فرستنده در هر زمان باید به کار برده شود.
راه حل دیگر استفاده از باس کلکتور باز (درین باز)[15] شکل 1-3 است.
در این طرح خروجی فرستندهها, کلکتور باز است.یعنی اینها میتوانند با اشباع کردن ترانزیستور خروجیشان, ولتاژ باس را به صفر بکشند, ولی برای رساندن ولتاژ باس به 1, به یک مقاومت بالابر(ولتاژ)[16] خارجی احتیاج داریم.
مثالی از این دست, NAND کلکتور باز 7401 است.
عیب این نوع باس این است که نمیتوان تعیین کرد که کدام فرستنده باس را صفر کرده است.
به این ترتیب پروسسور مجبور است وضعیت[17] (خروجی ها) را بخواند تا بتواند وسیله فعال کننده را بیابد, این روش, همهپرسی[18] نام دارد.
شکل 1-3 باس نوع 2 با دروازه های کلکتور باز البته در بسیاری حالات لازم نیست CPU بداند چه وسیلهای باس را صفر کرده است, مثلا حالت انتظار[19] که از طرف یک حافظه کند که نمیتواند به سرعت داده مورد تقاضای CPU را فراهم آورد درخواست میشود.
در این حالت اینکه کدام حافظه تقاضای انتظار کرده مهم نیست.
1-1-3باس نوع سوم باس نوع3, یک باس دو جهته است که روی آن چند ین فرستنده وچند گیرنده قرار دارد.
متداولترین مثال, باس داده[20] در یک سیستم میکروپروسسوری است.
شکل 1-4 جهت عبور داده از یک وسیله ورودی به CPU را نشان میدهد.
توجه کنید که تمام فرستندهها به صورت گیتهای سه حالته وتمام گیرندهها به صورت لچ[21] شامل فیلیپ فلاپهای D نشان داده شدهاند.
لزوم سه حالته بودن فرستندهها باید روشن باشد.
در هر زمان تنها باید یک فرستنده, کنترل باس را در دست داشته باشد، اما ممکن است لزوم لچ داشتن گیرنده چندان واضح نباشد.
چیزی که باید به یاد داشته باشیم این است که داده برای مدت کوتاهی روی باس قرار میگیرد.
به عنوان مثال، هنگام اجرای یک دستور ورودی در سیکل M1 روی باس شکل 1-4 جهت عبور داده بر روی یک باس دو جهته داده آپ کد دستور IN وجود دارد.
(مراحل اجرای یک دستور در فصلهای بعدی به تفضیل شرح داده خواهد شد) در سیکل ماشین بعدی این باس آدرس دریچه ورودی/خروجی را دارد.
در سیکل ماشین سوم وسیله ورودی فعال شده و داده را روی باس قرار میدهد.
چون هر سیکل ماشین تنها چهار یا پنج سیکل ساعت طول میکشد, هر گیرنده باید موقعی که نوبتش است داده را سریعا در لچ خود قرار دهد.
مساله اصلی باس3 همین است؛ چطور یک گیرنده یا فرستنده میفهمد که نوبتش رسیده است؟
پاسخ این سوال به روشهای کد گشایی[22] باس آدرس وکنترل برمیگردد, این روشها را در آینده به تفضیل خواهیم دید؛ ولی ایده به حد کافی ساده است.
در واقع زمانبندی عملکرد این باس از این قرار است : اگر خط خواندن I/O باس کنترل فعال است, و آدرس ما روی باس آدرس قرار دارد, نوبت ماست که داده را روی باس قرار دهیم و باید فرستنده سه حالته خود را فعال کنیم.
البته باز هم بافر نیاز است.
شکل 1-5 روش کار را نشان میدهد.
برای هر خط دو گیت سه حالته با خطوط Enable, READ و WRITE مجزا لازم است.
سیگنال های فعال کننده را باید از باس کنترل میکروپرسسور گرفت.
پاسخ این سوال به روشهای کدگشایی باس آدرس وکنترل برمیگردد, این روشها را در آینده به تفضیل خواهیم دید؛ ولی ایده به حد کافی ساده است.
سیگنالهای فعال کننده را باید از باس کنترل میکروپرسسور گرفت.
شکل 1-5 بافر باس دو جهت.
در هر زمان فقط یک دروازه فعال می شود بعضی از انواع متداول این بافرها در شکل 1-6 نشان داده شده است.
از این میان 74LS245 برای این کاربرد بسیار مناسب است؛ چون این آیسی هشت زوج سه حالته با خطوط کنترل مجزای Enable و انتخاب جهت دارد.
شکل 1-6 فرستنده گیرنده های متداول برای بافر کردن باس داده میکروپروسسور همچنین در مورد لچ 74LS373 , برای جدا کردن خطوط آدرس و داده در 8085 که مالتیپلکس شدهاند لازم است.
'373 (فرم اختصاری 74LS373 , درادامه مورد این نوع نمایش بیشتر توضیح خواهیم داد), هشت فیلیپ فلاپ با یک ورودی مشترک فعال بالا دارد.
وقتی سیگنال ALE یک است خطوط AD0 تا AD7 بخش مرتبه پایین آدرس را حمل میکند.
نیز لچ 74LS374 برای اتصالاتی از قبیل 8085 به خروجیهایی مانند LED مناسب است.
هر دو لچ, با یک شدن OE, خروجیهایشان امپدانس بالا میشود.
'373 دارای 20 پایه است, 8 پایه آن به عنوان ورودی و8 پایه به عنوان خروجی تعریف شدهاند.
علاوه بر این 16 پایه، یک پایه ورودی OE نیز وجود دارد که اگر فعال شود ورودی لچ را به خروجی مدار مجتمع متصل می کند و اگر اکتیو نباشد خروجی به حالت شناور میرود.
پایه دیگر این IC ، ورودی Clock است که با علامت اختصاری CLK نمایش داده میشود.
CLK، ساعت سیستم (پالس مربعی با فرکانس ثابت) است.
این پالس مربعی توسط یک کریستال تولید می شود.
این پایهها در شکل 1-7 نشان داده شده اند.
این IC، حساس به سطح است یعنی در طول مدت زمانی که CLK اکتیو است، IC ورودی را به خروجی منتقل میکند.
'374 مشابه '373 است، تنها تفاوتش در این است که این IC، حساس به لبه است یعنی زمانی که CLK، از صفر به یک میرود سیگنال ورودی به خروجی منتقل میشود.
این پایهها در شکل 1-8 نشان داده شده اند.
در این قسمت به نامگذاری و علامت اختصاری IC ها اشارهای میکنیم.
مثلاً چرا 74LS373 را با '373 نشان میدهند؟
IC ها به گروه های مختلفی تقسیم می شوند وهر IC در یک گروه قرار میگیرد.
IC های هم گروه IC هایی هستند که چند حرف اول نامشان شبیه به هم است ولی تفاوت درحروف آخرشان است.
بنابراین به جای تکرار حروف مشابه, علامت (') میگذاریم؛ مثلاً در گروه IC هایی که با 74 شروع میشوند، نامهایی از قبیل 74L ، 74LS ،74H، 74C، 74AC، 74S و...
دیده می شود که هر کدام معرف خصوصیتی هستند.
بعنوان توضیح, 74LS که یکی از متداولترین گروههاست, Lاش به خاطر این است که فعال پایین است یعنی با صفر فعال و با یک غیر فعال میشود و S اش به خاطر این است که Shot key است یعنی سرعت عملکرد آن بالاست.
و یا 74H، High power است و 74C به خاطر این است که از CMOS در این IC استفاده شده است.
به عنوان مثالی دیگر بجای اینکه بنویسیم 00 74HC مینویسیم : 00 ' و...
.
شکل 1-7 آیسی 74LS373 شکل 1-8 آیسی 74LS374 همچنین’138 (74LS138)یک دکودر 3 به 8 پرکاربرد است وخروجیهای این دکودر، فعال پایین میباشند.
سه ورودی Enable داردکه E1 وE2 باید Low باشند وE3 باید High باشد تا IC فعال باشد.
3 پایه دیگر انتخابگرها هستند و 8 پایه هم به عنوان خروجی تعیین شدهاند.
خروجیها توسط ترکیبی از سه ورودی توانا کننده فعال میشوند.
ورودیهای فعال کننده به پایههای A، B وC آی سی اعمال میشوند و با دیکد شدن ورودیها خروجی مورد نظر فعال میشود.
این خروجیها میتواند به فعال کننده یک تراشه مثلRAM, ROM و...
وصل شود.
بنابراین با این IC میتوانیم 8 تراشه را فعال یا غیر فعال کنیم.
مثلاً اگر عدد 010 را به پایههای انتخابگر بدهیم خروجی 2 فعال میشود و به همین ترتیب برای 8 خروجی دیگر.
شماتیک این IC مطابق شکل 1-9 است.
شکل 1-9 آیسی 74ALS138 مورد دیگر (74LS244)’244است.
این قطعه شامل 8 خط بافر فعال بالا میباشد.
خروجی آن سه حالته است، 0, 1 وحالت امپدانس بالا (Z)؛ این قطعه 8 پایه ورودی و8 پایه خروجی و 2 پایه Enable دارد.
پایههای بافر به دو گروه تقسیم بندی میشوند، گروه یک شامل پایههای A0,A1,A2,A3 و است و اگر فعال باشد ورودیها (A0-A3) در خروجیها (Y0-Y3) ظاهر میشوند وگرنه خروجی ها (Y0-Y3) به حالت Z میروند.
گروه دو شامل پایههای A4,A5,A6,A7 و است و اگر فعال باشد ورودیها (A4-A7) در خروجیها (Y4-Y7) ظاهر میشوند وگرنه خروجی ها (Y4-Y7) به حالت Z میروند.
این بافر در شکل 1-10 مشاهده میشود.
74LS245 هم یک بافر مانند 74LS244 است, با این تفاوت که دو طرفه است.
شکل 1-10 آیسی 74ALS244 1-2 ثباتها همه میکروپروسسورها معمولا دارای چندین ثبات هستند.
مثلا 8085 شش رجیستر همه منظوره هشت بیتی با نامهای B, C, D, E, H و L دارد.
همچنین دارای دو رجیستر خاص است, یکی A (آکومولاتور یا انباره) و دیگری رجیستر F (رجیستر پرچم) که این دو نیز هشت بیتی هستند.
نیز دو رجیستر 16 بیتی با نامهای SP و PC دارد.
رجیستر PC شمارنده برنامه است و طول آن (16 بیت) با باس آدرس 8085 سازگار است.
شمارنده برنامه آدرس دستورالعمل بعدی را کهCPU از حافظه احضار میکند, نگه می دارد.
این قضیه در مورد 8051 و ماشین شریف هم همین طور است.
رجیستر SP اشارهگر پشته نامیده می شود.
این رجیستر نیز یک آدرس 16 بیتی را در خود نگه می دارد, ولی این آدرس به بخش خاصی از حافظه موسوم به پشته اشاره می کند.
از بخش پشته میتوان به عنوان تعداد تقریبا نامحدودی رجیستر خارج از آیسی استفاده کرد.
البته فلسفه اصلی تعریف پشته, حفظ آدرس برگشت هنگامی که یک زیر برنامه(سابروتین) صدا زده میشود, میباشد.
توضیح در مورد رجیستر F اینکه, در 8085 این رجیستر شامل پنج پرچم وضعیت و سه بیت تعریف نشده است؛ در واقع این پرچمها فلیپ فلاپهای 1 بیتی هستند که میتوانند یک یا صفر باشند.
در حالت کلی بعضی دستورالعملهای 8085 بر تمام یا بعضی از آنها تاثیر دارد و بعضی از دستورالعملها نیز بر هیچ کدام تاثیر ندارند.
این پنج پرچم عبارتند از: CY (رقم نقلی) : اگر در جمع, رقم نقلی تولید شود یا اجرای دستور تفریق مستلزم رقم قرضی (borrow) شود این پرچم set در غیر این صورت reset می شود.
P (توازن) : اگر تعداد بیتهای حاصل یک عمل زوج باشد این پرچم set در غیر این صورت reset می شود.
AC (رقم نقلی کمکی) : اگر دستورالعملی باعث ایجاد رقم نقلی از بیت 3 به 4 شود, این بیت set در غیر این صورت reset خواهدشد.
Z (صفر) : اگر نتیجه یک دستورالعمل مقدار صفر باشد این پرچم set در غیر این صورت reset می شود.
S (علامت) : اگر با ارزش ترین بیت حاصل یک عمل 1 باشد, این پرچم set در غیر صورت reset می شود.
وضعیت در مورد 8051 و شریف نیز مشابه است که در جای خود توضیح داده خواهد شد.
1-3 واحد محاسبه و منطق(ALU) واحد ALU که به آن واحد محاسبه و منطقگویند دو ورودی میگیرد یکی آکومولاتور و دیگری رجیستر Temp ؛ پس از انجام عمل خواسته شده (که از طریق پایههای کنترلی به این واحد دستور داده میشود) خروجی را تحویل میدهد.
این واحد هم اعمال محاسباتی و هم اعمال منطقی را انجام میدهد.
مثلاً برای جمع دو عدد 11 و20 , یکی از این اعداد در آکومولاتور ذخیره می شود و عدد دیگر به رجیستر کمکی Temp انتقال مییابد، پس از محاسبه در خروجی ALU عدد 31 قرار میگیرد.
1-4 رجیستر دستورالعمل (IR) هر دستوری که fetch میشود بصورت یک عدد باینری است, این اعداد باید تحلیل شوند.
در این قسمت هر دستور ابتدا دیکد میشود و سپس به واحد واحد کنترل و زمانبندی فرستاده میشود تا پایههای کنترل واحدها بنا به دستوری که وارد CPU می شود فعال یا غیر فعال شوند .
1-5 واحد کنترل و زمانبندی این واحد, کنترل سیستم را بر عهده دارد.
ورودیهای این بخش, پالس ساعت وخروجی IR است.
بر اساس اینکه چه دستوری باید انجام شود سیگنالهای مناسبی از قبیل Memory Read , Memory Write, و...
باید فعال شوند.
تمام قسمتهای گفته شده تا اینجا, ارکان اصلی یک CPU هستند.
در میکروپروسسورهای مختلف ممکن است این اجزاء با هم اندکی تفاوت داشته باشند, در فصلهای آینده با جزئیات بیشتر, به طور خاص با 8085 , کامپیوتر شریف و 8051 آشنا میشویم.
فصل دوم حافظهها در این بخش به اختصار, تا اندازهای که برای این درس کافی باشد, به بررسی اجمالی حافظهها می پردازیم.
نیز با چند آیسی پرکاربرد و معروفتر آشنا میشویم.
2-1 ROM حافظهای است فقط خواندنی و مهمترین مشخصه آن غیر فرار بودن آن است.
به این معنی که محتوای آن حتی اگر منبع تغذیه از آن حذف شود پاک نمیشود.
ROMها اغلب در ریزکامپیوترها برای ذخیره برنامه نرمافزارهای کنترلگرها (مثل اجاق مایکروویو, موتور پلهای, نمایشگر دیجیتال و غیره) و برنامههای کاربردی دیگر بکار میروند.
مزیت استفاده از ROM این است که هر وقت منبع تغذیه اعمال شود بلافاصله در در دسترس است و موجب میشود تا اپراتور پس از روشن کردن سیستم بلافاصله شروع به استفاده از برنامه کاربرد میکند.
عیب ROM این است که در فضای حافظهای که اشغال میکند نمیتوان چیزی نوشت.
عیب دیگرآن این است که ROM به سادگی برنامهنویسی نمیشود و باید در کارخانه سازنده برنامهنویسی بشود.
2-2 EPROM نوع با انعطاف تر ولی گرانتر ROM است و این وسیله را میتوان برنامهریزی کرد، پاک کرد, دوباره برنامهریزی نمود و این کار بارها و بارها قابل تکرار است.
پاککردن این حافظه بوسیله اشعه ماوراء بنفش انجام میشود.
2-3 E2PROM حسن این قطعه این است که بدون جدا کردن از سوکت میتوان برنامه آن را پاک کرد.
به علاوه پاک کردن یک بایت و یا همه بایتها امکان پذیر است.
2-4 RAM حافظههای خواندنی / نوشتنی را عموماً حافظه با دستیابی تصادفی یا RAM مینامند.
البته ROMها نیز قابل دستیابی به دلخواه هستند.
پس نام مناسبی برای آن انتخاب نشده پس بهتر بود به جای RAM، RWM انتخاب میشد یعنی حافظه خواندنی و نوشتنی .
مهمترین خصوصیت RAM قابلیت انتقال آن است.
برنامههای کاربردی به سرعت از دیسک یا نوار به RAM انتقال یافته و سپس بوسیله ریزپردازنده اجرا میشود.
تنها محدودیت مهم RAM فرّار بودن آن است.
با خاموش کردن منبع تغذیه همه اطلاعات پاک میشوند .
به همین دلیل لوازم داشتن نوعی حافظه ثانویه در اغلب سیستمهای ریز کامپیوتر احساس شده است, حافظههایی که امروزه Hard نامیده میشوند.
2-5 RAM هایاستاتیک و دینامیک RAM استاتیک نوعی RAM است که از فلیپ فلاپ به عنوان عنصر اصلی ذخیرهسازی استفاده میکند.
فصل سوم کامپیوتر شریف در این فصل در صدد آن هستیم که یک کامپیوتر فرضی به نام کامپیوتر شریف را معرفی کرده و اصول کار آن را به عنوان پایهای برای آشنایی با میکروپروسسورهای واقعی تشریح نماییم.
یادآوری میشود کامپیوتر شریف بر اساس یک کامپیوتر 8 بیتی طرحریزی شده است.
همانطور که قبلا گفته شد منظور از کامپیوتر 8 بیتی کامپیوتری استکه آکومولاتور ودیتا باس آن 8 بیتی باشد.
3-1 بلوک دیاگرام کامپیوتر شریف مدل کلی کامپیوتر شریف در شکل 3-1 نشان داده شده است.
همانطور که مشاهده میشود CPU از یک طرف با حافظه در ارتباط است و از طرفی با ورودیها و خروجیهای دیگر.
این ارتباطها و مدیریت تبادل داده و اجرای دستورات, توسط CPU از طریق سه باس کنترل, آدرس و داده انجام میشود.
عنصر اصلی CPU است.
این واحد اصلیترین قسمت در یک کامپیوتر است و همه اعمال محاسباتی و منطقی و همه دستورات در این واحد انجام میشوند.
ساختمان داخلی CPU شریف درشکل3-2 نشان داده شده است.
در اینجا به اختصار به معرفی بخشهای مختلف CPU میپردازیم.
3-1-1 باس داده (DB) Data یعنی داده و در حقیقت دادهها اطلاعاتی هستند که ورودیها (H.D.D، Key board و...) به CPU انتقال میدهند و یا CPU به خروجیها (Printer، Monitor, H.D.D و...) منتقل میکند .
این باس, داده را از باس خروجی به باس داده ورودی و بر عکس منتقل میکند.
شکل 3-1 بلوک دیاگرام کامپیوتر شریف 3-1-2 واحد محاسبه ومنطق (ALU) همانطور که قبلا گفتیم، همه دادهها در این CPU، 8 بیتی هستند.
واحد ALU که به آن واحد محاسبه و منطق میگویند دو ورودی 8 بیتی میگیرد (شکل3-2 ) و پس از انجام عمل خواسته شده (که از طریق پایههای کنترلی به این واحد دستور داده میشود ) خروجی 8 بیتی را تحویل میدهد.
3-1-3 رجیستر وضعیت این قسمت شامل چند بیت است که مقدار این بیتها متاثر از نتیجه عمل محاسباتی یا منطقی انجام شده میتواند صفر یا یک باشد, از روی مقادیر این بیتها -که در ادامه شرح داده میشوند- در نوشتن نرمافزار برای پرشهای شرطی تصمیم میگیریم.
3-1-4 آکومولاتور (Acc) Acc یک رجیستر 8 بیتی است.
یکی از ورودیهای ALU از طریق این رجیستر تأمین میشود.
مثلاً اگر بخواهیم دو عدد 11 و20 را جمع کنیم یکی از این اعداد را در آکومولاتور ذخیره میکنیم وعدد دیگر به رجیسترB ( ورودی دیگر ALU) انتقال مییابد.
پس از محاسبه در خروجی ALU, عدد 31 قرار میگیرد.
شکل 3-2 بلوک دیاگرام داخلی CPU درکامپیوتر شریف 3-1-5 واحد زمانبندی و کنترل همانطور که در فصل گذشته گفتیم این واحد, کنترل سیستم را بر عهده دارد.
بر اساس اینکه چه دستوری باید انجام شود سیگنالهای مناسبی از قبیل Memory Read, Memory Write, I/O Read وغیره...
بنابراین خروجی این واحد, کنترل باس (CB) را تشکیل میدهد.
3-1-6 رجیستر دستورالعمل (IR) دستوری که CPU باید انجام دهد به فرم یک عدد باینری است.
این اعداد باید تحلیل شوند تا دستور متناسب انجام گردد.
به این منظور, ابتدا در این قسمت باید هر دستور دیکد شود و سپس به واحد زمانبندی وکنترل فرستاده شود تا پایههای کنترل واحدها بنا به دستوری که برنامه به CPU میدهد فعال یا غیر فعال شوند .
3-1-7 شمارنده برنامه (PC) این واحد, شمارندهآدرس حافظه است.
وقتی CPU برنامه ای را ازحافظه فراخوانی میکند تا برنامه خط به خط اجرا شود, این واحد که اشارهگرآدرس حافظه است پس از خواندن هر خط از برنامه توسط CPU, یکی به آن اضافه میشود و به خط بعدی برنامه اشاره میکند.
این رجیستر 16 بیتی است ولی دقت کنیم در کامپیوتر شریف فقط 11 خط آدرس داریم.
3 -1-8 باس آدرس (AB) این باس، باس آدرس است.
اشارهگر PC به هر آدرس که اشاره کند، آن آدرس روی باس آدرس قرر داده میشود.
این باس به باس آدرس خروجی وصل میشود.
(یادآوری: 11 خط آدرس داریم) 3-2 دو عمل اصلی CPU همان طور که در شکل3-3 مشاهده می شود CPU همیشه در حال انجام یکی از این دو عمل زیر است: Fetch : به معنی رفتن و آوردن (یا صدا زدن) است.
مثلاً زمانی است که CPU داده ای را از حافظه میآورد، و یا زمانی است که عملگرها و عملوندها به CPU انتقال داده میشوند عمل Fetch در حال انجام است.
Execute : به معنی اجراکردن است, یعنی اینکه CPU در حال اجرای دستوری است.
در حقیقت CPU همیشه در حال انجام یکی از این دو کار است ؛ Fetch زمانی است که واحد IR یک دستورالعمل را از حافظه میآورد و واحد کنترل، پایههای کنترل را از طریق باس کنترل به قسمتهای مختلف میفرستد.
سپس فاز اجرا شروع میشود تا اطلاعات داخل IR وارد واحد کنترل, ACC , ALU و… شوند.
شکل 3-3 شمائی از توالی دو عمل اصلی CPU برای فهم دقیقتر این دو مرحله, نیازمند دانستن عملکرد صحیح کامپیوتر شریف هستیم.
شکل 3-4 بلوک دیاگرام دو عمل Fetch و Execute 3-3 عملکرد کامپیوتر شریف و قالب بندی دستورالعملها در کامپیوتر شریف از نظر تعداد بایت, دو دسته دستورالعمل داریم: دستورات Memory Reference که دو بایتی هستند و دستورات Non-Memory Reference که تک بایتی هستند.
همچنین یک رجیستر 8 بیتی علاوه بر آکومولاتور(A) به نام B در کامپیوتر شریف داریم که هم بعنوان یک رجیستر کمکی در کنار A انجام وظیفه میکند و هم در کاهش دستورات Memory Reference موثر واقع میشود؛ به این صورت که در اکثر عملیات محاسباتی, عملوند دوم در رجیستر B قرار میگیرد.
یعنی کافیست مقدار مورد نظر را با دستور LDB از حافظه در B قرار دهیم و سپس عملیات مورد نظر را بین A و B انجام میدهیم.
به این ترتیب از یک دستورالعمل Non-Memory Reference برای قرار دادن بایت بعدی در A یا B استفاده میشود.
ملاحظه میشود اگرچه این دستور, داده را از حافظه کد میآورد ولی نیاز به داشتن آدرس نیست, زیرا کافی است بایت بعدی را به عنوان داده در نظر بگیریم.
در واقع آدرس بایت بعدی, 1+PC) ) است.
به این ترتیب مطابق شکل3-5 سه بیت op-code و دو بیت Address Modifier داریم و سه بیت باقیمانده هم قسمت بالای آدرس ( , و ) است.
در حقیقت این 8 بیت, رمز شده یک دستورالعمل است که در ادامه به تفسیر آن خواهیم پرداخت.
بایت بعدی نیز (در دستورات Memory Ref) بعنوان قسمت پایین آدرس (-) ایفای نقش میکند.به این ترتیب می توانیم 2Kbyte حافظه را آدرسدهی کنیم.
شکل 3-5 قالببندی 16 بیتی دستورالعملها بیتهای 0 تا 2 بایت اول که قسمت بالای آدرس را مشخص میکند یک صفحه از حافظه را نشان میدهد.
بنابراین در کامپیوتر شریف حداکثر به یک حافظه 8 صفحه ای 256 بایتی دسترسی داریم (شکل3-6).
دو بیت 3 و4 که در شکل 3-6 با X و I نشان داده شده برای قابلیتهای بیشتر استفاده از آدرس است و صفر و یک بودن هر بیت مفهوم خاصی را در بر دارد که شرح آنها به قرار زیر است: X : این بیت اگر صفر باشد به عنوان یک بیت از دستورالعمل تلقی می شود.
ولی اگر این بیت 1 شود، CPU هشت بیت سمت راست را با B (یک رجیستر کمکی مثل ACC است که میتوانیم داده را در آن هم بریزیم) جمع ........
شکل 3-6 نمایش حافظه هشت صفحهای درکامپیوتر شریف میکند و عدد بدست آمده را آدرس قرار میدهد و به این آدرس حافظه میرود و محتوای داخلش را در ACC میریزد.
I : برای آدرس دهی غیر مستقیم از این بیت استفاده میشود.
اگر این بیت 1 باشد، 8 بیت قسمت آدرس، به عنوان آدرس روی باس آدرس قرار میگیرد و دو بایت داده موجود در آدرس فوق الذکراز حافظه خوانده میشود، این اطلاعات به عنوان آدرس جدید روی باس آدرس قرار میگیرد و دادهی موجود در آدرس جدید بر روی باس داده قرار میگیرد و بعد عمل خواستهشده روی این داده اعمال میشود.
3-4 شاخصها کامپیوتر شریف دارای 2 شاخص(شامل 2 فلیپ فلاپ) است که نتایج جانبی عملیات ALU در آنها ذخیره میشوند.
این شاخصها شامل موارد زیراند : یک بیت دو بر یک(Carry) ، بیت صفر((Zero و بیت علامت منفی ((Negative .
Carry : وقتی که عملی بر روی دو عملوند اجرا شود اگر دو بر یک داشته باشد بیت Carry برابر 1 میشود و در غیر این صورت صفر میماند.
مثلاً اگر آکومولاتور محتوی FFH باشد آن را با 01H جمع کنیم 100Hحاصل میشود.
در این حالت بیت Carry یک میشود.
Zero : اگر نتیجه عملی که در ALU انجام گرفته برابر صفر شود، این بیت یک و در غیر این صورت، مقدارش صفر میشود.
Negative : اگر حاصل عملی بر روی دو عملوند منفی شود این بیت، 1 میشود واگر مثبت بشود صفر میشود.
به عبارت دیگر اگر حاصل عملیاتی در ALU منفی شود، این نشانه یک و در غیر این صورت مقدارش صفر میشود.
فصل چهارم میکرو پروسسور 8085 در این فصل میکرو پروسسور 8085 را به طور کامل خواهیم شناخت.
روال کار به این صورت است که ابتدا پایههای 8085 همچنین شاخصها را بررسی میکنیم, سپس انواع آدرسدهیها را معرفی مینماییم و بعد از آن برنامهنویسی 8085 را به زبان اسمبلیخواهیم آموخت و در انتها چندین مثال کاربردی را, از قبیل برنامه کنترل موتور پلهای, برنامه اسکن کیبرد, برنامه ارسال دیتا به چاپگروغیره را میبینیم.
پرواضح است که قبل پرداختن به مثال های متعدد باید IC های پشتیبانی را بشناسیم.
4-1 پایههای 8085 8085 از 40 پایه تشکیل شده است که هر یک را در زیر به اختصارشرح میدهیم.
4-1-1 0AD-7AD این 8 پایه دو استفاده دارند، هم 8 بیت کم ارزش باس آدرس هستند و هم 8 بیت داده میباشند که بوسیله یک '138 مالتی پلکس میشوند.
ALE که شرح آن ذکر خواهد شد به پایه فعالکننده '138 وصل میشود.
اگر ALE صفر باشد، این 8 بیت دیتا هستند در غیر این صورت 8 بیت پایین آدرس است.
4-1-2 15A-8A این پایهها خروجی می باشند و 8 بیت با ارزش آدرس باس را تشکیل میدهند.
4-1-3 یک پایه خروجی است و سیگنال Low روی این خط باعث میشود که اطلاعات روی باس داده در حافظه یا I/O نوشته شود.
4-1-4 READY یک پایه ورودی است و در خلال سیکل خواندن یا نوشتن اگر High باشد یعنی اینکه حافظه یا مدار جانبی آماده انتقال داده است اگر Low باشد، CPU صبر میکند تا دوباره High شود قبل از آنکه خواندن یا نوشتنکامل شود.
4-1-5 HOLD یک پایه ورودی است و اگر فعال باشد باعث میشود که خطوط آدرس و داده در اختیار یک مدار جانبی قرار گیرد.
پس CPU باس را رها خواهد کرد و پس از خارج شدن از حالت HOLD دوباره باس را در اختیار خواهد گرفت.
4-1-6 HLDA یک پایه ورودی است و پس از ورود به حالت Hold فعال خواهد شد و به معنای تأیید سیگنال HOLD میباشد.
4-1-7 INTR پایه ورودی وقفه محسوب میشود و اگر فعال شود اجرای برنامه در دست اجرا متوقف شده و برنامه مربوط به وقفه اجرا می شود.
بحث وقفه بعداً بیان خواهد شد.
4-1-8 INTA پایهخروجی است و تأیید وقفه میباشد.