پيشگفتار
در اوايل دهه ۶۰ ميلادي ايالات متحده در آستانه شکل گيري تکنولوژي نويني در مهندسي برق بود. ترانزيستور که کمي پس از پايان جنگ جهاني دوم توسط سه دانشمند در آزمايشگاههاي كمپاني بل ابداع شده بود، کم کم جايگزين رقيبش لامپ خلا مي شد.

در سال ۱۹۶۸ رابرت نويس و گوردون مور، دو نفر از پايه گذاران اصلي كمپاني فيرچايلد شرکت جديدي موسوم به اينتل تاسيس نمو دند. در سال ۱۹۶۹ يک شرکت ژاپني سازنده ماشين حساب, به آنها سفارش يک آي سي خاص براي ماشين حسابهاي جديد خود داد و يک پردازنده مرکزي (CPU) چهار بيتي بر روي يک تراشه ساخته شد و بدين ترتيب خانواده IC هاي اينتل ۴۰۰۰ متولد گرديد. اين روند ادامه پيدا کرد و در سال ۱۹۷۲, آي سي هشت بيتي ۸۰۰۸ , پس از آن ۸۰۸۰ , ۸۰۸۵ ودر اواخر دهه۱۹۷۰ چند ميکروپروسسور ۱۶ بيتي به بازار عرضه شد .

اين تحول تا امروز ادامه داشته است و ميکروپروسسورهاي ۳۲ بيتي و ۶۴ بيتي(پنتيوم) پا به عرصه وجود گذاشته‏اند. اکثر ميکروکامپيوتر هاي اوليه به صورت کيت فروخته مي شدند و براي انجام کاري خاص, بايد به زبان ماشين برنامه ريزي مي شدند و قابليت توليد انبوه را نداشتند, تا اينکه در۱۹۸۲ شرکت IBM براي اولين بار شروع به فروش کامپيوترهاي شخصي نمود و امروزه شاهد جهش هاي ناباورانه اي در زمينه رشد تکنولوژي وقا بليت هاي کامپيوترهاي شخصي هستيم.

گردآورنده

مقدمه

اين مجموعه به بررسي مباني تکنولوژي ريز پردازنده‏ها مي پردازد و به عنوان يک منبع درسي, براي درس ساختار و زبان ماشين در نظر گرفته شده است. تمرکز ما در اين کتاب، فهم اجزاء سخت افزاري يک سيستم ميکروکامپيوتر و نقش نرم افزار در کنترل سخت افزار است.

قسمت عمده آنچه در اين مجموعه ملاحظه مي شود, از بخش هاي مختلف چند کتاب و نيز جزوه درس ساختار و زبان ماشين گردآوري شده است. در اين مجموعه به بررسي ميکروپروسسور هشت بيتي” شريف”، ميکروپروسسور هشت بيتي ۸۰۸۵ , ميکروکنترلر هشت بيتي ۸۰۵۱ و در انتها به اختصار به ميکروکنترلر AVR مي پردازيم. البته در مورد ميکروپروسسور” شريف”، به دليل آنکه صرفا يک مدل براي يادگيري و آشنايي اوليه است, به سخت افزار چنداني

پرداخته نمي شود. دو مورد بعدی که از ميکروپروسسور هاي واقعي و ساخت شرکت اينتل هستند بطور مفصل تر مورد بررسی قرار می گيرند. يادآوري مي نمايدكه تاکيد بر ساختار سه باسه( CPU هاي استفاده كننده از سه باس) است که در فصل هاي بعدي بهنگام افزودن حافظه و I/O به کار مي آيد، به همين منظور, در فصل اول به معرفي باس مي پردازيم. همچنين، در اين درس به آي‏سي‏هاي پشتيبان ويژه ۸۰۸۵ و روشهاي I/O ي سري خواهيم پرداخت. همچنين، به اختصار به معرفي فلسفه و توري پايه DMA و AVR مي پردازيم.

فصل اول
باس‏‏ها و اجزای داخلی يك کامپيوتر

در اين فصل ابتدا با باس‏ها و زمان‏بندی عملکرد صحيح آنها, مطالبي از قبيل سه‏حالته و امکان اتصال خروجي‏هاي چند گيت به يکديگر آشنا خواهيم شد. ادامه اين فصل به ساير اجزاي اصلي کامپيوتر(CPU) اختصاص دارد.

۱-۱ باس‏ها و عملکردشان

باس را مي‏توان يک مجموعه خط(سيم) براي انتقال داده بين يک ارسال كننده داده و يک گيرنده تعريف کرد. معمولا خطوط سيگنالي را كه با يكديگر وجه مشتركي دارند پهلوي هم گذاشته و آن را يك باس مي ناميم. به اين ترتيب باس داده, باس آدرس و باس کنترل و غيره را به دست مي‏آوريم. در يک طراحي مناسب, بايد مسائلي از قبيل مصونيت در مقابل نويز, اثرهاي بارگذاري ac و dc, انعکاس ناشي از پالس هاي منطقي سريع و نيز تداخل بين هادي‏‏هاي موازي بايد در نظر گرفته شوند. ولي، از آنجا که ما در اين درس درصدد پرداختن به جنبه الکترونيک عناصر نيستيم، از بحث در باره اين مسائل صرف نظر مي کنيم.
۱-۱-۱ باس نوع اول

روي باس نوع ۱, يک فرستنده سيگنال و يک گيرنده داريم. از آنجا که ميکروپروسسورها با استفاده از تكنولژي MOS ساخته شده اند و توانايي جرياندهي شان بسيار محدود است, به عنوان يک قاعده کلي هرگاه بار روي باس از توانايي جرياندهي ميکروپروسسور بيشتر باشد, يا گيرنده در برد اصلي نباشد بافر لازم است. منظور از بافرکردن باس, اتخاذ روشي براي اطمينان از انتقال سطوح منطقي معتبر بر روي باس است.
شکل ۱-۱ چند نوع بافر متداول را نشان مي دهد. آي سي هايي از خانوادة TTL مانند ۷۴LS245 و ۴LS244 اين جنبه گيرا را دارند که در هر آي‏سي هشت بافر وجود دارد. معمولا نه تنها بافر کردن فرستنده, که بافر کردن ورودي گيرنده ها نيز سودمند است, زيرا اين کار مقدار بارهايي را که مي توانند روي باس قرار بگيرند بسيار زياد مي‏کند. در مورد اين دو آی‏سی در بخش ۱-۱-۳ بيشتر توضيح داده شده است.

شكل ۱-۱ باس نوع يك
تمام بافرهاي شکل ۱-۲ توانايي سه حالته بودن را دارند, به اين معني که علاوه بر دو حالت ۰ و۱ منطقي, يک حالت سوم هم مي‏توانند داشته باشند. اين حالت سوم در واقع حالت امپدانس بالا يا مدار باز است. بافرهاي سه حالته اجازه مي‏دهند چند فرستنده يک خط باس را کنترل کنند. اگر تمام فرستنده‏ها بجز يکي در حالت امپدانس بالا قرار گيرند هيچ تداخلي پيش نمي‏آيد. اين خاصيت در مورد باس نوع سوم مورد استفاده قرار مي‏گيرد.
۱-۱-۲ باس نوع دوم

در باس نوع ۲, چند فرستنده و يک گيرندة سيگنال داريم. اين نوع باس را نمي‏توان با گيت‏هاي TTL استاندارد ساخت. شکل ۱-۲ دليل اين امر را نشان مي‏دهد. تا وقتي هر دو فرستنده مي‏خواهند مقدار منطقي يکساني روي خط قرار دهند, اشکالي پيش نمي‏آيد. ولي همين که خروجي يکي ۱ و يکي ۰ باشد, باس وضعيت مبهمي پيدا مي‏کند و بدتر اينکه امکان دارد از گيتي با خروجي ۱ جريان زيادي وارد گيتي با خروجي ۰ شود و هر دو گيت آسيب مي ببينند. اين وضعيت, نزاع بر سر باس نام دارد.

شكل ۱-۲ باس نوع دو
يک راه براي حل اين مشکل استفاده از گيت‏هاي سه حالته به عنوان فرستنده است. با فعال کردن تنها يک فرستنده در هر زمان, نزاع بر سر باس ختم مي‏شود. مساله‏اي که اين راه حل به وجود مي‏آورد يک مدار منطقي اضافه‏اي است که براي اطمينان از فعال کردن فقط يک فرستنده در هر زمان بايد به کار برده شود.
راه حل ديگر استفاده از باس کلکتور باز (درين باز) شکل ۱-۳ است. در اين طرح خروجي فرستنده‏ها, کلکتور باز است.يعني اينها مي‏توانند با اشباع کردن ترانزيستور خروجي‏شان, ولتاژ باس را به صفر بکشند, ولي براي رساندن ولتاژ باس به ۱, به يک مقاومت بالابر(ولتاژ) خارجي احتياج داريم. مثالي از اين دست, NAND کلکتور باز ۷۴۰۱ است.
عيب اين نوع باس اين است که نمي‏توان تعيين کرد که کدام فرستنده باس را صفر کرده است. به اين ترتيب پروسسور مجبور است وضعيت (خروجي ها) را بخواند تا بتواند وسيله فعال کننده را بيابد, اين روش, همه‏پرسي نام دارد.

شكل ۱-۳ باس نوع ۲ با دروازه هاي كلكتور باز
البته در بسياري حالات لازم نيست CPU بداند چه وسيله‏اي باس را صفر کرده است, مثلا حالت انتظار که از طرف يک حافظه کند که نمي‏تواند به سرعت داده مورد تقاضاي CPU را فراهم آورد درخواست مي‏شود. در اين حالت اينکه کدام حافظه تقاضاي انتظار کرده مهم نيست.
۱-۱-۳ باس نوع سوم

باس نوع۳, يک باس دو جهته است که روي آن چند ين فرستنده وچند گيرنده قرار دارد.
متداولترين مثال, باس داده در يك سيستم ميکروپروسسوري است. شکل ۱-۴ جهت عبور داده از يک وسيله ورودي به CPU را نشان ميدهد. توجه کنيد که تمام فرستنده‏ها به صورت گيت‏هاي سه حالته وتمام گيرنده‏ها به صورت لچ شامل فيليپ‏ فلاپهاي D نشان داده شده‏اند.
لزوم سه حالته بودن فرستنده‏ها بايد روشن باشد. در هر زمان تنها بايد يک فرستنده, کنترل باس را در دست داشته باشد، اما ممکن است لزوم لچ داشتن گيرنده چندان واضح نباشد. چيزي که بايد به ياد داشته باشيم اين است که داده براي مدت کوتاهي روي باس قرار مي‏گيرد. به عنوان مثال، هنگام اجراي يک دستور ورودي در سيکل M1 روي باس

شكل ۱-۴ جهت عبور داده بر روي يك باس دو جهته
داده آپ کد دستور IN وجود دارد. (مراحل اجراي يک دستور در فصل‏هاي بعدي به تفضيل شرح داده خواهد شد) در سيکل ماشين بعدي اين باس آدرس دريچه ورودي/خروجي را دارد. در سيکل ماشين سوم وسيله ورودي فعال شده و داده را روي باس قرار مي‏دهد. چون هر سيکل ماشين تنها چهار يا پنج سيکل ساعت طول مي‏کشد, هر گيرنده بايد موقعي که نوبتش است داده را سريعا در لچ خود قرار دهد.
مساله اصلي باس۳ همين است؛ چطور يک گيرنده يا فرستنده مي‏فهمد که نوبتش رسيده است؟
پاسخ اين سوال به روشهاي کدگشايي باس آدرس وکنترل برمي‏گردد, اين روشها را در آينده به تفضيل خواهيم ديد؛ ولي ايده به حد کافي ساده است. در واقع زمان‏بندی عملکرد اين باس از اين قرار است : اگر خط خواندن I/O باس کنترل فعال است, و آدرس ما روي باس آدرس قرار دارد, نوبت ماست که داده را روي باس قرار دهيم و بايد فرستنده سه حالته خود را فعال کنيم. البته باز هم بافر نياز است. شکل ۱-۵ روش کار را نشان مي‏دهد. براي هر خط دو گيت سه حالته با خطوط Enable, READ و WRITE مجزا لازم است. سيگنالهاي فعال کننده را بايد از باس کنترل ميکروپرسسور گرفت.

شكل ۱-۵ بافر باس دو جهت. در هر زمان فقط يك دروازه فعال مي شود
بعضي از انواع متداول اين بافرها در شکل ۱-۶ نشان داده شده است. از اين ميان ۷۴LS245 براي اين کاربرد بسيار مناسب است؛ چون اين آي‏سي هشت زوج سه حالته با خطوط کنترل مجزاي Enable و انتخاب جهت دارد.

شكل ۱-۶ فرستنده گيرنده هاي متداول براي بافر كردن باس داده ميكروپروسسور
همچنين در مورد لچ‏ ۷۴LS373 , براي جدا کردن خطوط آدرس و داده در ۸۰۸۵ که مالتي‏پلکس شده‏اند لازم است. ‘۳۷۳ (فرم اختصاري ۷۴LS373 , درادامه مورد اين نوع نمايش بيشتر توضيح خواهيم داد), هشت فيليپ فلاپ با يک ورودي مشترک فعال بالا دارد. وقتي سيگنال ALE يک است خطوط AD0 تا AD7 بخش مرتبه پايين آدرس را حمل مي‏کند. نيز لچ ۷۴LS374 براي اتصالاتي از قبيل ۸۰۸۵ به خروجي‏هايي مانند LED مناسب است. هر دو لچ, با يک شدن OE, خروجيهايشان

امپدانس بالا مي‏شود. ‘۳۷۳ داراي ۲۰ پايه است, ۸ پايه آن به عنوان ورودي و۸ پايه به عنوان خروجي تعريف شده‌اند. علاوه بر اين ۱۶ پايه، يک پايه ورودي OE نيز وجود دارد كه اگر فعال شود ورودي لچ را به خروجي مدار مجتمع متصل مي کند و اگر اكتيو نباشد خروجي به حالت شناور مي‌رود. پايه‌ ديگر اين IC ، ورودي Clock است كه با علامت اختصاري CLK نمايش داده مي‌شود. CLK، ساعت سيستم (پالس مربعي با فركانس ثابت) است. اين پالس مربعي توسط يک کريستال توليد

 

مي شود. اين پايه‌ها در شكل ۱-۷ نشان داده شده اند. اين IC، حساس به سطح است يعني در طول مدت زماني كه CLK اكتيو است، IC ورودي را به خروجي منتقل مي‌كند. ‘۳۷۴ مشابه ‘۳۷۳ است، تنها تفاوتش در اين است كه اين IC، حساس به لبه است يعني زماني كه CLK، از صفر به يك مي‌رود سيگنال ورودي به خروجي منتقل مي‌شود. اين پايه‌ها در شكل ۱-۸ نشان داده شده اند.