You are on page 1of 109

‫دانشکده مهندسي برق‬

‫جزوة‌ درس ساختار و زبان ماشين‬

‫استاد‬
‫دکتر محمود تابنده‬

‫تهيه‌کننده‬
‫مهدی نيازمندان‬
‫بهار‪1385‬‬
‫مقدمه‪7........................................................................................................................................‬‬
‫فصل اول ‪8..................................................................................................................................‬‬
‫باسها و اجزای داخلی کامپيوتر ‪8...................................................................................................‬‬
‫‪ 1-1‬باسها و عملکردشان ‪8...........................................................................................................‬‬
‫‪ 1-1-1‬باس نوع يک ‪9.................................................................................................................‬‬
‫‪ 1-1-2‬باس نوع دو ‪10.................................................................................................................‬‬
‫‪ 1-1-3‬باس نوع‪12....................................................................................................................3‬‬
‫‪ 1-2‬ثباتها‪17................................................................................................................................‬‬
‫‪ 1-3‬واحد محاسبه و منطق( ‪18......................................................................................... )ALU‬‬
‫‪ 1-4‬رجيستر‪ :‬دستورالعمل‪19..............................................................................................)IR( :‬‬
‫‪ 1-5‬واحد کنترل و زمانبندی ‪19...................................................................................................‬‬

‫‪1‬‬
‫فصل دوم ‪20................................................................................................................................‬‬
‫حافظهها‪20..................................................................................................................................:‬‬
‫‪20............................................................................................................................ROM 2-1‬‬
‫‪20.......................................................................................................................EPROM 2-2‬‬
‫‪20...................................................................................................................E2PROM 2-3‬‬
‫‪21...........................................................................................................................RAM 2-4‬‬
‫‪ RAM 2-5‬هایاستاتيك‪ :‬و ديناميک‪21..........................................................................................‬‬
‫فصل سوم‪21................................................................................................................................‬‬
‫کامپيوتر‪ :‬شريف ‪21.......................................................................................................................‬‬
‫‪ 3-1‬بلوک دياگرام کامپيوتر شريف‪22..........................................................................................:‬‬
‫‪ 3-1-1‬باس داده (‪22...........................................................................................................)DB‬‬
‫‪ 3-1-2‬واحد محاسبه ومنطق‪23.......................................................................................)ALU( :‬‬
‫‪ 3-1-3‬رجيستر وضعيت‪23.........................................................................................................‬‬
‫‪ 3-1-4‬آکوموالتور (‪24..................................................................................................... )Acc‬‬
‫‪ 3-1-5‬واحد زمانبندی و کنترل ‪24..............................................................................................‬‬
‫‪ 3-1-6‬رجيستر دستورالعمل (‪25...........................................................................................)IR‬‬
‫‪ 3-1-7‬شمارنده برنامه (‪25.................................................................................................)PC‬‬
‫‪ 1-8- 3‬باس آدرس (‪25.....................................................................................................)AB‬‬
‫‪ 3-2‬دو عمل اصلی ‪25.......................................................................................................CPU‬‬
‫‪ 3-3‬عملکرد کامپيوتر‪ :‬شريف و قالب بندي دستورالعملها‪27............................................................:‬‬
‫‪ 3-4‬شاخصها‪28.........................................................................................................................:‬‬
‫فصل چهارم ‪30............................................................................................................................‬‬
‫ميکرو پروسسور‪30..........................................................................................................8085 :‬‬
‫‪ 4-1‬پايههای ‪30.................................................................................................................8085‬‬
‫‪30..............................................................................................................0AD-7AD 4-1-1‬‬
‫‪30................................................................................................................. 15A-8A 4-1-2‬‬
‫‪31...............................Error! Objects cannot be created from editing field codes. 4-1-3‬‬
‫‪31..................................................................................................................READY 4-1-4‬‬
‫‪31.....................................................................................................................HOLD 4-1-5‬‬
‫‪31.................................................................................................................... HLDA 4-1-6‬‬
‫‪31....................................................................................................................... INTR 4-1-7‬‬
‫‪32...................................................................................................................... INTA 4-1-8‬‬
‫‪32.................................................................................................RST5.5 )6.5 ,7.5( 4-1-9‬‬
‫‪32....................................................................................................................TRAP 4-1-10‬‬
‫‪32..........................................................................................................RESET IN 4-1-11‬‬
‫‪32.....................................................................................................RESET OUT 4-1-12‬‬
‫‪32....................................................................................................................X1,X2 4-1-13‬‬
‫‪33.............................................................................................................CLK OUT 4-1-14‬‬
‫‪33.........................................................................................................................SID 4-1-15‬‬
‫‪ 4-2‬شاخصها‪33..........................................................................................................................:‬‬
‫‪ 4-3‬انواع آدرسده‪:‬ی در ‪34.................................................................................................8085‬‬
‫‪ 4-3-1‬روش آدرس‌دهي مستقيم‪34...............................................................................................‬‬
‫‪ 4-3-2‬روش آدرس‌دهي ثباتي ‪35..................................................................................................‬‬

‫‪2‬‬
‫‪ 4-3-3‬روش آدرس‌‌دهي فوري‪35.................................................................................................‬‬
‫‪ 4-3-4‬روش آدرس‌دهي غير مستقيم ‪35.........................................................................................‬‬
‫‪ 4-3-5‬روش آدرس‌دهي مستتر‪35.................................................................................................:‬‬
‫‪ 4-4‬برنامهنويس‪:‬ی در ‪36....................................................................................................8085‬‬
‫‪ 4-4-1‬انتقال داده‪36.....................................................................................................................‬‬
‫‪ 4-4-2‬گروه دستورهاي محاسباتي‪38............................................................................................:‬‬
‫‪ 4-4-3‬گروه شامل دستورات منطقي‪41.........................................................................................‬‬
‫‪ 4-4-4‬گروه دستورات‪ :‬پرش ‪42....................................................................................................‬‬
‫‪ 4-4-5‬گروه دستورات‪ O/I :‬و كنترل ماشين و ‪42...............................................................Stack‬‬
‫‪ 4-5‬وقفه ها ‪45............................................................................................................................‬‬
‫‪ 4-6‬زمانبند‪:‬ی ‪47.........................................................................................................................‬‬
‫‪ 4-6-1‬سيكل خواندن ‪47...............................................................................................................‬‬
‫‪ 4-6-2‬سيکل نوشتن ‪48................................................................................................................‬‬
‫‪ 4-6-3‬زمانبندی يک دستورالعمل‪ :‬نمونه‪48....................................................................................‬‬
‫‪ IC 4-5‬هاي جانبی ‪49.......................................................................................................8085‬‬
‫‪ IC 4-6-1‬های ‪ 8755‬و ‪49.............................................................................................8355‬‬
‫‪ IC 4-6-2‬های ‪ 8155‬و ‪50.............................................................................................8156‬‬
‫‪51........................................................................................................... )PPI( 8255 4-6-3‬‬
‫‪ 4-7‬اسکن صفحه کليد‪54............................................................................................................‬‬
‫‪ 4-8‬کنترل موتور پله‌ای‪56..........................................................................................................‬‬
‫‪ 4-9‬برنامة‌ چراغ راهنما‪57..........................................................................................................‬‬
‫‪ 4-9‬ثابت‌ها و آرايه‌ها در زبان اسمبلی‪59......................................................................................‬‬
‫فصل پنجم ‪61...............................................................................................................................‬‬
‫ميکروکنترلر ‪61.................................................................................................................8051‬‬
‫‪ 5-1‬بررس‪:‬ی اجمالی پايه‌های ‪62..........................................................................................8051‬‬
‫‪ 5-1-1‬درگاه صفر‪62.................................................................................................................‬‬
‫‪ 5-1-2‬درگاه يک‪63...................................................................................................................‬‬
‫‪ 5-1-3‬درگاه دو ‪63.....................................................................................................................‬‬
‫‪ 5-1-4‬درگاه سه ‪63....................................................................................................................‬‬
‫‪64...................................................................................................................... PSEN 5-1-5‬‬
‫‪64.........................................................................................................................ALE 5-1-6‬‬
‫‪64.........................................................................................................................‬‬
‫‪AE‬‬ ‫‪5-1-7‬‬
‫‪64.........................................................................................................................RST 5-1-8‬‬
‫‪ 5-1-9‬ورودي‌هاي نوسان‌ساز‪65..................................................................................................:‬‬
‫‪ 5-1-10‬اتصاالت تغذيه ‪65...........................................................................................................‬‬
‫‪ 5-2‬سازمان حافظه ‪66.................................................................................................................‬‬
‫‪ RAM 5-2-1‬همه منظوره‪66....................................................................................................‬‬
‫‪ RAM 5-2-2‬بيت آدرس پذير‪66.................................................................................................‬‬
‫‪ 5-2-3‬بانک های ثبات ‪67...........................................................................................................‬‬
‫‪ 5-2-4‬ثبات‌های کاربرد خاص‪68.................................................................................................‬‬
‫‪ 5-3‬دستياب‪:‬ی به حافظه کد و داده خارجی‪70...................................................................................‬‬
‫‪ 5-4‬روش‌های آدرس دادن‪71.......................................................................................................‬‬
‫‪ 5-4-1‬آدرس‌دهی ثبات‪71............................................................................................................‬‬

‫‪3‬‬
‫‪ 5-4-2‬آدرس دهی مستقيم‪72........................................................................................................‬‬
‫‪ 5-4-3‬آدرس دهی غير مستقيم ‪73.................................................................................................‬‬
‫‪ 5-4-4‬آدرس دهی فور‪:‬ی ‪73........................................................................................................‬‬
‫‪ 5-4-5‬آدرس دهی نسبی ‪74.........................................................................................................‬‬
‫‪ 5-4-6‬آدرس دهی مطلق ‪74........................................................................................................‬‬
‫‪ 5-4-7‬آدرس دهی طوالن‪:‬ی ‪75.....................................................................................................‬‬
‫‪ 5-4-8‬آدرس دهی انديس دار‪75...................................................................................................‬‬
‫‪ 5-5‬انواع دستورالعملها‪75...........................................................................................................:‬‬
‫‪ 5-5-2‬دستورالعملهای منطقی ‪76..................................................................................................‬‬
‫‪ RAM 5-5-3-1‬داخلی ‪77.........................................................................................................‬‬
‫‪ RAM 5-5-3-2‬خارجی ‪77.......................................................................................................‬‬
‫‪ 5-5-3-3‬جدولهای جستجو ‪78......................................................................................................‬‬
‫‪ 5-5-4‬دستورالعملهاي بولي ‪78.....................................................................................................‬‬
‫‪ 5-5-5‬دستورالعملهای انشعاب برنامه‪79.......................................................................................‬‬
‫‪ 5-6‬تايمرها‪79............................................................................................................................:‬‬
‫‪ 5-6-1‬ثبات حالت تايمر‪80...........................................................................................................‬‬
‫‪ 5-6-2‬ثبات كنترل تايمر‪82..........................................................................................................‬‬
‫‪ 5-7‬شروع‪ :‬به كار‪ ،‬توقف و كنترل تايمرها ‪83..............................................................................‬‬
‫‪ 5-8‬عمليات درگاه سريال ‪85.......................................................................................................‬‬
‫‪ 5-8-1‬حالت ‪85........................................................................................................................1‬‬
‫‪ 5-8-2‬حالت ‪86........................................................................................................................2‬‬
‫‪ 5-8-3‬حالت ‪86........................................................................................................................3‬‬
‫‪ 5-8‬وقفه ها ‪88............................................................................................................................‬‬
‫‪ 5-8-1‬سازمان وقفه ‪88................................................................................................................‬‬
‫‪ 5-8-2‬فعال و غير فعال کردن وقفه ها‪88......................................................................................‬‬
‫‪ 5-8-3‬تقدم وقفه ها‪89..................................................................................................................‬‬
‫‪ 5-8-4‬اجراي وقفه‌ها‪90...............................................................................................................‬‬
‫‪ 5-8-5‬بيتهاي پرچم وقفه‌ها ‪90.....................................................................................................‬‬
‫‪ 5-8-6‬بردارهاي‪ :‬وقفه ‪91.............................................................................................................‬‬
‫فصل ششم ‪94...............................................................................................................................‬‬
‫ميکروکننده های ‪94...........................................................................................................AVR‬‬
‫‪ 6-1‬مقدمه‪94...............................................................................................................................‬‬
‫‪ 6-2‬پايه ها و سيگنال ها‪95..........................................................................................................‬‬
‫‪ 6-3‬امكانات موجود در ‪97.................................................................................................AVR‬‬
‫‪97..........................................................................................................................CPU 6-3-1‬‬
‫‪ 6-3-2‬حافظه ها ‪101...................................................................................................................‬‬
‫‪ 6-3-2-1‬حافظه برنامه‪101..........................................................................................................‬‬
‫‪ 6-3-3‬مدارات راه اندازي و كنترل ‪103........................................................................................‬‬
‫‪ 6-3-4‬واحدهاي جانبي (‪105................................................................................................)I/O‬‬
‫فصل هفتم‪107..............................................................................................................................‬‬
‫‪107................................................................................................................................. DMA‬‬
‫‪ 7-1‬مفهوم ‪107................................................................................................................DMA‬‬
‫‪ 7-2‬برنامه ريزي تراشه ‪108..................................................................................DMA 8237‬‬

‫‪4‬‬
‫‪ 7-3‬ثبات هاي كنترل داخلي ‪108.........................................................................................8237‬‬
‫‪ 7-3-1‬ثبات فرمان ‪109................................................................................................................‬‬
‫‪ 7-3-2‬ثبات وضعيت‪109.............................................................................................................‬‬
‫‪ 7-3-3‬ثبات مد‪109......................................................................................................................‬‬
‫‪ 7-3-4‬ثبات تك پوشش‪110...........................................................................................................‬‬
‫‪ 7-3-5‬ثبات تمام پوشش‪110.........................................................................................................‬‬
‫‪ 7-3-6‬ثبات موقت‪/‬پاك‪ :‬كردن اصلي ‪110.......................................................................................‬‬
‫‪ 7-3-7‬پاك كردن ثبات پوشش ‪110................................................................................................‬‬

‫‪5‬‬
‫پيشگفتار‬

‫در اوايل دهه ‪ 60‬ميالدي اياالت متحده در آستانه شکل گيري تکنولوژي نويني‪ :‬در‬
‫مهندسي برق بود‪ .‬ترانزيستور‪ :‬که کمي پس از پايان جنگ جهاني دوم توسط سه دانشمند‪ :‬در‬
‫آزمايشگاههاي‪ :‬كمپاني بل ابداع شده بود‪ ،‬کم کم جايگزين رقيبش المپ خال مي شد‪.‬‬
‫در سال ‪ 1968‬رابرت نويس و گوردون مور‪ ،‬دو نفر از پايه گذاران اصلي كمپاني‬
‫فيرچايلد‪ :‬شرکت جديدي موسوم‪ :‬به اينتل‪ 1‬تاسيس نمو دند‪ .‬در سال ‪ 1969‬يک شرکت ژاپني‬
‫سازنده ماشين حساب‪ ,‬به آنها سفارش يک آي سي خاص براي ماشين حسابهاي جديد خود داد‬
‫و يک پردازنده مرکزي‪ )CPU( :‬چهار بيتي بر روي يک تراشه ساخته شد و بدين ترتيب‬
‫خانواده ‪ IC‬هاي اينتل ‪ 4000‬متولد گرديد‪ .‬اين روند ادامه پيدا کرد و در سال ‪ ,1972‬آي سي‬
‫هشت بيتي ‪ , 8008‬پس از آن ‪ 8085 , 8080‬ودر اواخر دهه‪ 1970‬چند ميکروپروسسور ‪16‬‬
‫بيتي به بازار عرضه شد ‪.‬‬
‫اين تحول تا امروز‪ :‬ادامه داشته است و ميکروپروسسورهاي ‪ 32‬بيتي و ‪64‬‬
‫بيتي(پنتيوم) پا به عرصه وجود‪ :‬گذاشتهاند‪ .‬اکثر ميکروکامپيوتر‪ :‬هاي اوليه به صورت کيت‬
‫فروخته مي شدند و براي انجام کاري خاص‪ ,‬بايد به زبان ماشين برنامه ريزي‪ :‬مي شدند و‬
‫قابليت توليد انبوه را نداشتند‪ ,‬تا اينکه در‪ 1982‬شرکت ‪ IBM‬براي اولين بار شروع به فروش‬
‫کامپيوترهاي شخصي‪ 2:‬نمود و امروزه شاهد جهش هاي ناباورانه اي در زمينه رشد تکنولوژي‪:‬‬
‫وقا بليت هاي کامپيوترهاي‪ :‬شخصي هستيم‪.‬‬

‫گردآورنده‬

‫مقدمه‬

‫‪·1‬‬
‫‪Integrated Electronics‬‬
‫‪Personal Computer(PC) · 2‬‬

‫‪6‬‬
‫اين مجموعه به بررسي‪ :‬مباني تکنولوژي‪ :‬ريز پردازندهها‪ 1‬مي پردازد و به عنوان يک‬
‫منبع درسي‪ :,‬براي درس ساختار‪ :‬و زبان ماشين در نظر گرفته شده است‪ .‬تمرکز ما در اين‬
‫کتاب‪ ،‬فهم اجزاء سخت افزاري يک سيستم‪ :‬ميکروکامپيوتر و نقش نرم افزار در کنترل سخت‬
‫افزار است‪.‬‬
‫قسمت عمده آنچه در اين مجموعه مالحظه مي شود‪ ,‬از بخش هاي مختلف چند کتاب‬
‫و نيز جزوه درس ساختار‪ :‬و زبان ماشين گردآوري شده است‪ .‬در اين مجموعه به بررسي‬
‫‪2‬‬
‫ميکروپروسسور‪ :‬هشت بيتي" شريف"‪ ،‬ميکروپروسسور‪ :‬هشت بيتي ‪ , 8085‬ميکروکنترلر‬
‫هشت بيتي ‪ 8051‬و در انتها به اختصار به ميکروکنترلر ‪ AVR‬مي پردازيم‪ .‬البته در مورد‪:‬‬
‫ميکروپروسسور"‪ :‬شريف"‪ ،‬به دليل آنکه صرفا‪ :‬يک مدل براي يادگيري‪ :‬و آشنايي اوليه است‪,‬‬
‫به سخت افزار چنداني پرداخته نمي شود‪ .‬دو مورد‪ :‬بعدی که از ميکروپروسسور‪ :‬هاي واقعي‪ :‬و‬
‫ساخت شرکت اينتل هستند بطور مفصل تر مورد‪ :‬بررسی قرار‪ :‬می گيرند‪ .‬يادآوري مي نمايدكه‬
‫تاکيد بر ساختار‪ :‬سه باسه( ‪ CPU‬هاي استفاده كننده از سه باس) است که در فصل هاي بعدي‬
‫بهنگام افزودن حافظه و ‪ I/O‬به کار مي آيد‪ ،‬به همين منظور‪ ,‬در فصل اول به معرفي‪ :‬باس‬
‫مي پردازيم‪ .‬همچنين‪ ،‬در اين درس به آيسيهاي پشتيبان‪ 3‬ويژه ‪ 8085‬و روشهاي‪ I/O :‬ي‬
‫سري خواهيم پرداخت‪ .‬همچنين‪ ،‬به اختصار‪ :‬به معرفي‪ :‬فلسفه و توري‪ :‬پايه ‪ DMA‬و ‪AVR‬‬
‫مي پردازيم‪.‬‬

‫فصل اول‬

‫باسها و اجزای داخلی يك کامپيوتر‬

‫‪Microprocessors‬‬ ‫‪·1‬‬
‫‪Microcontrollers · 2‬‬
‫‪· 3‬منظور مها ن ‪Peripheral‬ا ست‪.‬‬

‫‪7‬‬
‫‪3‬‬
‫در اين فصل ابتدا با باسها‪ 1‬و زمانبندی‪ 2‬عملکرد صحيح آنها‪ ,‬مطالبي‪ :‬از قبيل سهحالته‬
‫و امکان اتصال خروجي‪:‬هاي چند گيت‪ 4‬به يکديگر آشنا خواهيم شد‪ .‬ادامه اين فصل به ساير‬
‫اجزاي اصلي کامپيوتر(‪ )CPU‬اختصاص دارد‪.‬‬

‫باس ها و عملکردشان‬ ‫‪1.1‬‬

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

‫باس نوع اول‬ ‫‪1.1.1‬‬

‫روي باس نوع ‪ ,1‬يک فرستنده سيگنال و يک گيرنده داريم‪ .‬از آنجا که‬
‫ميکروپروسسورها‪ :‬با استفاده از تكنولژي‪5 MOS :‬ساخته شده اند و توانايي‪ :‬جرياندهي شان‬
‫بسيار محدود‪ :‬است‪ ,‬به عنوان يک قاعده کلي هرگاه بار روي باس از توانايي‪ :‬جرياندهي‬
‫ميکروپروسسور‪ :‬بيشتر باشد‪ ,‬يا گيرنده در برد اصلي نباشد بافر الزم است‪ .‬منظور از‬
‫بافرکردن باس‪ ,‬اتخاذ روشي‪ :‬براي اطمينان از انتقال سطوح منطقي معتبر بر روي‪ :‬باس است‪.‬‬
‫شکل ‪ 1-1‬چند نوع بافر‪6 :‬متداول را نشان مي دهد‪ .‬آي سي هايي از خانوادة ‪TTL7‬‬
‫مانند ‪ 74LS245‬و ‪ 4LS244‬اين جنبه گيرا را دارند که در هر آيسي هشت بافر‪ :‬وجود دارد‪.‬‬

‫‪Bus‬‬ ‫‪·1‬‬
‫‪Timing · 2‬‬
‫‪Tri State · 3‬‬
‫‪Gate · 4‬‬
‫‪Metal Oxyde Semiconductor . 5‬‬
‫‪Buffer . 6‬‬
‫‪.Transistor Transistor Logic 7‬‬

‫‪8‬‬
‫معموال نه تنها بافر کردن فرستنده‪ ,‬که بافر کردن ورودي‪ :‬گيرنده ها نيز سودمند‪ :‬است‪ ,‬زيرا‬
‫اين کار مقدار بارهايي‪ :‬را که مي توانند‪ :‬روي باس قرار بگيرند‪ :‬بسيار زياد ميکند‪ .‬در مورد اين‬
‫دو آیسی در بخش ‪ 3-1-1‬بيشتر توضيح داده شده است‪.‬‬

‫شكل ‪ 1-1‬باس نوع يك‬


‫تمام بافرهاي‪ :‬شکل ‪ 2-1‬توانايي سه حالته بودن را دارند‪ ,‬به اين معني که عالوه بر دو‬
‫حالت ‪ 0‬و‪ 1‬منطقي‪ ,‬يک حالت سوم هم ميتوانند‪ :‬داشته باشند‪ .‬اين حالت سوم در واقع حالت‬
‫امپدانس باال‪ 1‬يا مدار باز است‪ .‬بافرهاي سه حالته اجازه ميدهند چند فرستنده يک خط باس را‬
‫کنترل کنند‪ .‬اگر تمام فرستندهها بجز يکي در حالت امپدانس باال قرار‪ :‬گيرند هيچ تداخلي پيش‬
‫نميآيد‪ .‬اين خاصيت در مورد‪ :‬باس نوع سوم مورد‪ :‬استفاده قرار ميگيرد‪:.‬‬

‫باس نوع دوم‬ ‫‪1.1.2‬‬

‫‪High Impedance‬‬ ‫‪·1‬‬

‫‪9‬‬
‫در باس نوع ‪ ,2‬چند فرستنده و يک گيرندة سيگنال داريم‪ .‬اين نوع باس را نميتوان با‬
‫گيتهاي ‪ TTL‬استاندارد ساخت‪ .‬شکل ‪ 2-1‬دليل اين امر را نشان ميدهد‪ .‬تا وقتي هر دو‬
‫فرستنده ميخواهند‪ :‬مقدار منطقي يکساني‪ :‬روي خط قرار دهند‪ ,‬اشکالي پيش نميآيد‪ .‬ولي همين‬
‫که خروجي‪ :‬يکي ‪ 1‬و يکي ‪ 0‬باشد‪ ,‬باس وضعيت مبهمي پيدا ميکند و بدتر اينکه امکان دارد از‬
‫گيتي با خروجي‪ 1 :‬جريان زيادي‪ :‬وارد گيتي با خروجي‪ 0 :‬شود و هر دو گيت آسيب مي ببينند‪.‬‬
‫اين وضعيت‪ ,‬نزاع بر سر باس نام دارد‪.‬‬

‫شكل ‪ 2-1‬باس نوع دو‬


‫يک راه براي حل اين مشکل استفاده از گيتهاي سه حالته‪ 1‬به عنوان فرستنده است‪ .‬با‬
‫فعال کردن تنها يک فرستنده در هر زمان‪ ,‬نزاع بر سر باس ختم ميشود‪ .‬مسالهاي‪ :‬که اين راه‬
‫حل به وجود‪ :‬ميآورد يک مدار منطقي اضافهاي است که براي اطمينان از فعال کردن فقط يک‬
‫فرستنده در هر زمان بايد به کار برده شود‪.‬‬
‫راه حل ديگر استفاده از باس کلکتور باز (درين باز)‪ 2‬شکل ‪ 3-1‬است‪ .‬در اين طرح‬
‫خروجي فرستندهها‪ ,‬کلکتور‪ :‬باز است‪.‬يعني اينها ميتوانند‪ :‬با اشباع کردن ترانزيستور‪:‬‬
‫خروجيشان‪ ,‬ولتاژ‪ :‬باس را به صفر بکشند‪ ,‬ولي براي رساندن ولتاژ باس به ‪ ,1‬به يک مقاومت‬
‫باالبر(ولتاژ)‪ 3‬خارجي احتياج داريم‪ .‬مثالي از اين دست‪ NAND ,‬کلکتور‪ :‬باز ‪ 7401‬است‪.‬‬

‫‪Tri State Output. 1‬‬


‫‪Open Collector(Open Drain). 2‬‬
‫· (‪Pull Up (Resistor) )Voltage‬‬ ‫‪3‬‬

‫‪10‬‬
‫عيب اين نوع باس اين است که نميتوان تعيين کرد که کدام فرستنده باس را صفر کرده‬
‫است‪ .‬به اين ترتيب پروسسور مجبور‪ :‬است وضعيت‪( 1‬خروجي ها) را بخواند‪ :‬تا بتواند‪ :‬وسيله‬
‫فعال کننده را بيابد‪ ,‬اين روش‪ ,‬همهپرسي‪ 2:‬نام دارد‪.‬‬

‫شكل ‪ 3-1‬باس نوع ‪ 2‬با دروازه هاي كلكتور‪ :‬باز‬


‫البته در بسياري‪ :‬حاالت الزم نيست ‪ CPU‬بداند چه وسيلهاي باس را صفر کرده است‪,‬‬
‫مثال حالت انتظار‪ 3:‬که از طرف‪ :‬يک حافظه کند که نميتواند به سرعت داده مورد تقاضاي‬
‫‪ CPU‬را فراهم آورد درخواست‪ :‬ميشود‪ .‬در اين حالت اينکه کدام حافظه تقاضاي انتظار کرده‬
‫مهم نيست‪.‬‬

‫‪ 1.1.3‬باس نوع سوم‬

‫باس نوع‪ ,3‬يک باس دو جهته است که روي‪ :‬آن چند ين فرستنده وچند گيرنده قرار‬
‫دارد‪.‬‬
‫متداولترين مثال‪ ,‬باس داده‪ 4‬در يك سيستم ميکروپروسسوري‪ :‬است‪ .‬شکل ‪ 4-1‬جهت‬
‫عبور داده از يک وسيله ورودي به ‪ CPU‬را نشان ميدهد‪ .‬توجه کنيد که تمام فرستندهها‪ :‬به‬
‫صورت گيتهاي سه حالته وتمام‪ :‬گيرندهها به صورت لچ‪ 5‬شامل فيليپ فالپهاي‪ D :‬نشان داده‬
‫شدهاند‪.‬‬

‫‪Status‬‬ ‫‪·1‬‬
‫‪Polling · 2‬‬
‫‪Wait(State) · 3‬‬
‫‪Data Bus · 4‬‬
‫‪Latch · 5‬‬

‫‪11‬‬
‫لزوم سه حالته بودن فرستندهها‪ :‬بايد روشن باشد‪ .‬در هر زمان تنها بايد يک فرستنده‪,‬‬
‫کنترل باس را در دست داشته باشد‪ ،‬اما ممکن است لزوم‪ :‬لچ داشتن گيرنده چندان واضح نباشد‪.‬‬
‫چيزي که بايد به ياد داشته باشيم اين است که داده براي مدت کوتاهي روي‪ :‬باس قرار‪ :‬ميگيرد‪.‬‬
‫به عنوان مثال‪ ،‬هنگام اجراي يک دستور‪ :‬ورودي‪ :‬در سيکل ‪ M1‬روي‪ :‬باس‬

‫شكل ‪ 4-1‬جهت عبور داده بر روي يك باس دو جهته‬


‫داده آپ کد دستور‪ IN :‬وجود‪ :‬دارد‪( .‬مراحل اجراي يک دستور در فصلهاي بعدي به‬
‫تفضيل شرح داده خواهد شد) در سيکل ماشين بعدي اين باس آدرس دريچه ورودي‪/‬خروجي‪:‬‬
‫را دارد‪ .‬در سيکل ماشين سوم وسيله ورودي فعال شده و داده را روي‪ :‬باس قرار‪ :‬ميدهد‪ .‬چون‬
‫هر سيکل ماشين تنها چهار يا پنج سيکل ساعت طول ميکشد‪ ,‬هر گيرنده بايد موقعي که نوبتش‬
‫است داده را سريعا‪ :‬در لچ خود قرار دهد‪.‬‬
‫مساله اصلي باس‪ 3‬همين است؛ چطور‪ :‬يک گيرنده يا فرستنده ميفهمد که نوبتش رسيده‬
‫است؟‬
‫پاسخ اين سوال به روشهاي‪ :‬کدگشايي‪ 1‬باس آدرس وکنترل برميگردد‪ ,‬اين روشها‪ :‬را در‬
‫آينده به تفضيل خواهيم ديد؛ ولي ايده به حد کافي ساده است‪ .‬در واقع زمانبندی‪ :‬عملکرد اين‬
‫باس از اين قرار است ‪ :‬اگر خط خواندن ‪ I/O‬باس کنترل فعال است‪ ,‬و آدرس ما روي‪ :‬باس‬
‫آدرس قرار‪ :‬دارد‪ ,‬نوبت ماست که داده را روي باس قرار دهيم و بايد فرستنده سه حالته خود را‬
‫فعال کنيم‪ .‬البته باز هم بافر نياز است‪ .‬شکل ‪ 5-1‬روش کار را نشان ميدهد‪ .‬براي هر خط دو‬
‫گيت سه حالته با خطوط‪ Enable, READ :‬و ‪ WRITE‬مجزا الزم است‪ .‬سيگنالهاي فعال‬
‫کننده را بايد از باس کنترل ميکروپرسسور گرفت‪.‬‬

‫‪Decoding‬‬ ‫‪·1‬‬

‫‪12‬‬
‫شكل ‪ 5-1‬بافر باس دو جهت‪ .‬در هر زمان فقط يك دروازه فعال مي شود‬
‫بعضي از انواع متداول اين بافرها‪ :‬در شکل ‪ 6-1‬نشان داده شده است‪ .‬از اين ميان‬
‫‪ 74LS245‬براي اين کاربرد‪ :‬بسيار مناسب است؛ چون اين آيسي هشت زوج سه حالته با‬
‫خطوط کنترل مجزاي ‪ Enable‬و انتخاب جهت‪ 1‬دارد‪.‬‬

‫‪Direction‬‬ ‫‪·1‬‬

‫‪13‬‬
‫شكل ‪ 6-1‬فرستنده گيرنده هاي متداول براي بافر‪ :‬كردن باس داده‬
‫ميكروپروسسور‪:‬‬
‫همچنين در مورد لچ ‪ , 74LS373‬براي جدا کردن خطوط‪ :‬آدرس و داده در ‪ 8085‬که‬
‫مالتيپلکس شدهاند الزم است‪( 373' .‬فرم اختصاري ‪ , 74LS373‬درادامه مورد‪ :‬اين نوع‬
‫نمايش بيشتر‪ :‬توضيح خواهيم داد)‪ ,‬هشت فيليپ فالپ با يک ورودي‪ :‬مشترک فعال باال‪ 1‬دارد‪.‬‬
‫وقتي سيگنال ‪ 2ALE‬يک است خطوط ‪ AD0‬تا ‪ AD7‬بخش مرتبه پايين آدرس را حمل‬
‫ميکند‪ .‬نيز لچ ‪ 74LS374‬براي اتصاالتي‪ :‬از قبيل ‪ 8085‬به خروجيهايي مانند ‪ LED‬مناسب‬
‫است‪ .‬هر دو لچ‪ ,‬با يک شدن ‪ ,OE‬خروجيهايشان امپدانس باال ميشود‪ 373' :.‬داراي ‪ 20‬پايه‬
‫است‪ 8 ,‬پايه آن به عنوان ورودي‪ :‬و‪ 8‬پايه به عنوان خروجي تعريف‪ :‬شده‌اند‪ .‬عالوه بر اين ‪16‬‬
‫پايه‪ ،‬يک پايه ورودي ‪ 3OE‬نيز وجود‪ :‬دارد كه اگر فعال شود ورودي‪ :‬لچ را به خروج‪:‬ي مدار‬
‫مجتمع متصل مي کند و اگر اكتيو نباشد خروجي‪ :‬به حالت شناور‪ :‬مي‌رود‪ .‬پايه‌ ديگر اين ‪، IC‬‬
‫ورودي‪ Clock :‬است كه با عالمت اختصاري‪ CLK :‬نمايش داده مي‌شود‪ ،CLK :.‬ساعت‬
‫سيستم (پالس مربعي‪ :‬با فركانس‪ :‬ثابت) است‪ .‬اين پالس مربعي‪ :‬توسط يک کريستال‪ :‬توليد مي‬
‫شود‪ .‬اين پايه‌ها در شكل ‪ 7-1‬نشان داده شده اند‪ .‬اين ‪ ،IC‬حساس به سطح‪ 4‬است يعني در طول‬
‫مدت زماني‪ :‬كه ‪ CLK‬اكتيو است‪ IC ،‬ورودي را به خروجي‪ :‬منتقل مي‌كند‪ 374' .‬مشابه '‪373‬‬
‫است‪ ،‬تنها تفاوتش در اين است كه اين ‪ ،IC‬حساس به لبه‪ 5‬است يعني زماني‪ :‬كه ‪ ،CLK‬از‬
‫صفر به يك مي‌رود‪ :‬سيگنال ورودي‪ :‬به خروجي‪ :‬منتقل مي‌شود‪ .‬اين پايه‌ها در شكل ‪ 8-1‬نشان‬
‫داده شده اند‪.‬‬
‫ميکنيم‪ .‬مثالً چرا‬
‫در اين قسمت به نامگذاري و عالمت اختصاري ‪ IC‬ها اشاره‌اي ‌‬
‫‪ 74LS373‬را با '‪ 373‬نشان مي‌دهند؟ ‪ IC‬ها به گروه هاي مختلفي تقسيم مي شوند وهر ‪IC‬‬
‫‪ IC‬هايي هستند که چند حرف اول نامشان شبيه‬
‫‪ IC‬هاي هم گروه ‌‬
‫در يک گروه قرار مي‌گيرد‪‌ :.‬‬
‫به هم است ولي تفاوت درحروف آخرشان است‪ .‬بنابراين به جاي تكرار حروف مشابه‪ ,‬عالمت‬
‫(') مي‌گذاريم؛ مثالً در گروه ‪ IC‬هايي كه با ‪ 74‬شروع‪ :‬مي‌شوند‪ ،‬نامهايي‪ :‬از قبيل ‪74L ،‬‬
‫‪ 74LS ،‌74H، 74C، 74AC، 74S‬و‪ ...‬ديده مي شود كه هر كدام معرف خصوصيتي‪:‬‬
‫هستند‪.‬‬
‫‪Active High‬‬ ‫‪·1‬‬
‫‪Address Latch Enable · 2‬‬
‫‪Output Enable · 3‬‬
‫‪Level Triggered · 4‬‬
‫‪Edge Triggered ·5‬‬

‫‪14‬‬
‫بعنوان توضيح‪ 74LS ,‬که يکي از متداولترين گروههاست‪L ,‬اش به خاطر اين است كه‬
‫فعال پايين‪ 6‬است يعني با صفر فعال و با يك غير فعال مي‌شود‪ :‬و ‪ S‬اش به خاطر اين است كه‬
‫‪ Shot key‬است يعني سرعت عملکرد آن باالست‪ .‬و يا ‪ 74H، High power‬است و ‪74C‬‬
‫به خاطر اين است كه از ‪ CMOS‬در اين ‪ IC‬استفاده شده است‪ .‬به عنوان مثالي ديگر بجاي‬
‫اينكه بنويسيم‪ 74HC 00 :‬مي‌نويسيم ‪ ' 00 :‬و‪. ...‬‬

‫شکل ‪ 8-1‬آیسی ‪74LS374‬‬ ‫شکل ‪ 7-1‬آیسی ‪74LS373‬‬

‫همچنين’‪)74LS138( 138‬يک دکودر‪ 3 :‬به ‪ 8‬پرکاربرد است وخروجي‌هاي‪ :‬اين‬


‫دکودر‪ ،‬فعال پايين مي‌باشند‪ :.‬سه ورودي‪ Enable :‬داردکه ‪ E1‬و‪ E2‬بايد ‪ Low‬باشند و‪ E3‬بايد‬
‫‪ High‬باشد تا ‪ IC‬فعال باشد‪ 3 .‬پايه ديگر انتخابگرها‪ :‬هستند و ‪ 8‬پايه هم به عنوان خروجي‪:‬‬
‫ميشوند‪ .‬ورودي‌هاي‪:‬‬
‫تعيين شدهاند‪ .‬خروجيها توسط‪ :‬ترکيبي از سه ورودي‪ :‬توانا کننده فعال ‌‬
‫فعال کننده به پايه‌هاي ‪ A، B‬و‪ C‬آي سي اعمال مي‌شوند و با ديکد شدن ورودي‌ها خروجي‪:‬‬
‫مورد نظر فعال مي‌شود‪ :.‬اين خروجيها مي‌تواند به فعال کننده‌ يک تراشه مثل‪RAM, ROM‬‬
‫و‪ ...‬وصل شود‪ .‬بنابراين با اين ‪ IC‬مي‌توانيم‪ 8 :‬تراشه را فعال يا غير فعال کنيم‪ .‬مثالً اگر عدد‬
‫‪ 010‬را به پايه‌هاي انتخابگر‪ :‬بدهيم خروجي ‪ 2‬فعال مي‌شود‪ :‬و به همين ترتيب براي ‪ 8‬خروجي‬
‫ديگر‪ .‬شماتيک اين ‪ IC‬مطابق‪ :‬شکل ‪ 9-1‬است‪.‬‬

‫‪Active Low‬‬ ‫‪·6‬‬

‫‪15‬‬
‫شکل ‪ 9-1‬آیسی ‪74ALS138‬‬
‫مورد ديگر (‪244’)74LS244‬است‪ .‬اين قطعه شامل ‪ 8‬خط بافر فعال باال ميباشد‪.‬‬
‫خروجي آن سه حالته است‪ 1 ,0 ،‬وحالت امپدانس باال (‪)Z‬؛ اين قطعه ‪ 8‬پايه ورودي و‪ 8‬پايه‬
‫خروجي و ‪ 2‬پايه ‪ Enable‬دارد‪ .‬پايههاي بافر‪ :‬به دو گروه تقسيم بندي ميشوند‪ ،‬گروه يک شامل‬
‫فعال باشد وروديها‪ )A0-A3( :‬در خروجيها‪:‬‬ ‫است و اگر‬ ‫پايههاي ‪ A0,A1,A2,A3‬و‬
‫(‪ )Y0-Y3‬ظاهر ميشوند وگرنه خروجي‪ :‬ها (‪ )Y0-Y3‬به حالت ‪ Z‬ميروند‪:.‬‬
‫فعال باشد وروديها‪( :‬‬ ‫است و اگر‬ ‫گروه دو شامل پايههاي ‪ A4,A5,A6,A7‬و‬
‫‪ )A4-A7‬در خروجيها (‪ )Y4-Y7‬ظاهر ميشوند‪ :‬وگرنه خروجي ها (‪ )Y4-Y7‬به حالت ‪Z‬‬
‫ميروند‪ .‬اين بافر‪ :‬در شکل ‪ 10-1‬مشاهده ميشود‪.‬‬
‫‪ 74LS245‬هم يک بافر مانند ‪ 74LS244‬است‪ ,‬با اين تفاوت که دو طرفه است‪.‬‬

‫شکل ‪ 10-1‬آیسی ‪74ALS244‬‬

‫‪1‬‬
‫‪ 1-2‬ثباتها‬
‫همه ميکروپروسسورها معموال داراي چندين ثبات هستند‪ .‬مثال ‪ 8085‬شش رجيستر‪ :‬همه‬
‫منظوره هشت بيتي با نامهاي ‪ B, C, D, E, H‬و ‪ L‬دارد‪ .‬همچنين داراي دو رجيستر خاص‬

‫‪Register‬‬ ‫‪·1‬‬

‫‪16‬‬
‫است‪ ,‬يکي ‪( A‬آکوموالتور‪ 1:‬يا انباره) و ديگري‪ :‬رجيستر ‪( F‬رجيستر‪ :‬پرچم)‪ 2‬که اين دو نيز‬
‫هشت بيتي هستند‪ .‬نيز دو رجيستر‪ 16 :‬بيتي با نامهاي ‪ SP‬و ‪ PC‬دارد‪ .‬رجيستر ‪ PC‬شمارنده‬
‫برنامه‪ 3‬است و طول آن (‪ 16‬بيت) با باس آدرس ‪ 8085‬سازگار‪ :‬است‪ .‬شمارنده برنامه آدرس‬
‫دستورالعمل‪ :‬بعدي را که‪ CPU‬از حافظه احضار ميکند‪ ,‬نگه مي دارد‪ .‬اين قضيه در مورد‬
‫‪ 8051‬و ماشين شريف هم همين طور است‪ .‬رجيستر ‪ SP‬اشارهگر‪ 4‬پشته ناميده مي شود‪ .‬اين‬
‫رجيستر نيز يک آدرس ‪ 16‬بيتي را در خود نگه مي دارد‪ ,‬ولي اين آدرس به بخش خاصي از‬
‫حافظه موسوم‪ :‬به پشته اشاره مي کند‪ .‬از بخش پشته ميتوان به عنوان تعداد تقريبا نامحدودي‪:‬‬
‫رجيستر خارج از آيسي استفاده کرد‪ .‬البته فلسفه اصلي تعريف پشته‪ ,‬حفظ آدرس برگشت‬
‫هنگامي که يک زير برنامه(سابروتين)‪ 5‬صدا زده ميشود‪ :,‬ميباشد‪.‬‬
‫توضيح در مورد‪ :‬رجيستر ‪ F‬اينکه‪ ,‬در ‪ 8085‬اين رجيستر شامل پنج پرچم وضعيت و‬
‫سه بيت تعريف نشده است؛ در واقع اين پرچمها‪ :‬فليپ فالپهاي‪ 1 :‬بيتي هستند که ميتوانند‪ :‬يک يا‬
‫صفر باشند‪ .‬در حالت کلي بعضي دستورالعمل‪:‬هاي ‪ 8085‬بر تمام يا بعضي از آنها تاثير دارد و‬
‫بعضي از دستورالعملها‪ :‬نيز بر هيچ کدام تاثير ندارند‪ :.‬اين پنج پرچم عبارتند از‪:‬‬
‫‪( CY‬رقم نقلي)‪ : 6‬اگر در جمع‪ ,‬رقم نقلي توليد شود يا اجراي دستور‪ :‬تفريق مستلزم رقم‪:‬‬
‫قرضي‪ )borrow( :‬شود اين پرچم ‪ set‬در غير اين صورت‪ reset :‬مي شود‪.‬‬
‫‪( P‬توازن)‪ : 7‬اگر تعداد بيتهاي حاصل يک عمل زوج باشد اين پرچم ‪ set‬در غير اين‬
‫صورت ‪ reset‬مي شود‪.‬‬
‫‪( AC‬رقم نقلي کمکي)‪ : 8‬اگر دستورالعملي‪ :‬باعث ايجاد رقم نقلي از بيت ‪ 3‬به ‪ 4‬شود‪,‬‬
‫اين بيت ‪ set‬در غير اين صورت ‪ reset‬خواهدشد‪.‬‬
‫‪( Z‬صفر)‪ : 9‬اگر نتيجه يک دستورالعمل مقدار صفر باشد اين پرچم ‪ set‬در غير اين‬
‫صورت ‪ reset‬مي شود‪.‬‬

‫‪Accumulator‬‬ ‫‪·1‬‬
‫‪Flag Register · 2‬‬
‫‪Program counter · 3‬‬
‫‪Stack Pointer · 4‬‬
‫‪Subroutine · 5‬‬
‫‪Carry · 6‬‬
‫‪Parity · 7‬‬
‫‪Auxiliary Carry · 8‬‬
‫‪Zero · 9‬‬

‫‪17‬‬
‫‪( S‬عالمت)‪ : 1‬اگر با ارزش ترين بيت حاصل يک عمل ‪ 1‬باشد‪ ,‬اين پرچم ‪ set‬در غير‬
‫صورت ‪ reset‬مي شود‪.‬‬
‫وضعيت در مورد‪ 8051 :‬و شريف‪ :‬نيز مشابه است که در جاي خود توضيح داده خواهد‬
‫شد‪.‬‬

‫‪2‬‬
‫‪ 1-3‬واحد محاسبه و منطق( ‪)ALU‬‬
‫واحد ‪ ALU‬كه به آن واحد محاسبه و منطق‌گويند دو ورودي مي‌گيرد‪ :‬يکي آکوموالتور‪:‬‬
‫و ديگري‪ :‬رجيستر ‪ Temp‬؛ پس از انجام عمل خواسته شده (كه از طريق پايه‌هاي كنترلي به‬
‫اين واحد دستور داده مي‌شود) خروجي را تحويل مي‌دهد‪ .‬اين واحد هم اعمال محاسباتي‪ :‬و هم‬
‫اعمال منطقي را انجام مي‌دهد‪ .‬مثالً براي جمع دو عدد ‪ 11‬و‪ , 20‬يكي از اين اعداد در‬
‫آكوموالتور ذخيره مي شود و عدد ديگر به رجيستر‪ :‬كمكي ‪ Temp‬انتقال مي‌يابد‪ ،:‬پس از‬
‫محاسبه در خروجي ‪ ALU‬عدد ‪ 31‬قرار مي‌گيرد‪:.‬‬

‫‪3‬‬
‫‪ 1-4‬رجيستر دستورالعمل (‪)IR‬‬
‫هر دستوري كه ‪ fetch‬ميشود بصورت‪ :‬يک عدد باينري است‪ ,‬اين اعداد بايد تحليل‬
‫‪4‬‬
‫شوند‪ .‬در اين قسمت هر دستور‪ :‬ابتدا ديکد مي‌شود‪ :‬و سپس به واحد واحد کنترل و زمانبندی‬
‫فرستاده ميشود‪ :‬تا پايه‌هاي كنترل واحدها بنا به دستوري‪ :‬كه وارد ‪ CPU‬مي شود فعال يا غير‬
‫فعال شوند ‪.‬‬

‫‪ 1-5‬واحد کنترل و زمانبندی‬


‫اين واحد‪ ,‬كنترل سيستم را بر عهده دارد‪ .‬وروديهاي اين بخش‪ ,‬پالس ساعت وخروجي‪:‬‬
‫‪ IR‬است‪ .‬بر اساس اينکه چه دستوري‪ :‬بايد انجام شود سيگنالهاي مناسبي‪ :‬از قبيل ‪Memory‬‬
‫‪ ,Read , Memory Write‬و‪ ...‬بايد فعال شوند‪:.‬‬

‫‪Sign‬‬ ‫‪·1‬‬
‫‪Arithmetic Logic Unit · 2‬‬
‫‪Instruction Register · 3‬‬
‫‪Timing And Control · 4‬‬

‫‪18‬‬
‫تمام قسمتهاي‪ :‬گفته شده تا اينجا‪ ,‬ارکان اصلي يک ‪ CPU‬هستند‪ .‬در‬
‫ميکروپروسسورهاي مختلف ممکن است اين اجزاء با هم اندکي تفاوت داشته باشند‪ ,‬در‬
‫فصلهای آينده با جزئيات بيشتر‪ ,‬به طور خاص با ‪ , 8085‬کامپيوتر‪ :‬شريف و ‪ 8051‬آشنا‬
‫ميشويم‪.‬‬

‫فصل دوم‬
‫حافظهها‬

‫در اين بخش به اختصار‪ :,‬تا اندازهای‪ :‬که برای اين درس کافی باشد‪ ,‬به بررسی‪ :‬اجمالی‬
‫حافظهها‪ :‬می پردازيم‪ .‬نيز با چند آیسی پرکاربرد‪ :‬و معروفتر‪ :‬آشنا میشويم‪:.‬‬

‫‪1‬‬
‫‪ROM 2-1‬‬
‫حافظه‌اي است فقط خواندني‪ :‬و مهمترين مشخصه آن غير فرار‪ :‬بودن آن است‪ .‬به اين‬
‫معني كه محتواي‪ :‬آن حتي اگر منبع تغذيه از آن حذف شود پاك نمي‌شود‪ROM :.‬ها اغلب در‬
‫ريزكامپيوترها‪ :‬براي ذخيره برنامه‌ نرم‌افزارهای كنترل‌گرها (مثل اجاق مايكروويو‪ ,‬موتور‬
‫پلهای‪ ,‬نمايشگر ديجيتال و غيره) و برنامه‌هاي كاربردي ديگر بكار مي‌روند‪.‬‬
‫مزيت استفاده از ‪ ROM‬اين است كه هر وقت منبع تغذيه اعمال شود بالفاصله در در‬
‫دسترس است و موجب مي‌شود تا اپراتور پس از روشن كردن سيستم‪ :‬بالفاصله شروع به‬
‫استفاده از برنامه كاربرد مي‌كند‪.‬‬

‫‪Read Only Memory‬‬ ‫‪·1‬‬

‫‪19‬‬
‫عيب ‪ ROM‬اين است كه در فضاي‪ :‬حافظه‌اي كه اشغال مي‌كند نمي‌توان چيزي نوشت‪.‬‬
‫عيب ديگرآن اين است كه ‪ ROM‬به سادگي برنامه‌نويسي نمي‌شود و بايد در كارخانة سازنده‬
‫برنامه‌نويسي‪ :‬بشود‪.‬‬
‫‪1‬‬
‫‪EPROM 2-2‬‬
‫نوع با انعطاف‪ :‬تر ولي گرانتر‪ ROM :‬است و اين وسيله را مي‌توان برنامه‌ريزي كرد‪،‬‬
‫پاك كرد‪ ,‬دوباره برنامه‌ريزي نمود و اين كار بارها و بارها قابل تكرار است‪ .‬پاككردن اين‬
‫حافظه بوسيلة‌ اشعه ماوراء بنفش انجام میشود‪:.‬‬
‫‪2‬‬
‫‪E2PROM 2-3‬‬
‫حسن اين قطعه اين است كه بدون جدا كردن از سوكت مي‌توان برنامه آن را پاك كرد‪.‬‬
‫به عالوه پاك كردن يك بايت و يا همة بايت‌ها امكان پذير است‪.‬‬

‫‪3‬‬
‫‪RAM 2-4‬‬
‫حافظه‌هاي خواندني‪ / :‬نوشتني را عموما ً حافظه با دستيابي‪ :‬تصادفي‪ :‬يا ‪ RAM‬مي‌نامند‪:.‬‬
‫البته ‪‌ROM‬ها نيز قابل دستيابي به دلخواه هستند‪ .‬پس نام مناسبي براي آن انتخاب نشده پس‬
‫بهتر بود به جاي ‪ RAM، RWM‬انتخاب مي‌شد يعني حافظة خواندني و نوشتني ‪ .‬مهمترين‬
‫خصوصيت ‪ RAM‬قابليت انتقال آن است‪ .‬برنامه‌هاي كاربردي به سرعت از ديسك يا نوار به‬
‫‪ RAM‬انتقال يافته و سپس بوسيلة ريزپردازنده اجرا مي‌شود‪:.‬‬
‫تنها محدوديت‪ :‬مهم ‪ RAM‬فرّار بودن آن است‪ .‬با خاموش كردن منبع تغذيه همه‬
‫اطالعات پاك مي‌شوند ‪ .‬به همين دليل لوازم‪ :‬داشتن نوعي حافظه ثانويه در اغلب سيستم‌هاي‬
‫ريز كامپيوتر‪ :‬احساس شده است‪ ,‬حافظههايی‪ :‬که امروزه ‪ Hard‬ناميده میشوند‪.‬‬

‫‪5‬‬
‫‪ RAM 2-5‬هایاستاتيك‪ 4‬و ديناميک‬
‫‪ RAM‬استاتيك نوعي ‪ RAM‬است كه از فليپ فالپ به عنوان عنصر اصلي‬
‫ذخيره‌سازي‪ :‬استفاده مي‌كند‪.‬‬

‫‪Erasable programmable ROM‬‬ ‫‪·1‬‬


‫‪Electrical Erasable PROM · 2‬‬
‫‪Random Access Memory · 3‬‬
‫‪SRAM · 4‬‬
‫‪DRAM · 5‬‬

‫‪20‬‬
‫فصل‬
‫سوم‬
‫کامپيوتر شريف‬

‫در اين فصل در صدد آن هستيم که يک کامپيوتر‪ :‬فرضي‪ :‬به نام کامپيوتر‪ :‬شريف را‬
‫معرفي کرده و اصول کار آن را به عنوان پايهاي براي آشنايي با ميکروپروسسورهاي‪ :‬واقعي‬
‫تشريح نماييم‪.‬‬
‫يادآوري‪ :‬ميشود کامپيوتر شريف‪ :‬بر اساس يک کامپيوتر‪ 8 :‬بيتي طرحريزي شده است‪.‬‬
‫همانطور‪ :‬که قبال گفته شد منظور‪ :‬از کامپيوتر ‪ 8‬بيتي کامپيوتری‪ :‬استکه آکوموالتور وديتا‪ :‬باس‬
‫آن ‪ 8‬بيتي باشد‪.‬‬

‫‪ 3-1‬بلوک دياگرام کامپيوتر شريف‬


‫مدل كلي كامپيوتر‪ :‬شريف در شكل ‪ 1-3‬نشان داده شده است‪ .‬همانطور که مشاهده ميشود‪:‬‬
‫‪ CPU‬از يک طرف با حافظه در ارتباط‪ :‬است و از طرفي با وروديها‪ :‬و خروجيهاي ديگر‪ .‬اين‬
‫ارتباطها و مديريت تبادل داده و اجراي دستورات‪ ,‬توسط‪ CPU :‬از طريق سه باس کنترل‪,‬‬
‫آدرس و داده انجام ميشود‪.‬‬
‫عنصر اصلي ‪ CPU‬است‪ .‬اين واحد اصلي‌ترين قسمت در يك كامپيوتر‪ :‬است و همة‌‬
‫اعمال محاسباتي و منطقي و همة دستورات در اين واحد انجام مي‌شوند‪ :.‬ساختمان داخلي‬
‫‪ CPU‬شريف‪ :‬درشكل‪ 2-3‬نشان داده شده است‪ .‬در اينجا به اختصار‪ :‬به معرفي‪ :‬بخشهاي‬
‫مختلف ‪ CPU‬مي‌پردازيم‪.:‬‬

‫‪21‬‬
‫‪ 3-1-1‬باس داده (‪)DB‬‬

‫‪ Data‬يعني داده و در حقيقت داده‌‌ها اطالعاتي هستند که ورودي‌ها (‪H.D.D، Key‬‬


‫‪ board‬و‪ )...‬به ‪ CPU‬انتقال مي‌دهند و يا ‪ CPU‬به خروجي‌ها‪Printer، Monitor,( :‬‬
‫‪ H.D.D‬و‪ )...‬منتقل مي‌کند ‪ .‬اين باس‪ ,‬داده را از باس خروجي به باس دادة ورودي و بر‬
‫عکس منتقل مي‌كند‪.‬‬

‫شکل ‪ 1-3‬بلوک دياگرام‪ :‬کامپيوتر‪ :‬شريف‬

‫‪ 3-1-2‬واحد محاسبه ومنطق (‪)ALU‬‬

‫همانطور‪ :‬که قبال گفتيم‪ ،‬همة‌ داده‌ها در اين ‪ CPU، 8‬بيتي هستند‪ .‬واحد ‪ ALU‬كه به آن‬
‫واحد محاسبه و منطق مي‌گويند‪ :‬دو ورودي‪ 8 :‬بيتي مي‌گيرد (شكل‪ ) 2-3‬و پس از انجام عمل‬
‫خواسته شده (كه از طريق‪ :‬پايه‌هاي كنترلي‪ :‬به اين واحد دستور‪ :‬داده مي‌شود ) خروجي ‪ 8‬بيتي‬
‫را تحويل مي‌دهد‪ .‬اين واحد هم اعمال محاسباتي و هم اعمال منطقي را انجام مي‌دهد‪.‬‬

‫‪ 3-1-3‬رجيستر وضعيت‬

‫اين قسمت شامل چند بيت است که مقدار اين بيتها متاثر از نتيجه عمل محاسباتي يا‬
‫منطقي انجام شده ميتواند صفر يا يک باشد‪ ,‬از روي مقادير اين بيتها ‪-‬که در ادامه شرح داده‬
‫ميشوند‪ -‬در نوشتن نرمافزار براي پرشهاي شرطي تصميم‪ :‬ميگيريم‪.‬‬

‫‪22‬‬
‫‪ 3-1-4‬آکوموالتور (‪)Acc‬‬

‫‪ Acc‬يك رجيستر ‪ 8‬بيتي است‪ .‬يكي از ورودي‌هاي ‪ ALU‬از طريق‪ :‬اين رجيستر تأمين‬
‫مي‌شود‪ .‬مثالً اگر بخواهيم‪ :‬دو عدد ‪ 11‬و‪ 20‬را جمع كنيم يكي از اين اعداد را در آكوموالتور‪:‬‬
‫( ورودي‪ :‬ديگر ‪ )ALU‬انتقال مي‌يابد‪ .:‬پس از‬ ‫ذخيره ميکنيم وعدد ديگر به رجيستر‪B:‬‬
‫محاسبه در خروجي ‪ ,ALU‬عدد ‪ 31‬قرار مي‌گيرد‪:.‬‬

‫شکل ‪ 2-3‬بلوک دياگرام‪ :‬داخلي ‪ CPU‬درکامپيوتر‪:‬‬


‫شريف‬

‫‪ 3-1-5‬واحد زمانبندی و کنترل‬

‫همانطور‪ :‬که در فصل گذشته گفتيم اين واحد‪ ,‬كنترل سيستم را بر عهده دارد‪ .‬وروديهاي‬
‫اين بخش‪ ,‬پالس ساعت وخروجي ‪ IR‬است‪ .‬بر اساس اينکه چه دستوري بايد انجام شود‬
‫سيگنالهاي مناسبي‪ :‬از قبيل ‪ Memory Read, Memory Write, I/O Read‬وغيره‪ ...‬بايد‬
‫فعال شوند‪ .‬بنابراين خروجي اين واحد‪ ,‬کنترل باس (‪ )CB‬را تشکيل ميدهد‪.‬‬

‫‪23‬‬
‫‪ 3-1-6‬رجيستر دستورالعمل (‪)IR‬‬

‫دستوري‪ :‬كه ‪ CPU‬بايد انجام‌دهد به فرم يک عدد باينري‪ :‬است‪ .‬اين اعداد بايد تحليل‬
‫شوند تا دستور‬
‫متناسب انجام گردد‪ .‬به اين منظور‪ ,‬ابتدا در اين قسمت بايد هر دستور‪ :‬ديکد‌شود و‬
‫سپس به واحد زمانبندی‪ :‬وکنترل فرستاده شود تا پايه‌هاي كنترل واحدها بنا به‬
‫دستوري‪ :‬كه برنامه به ‪ CPU‬ميدهد فعال يا غير فعال شوند‪. :‬‬

‫‪ 3-1-7‬شمارنده برنامه (‪)PC‬‬

‫اين واحد‪ ,‬شمارندة‌آدرس حافظه است‪ .‬وقتي‪ CPU :‬برنامه اي را ازحافظه فراخواني‬
‫ميکند تا برنامه خط به خط اجرا‌شود‪ ,‬اين واحد که اشاره‌گرآدرس‪ :‬حافظه است پس از خواندن‬
‫هر خط از برنامه توسط ‪ ,CPU‬يكي به آن اضافه مي‌شود و به خط بعدي برنامه اشاره مي‌کند‪.‬‬
‫اين رجيستر ‪ 16‬بيتی است ولی دقت کنيم در کامپيوتر شريف‪ :‬فقط ‪ 11‬خط آدرس داريم‪.‬‬

‫‪ 1-8- 3‬باس آدرس (‪)AB‬‬

‫اين باس‪ ،‬باس آدرس است‪ .‬اشاره‌گر ‪ PC‬به هر آدرس كه اشاره كند‪ ،‬آن آدرس روي‪:‬‬
‫باس آدرس قرر داده مي‌شود‪ .:‬اين باس به باس آدرس خروجي وصل ميشود‪( .:‬يادآوری‪11 :‬‬
‫خط آدرس داريم)‬

‫‪ 3-2‬دو عمل اصلی ‪CPU‬‬

‫همان طور که در شکل‪ 3-3‬مشاهده مي شود ‪ CPU‬هميشه در حال انجام يکي از اين دو‬
‫عمل زير است‪:‬‬
‫‪ : Fetch ‬به معني رفتن و آوردن (يا صدا زدن) است‪ .‬مثالً زماني‪ :‬است كه‬
‫‪ CPU‬داده اي را از حافظه مي‌آورد‪ ،‬و يا زماني‪ :‬است كه عملگرها و عملوندها به‬
‫ميشوند عمل ‪ Fetch‬در حال انجام است‪.‬‬
‫‪ CPU‬انتقال داده ‌‬
‫‪ : Execute ‬به معني اجراکردن است‪ ,‬يعني اينكه ‪ CPU‬در حال اجراي‬
‫دستوري‪ :‬است‪.‬‬

‫‪24‬‬
‫در حقيقت ‪ CPU‬هميشه در حال انجام يكي از اين دو كار است‌؛ ‪ Fetch‬زماني‬
‫است كه واحد ‪ IR‬يك دستورالعمل‪ :‬را از حافظه مي‌آورد و واحد كنترل‪ ،‬پايه‌هاي كنترل را‬
‫از طريق‪ :‬باس کنترل به قسمت‌هاي مختلف مي‌فرستد‪ .‬سپس فاز اجرا شروع‪ :‬مي‌شود تا‬
‫اطالعات داخل ‪ IR‬وارد واحد كنترل‪ ACC , ALU ,‬و… شوند‪.‬‬

‫شکل ‪ 3-3‬شمائی از توالی دو عمل اصلي ‪CPU‬‬

‫برای فهم دقيقتر اين دو مرحله‪ ,‬نيازمند دانستن عملکرد صحيح کامپيوتر‪ :‬شريف هستيم‪.‬‬

‫شکل ‪ 4-3‬بلوک دياگرام‪ :‬دو عمل ‪ Fetch‬و ‪Execute‬‬

‫‪25‬‬
‫‪ 3-3‬عملکرد کامپيوتر شريف و قالب بندي دستورالعملها‬
‫در کامپيوتر شريف‪ :‬از نظر تعداد بايت‪ ,‬دو دسته دستورالعمل‪ :‬داريم‪ :‬دستورات‬
‫‪ Memory Reference‬که دو بايتی هستند و دستورات‪ Non-Memory Reference :‬که‬
‫تک بايتی هستند‪ .‬همچنين يک رجيستر ‪ 8‬بيتی عالوه بر آکوموالتور(‪ )A‬به نام ‪ B‬در کامپيوتر‬
‫شريف داريم که هم بعنوان يک رجيستر کمکی در کنار ‪ A‬انجام وظيفه ميکند و هم در کاهش‬
‫دستورات ‪ Memory Reference‬موثر‪ :‬واقع میشود؛ به اين صورت‪ :‬که در اکثر عمليات‬
‫محاسباتی‪ ,‬عملوند دوم در رجيستر ‪ B‬قرار میگيرد‪ :.‬يعنی کافيست مقدار مورد نظر را با‬
‫دستور ‪ LDB‬از حافظه در ‪ B‬قرار دهيم و سپس عمليات مورد‪ :‬نظر را بين ‪ A‬و ‪ B‬انجام‬
‫میدهيم‪ .‬به اين ترتيب از يک دستورالعمل ‪ Non-Memory Reference‬برای قرار‪ :‬دادن‬
‫بايت بعدی در ‪ A‬يا ‪ B‬استفاده میشود‪ .‬مالحظه میشود اگرچه اين دستور‪ ,‬داده را از حافظه کد‬
‫میآورد ولی نياز به داشتن آدرس نيست‪ ,‬زيرا کافی است بايت بعدی را به عنوان داده در نظر‬
‫بگيريم‪ .‬در واقع آدرس بايت بعدی‪ ) )PC+1 ,‬است‪.‬‬
‫به اين ترتيب مطابق‪ :‬شکل‪ 5-3‬سه بيت ‪ op-code‬و دو بيت ‪Address Modifier‬‬
‫‪ A‬است‪ .‬در حقيقت اين ‪8‬‬
‫‪) 01‬‬ ‫داريم و سه بيت باقيمانده هم قسمت باالی آدرس ( ‪A 9 ,A 8‬و‬
‫بيت‪ ,‬رمز شدة يك دستورالعمل است كه در ادامه به تفسير آن خواهيم پرداخت‪ .‬بايت بعدی نيز‬
‫‪ A‬ايفای نقش میکند‪.‬به‬
‫‪) 0 A‬‬
‫(در دستورات‪ )Memory Ref :‬بعنوان قسمت پايين آدرس ( ‪- 7‬‬
‫اين ترتيب می توانيم‪ 2Kbyte :‬حافظه را آدرسدهی‪ :‬کنيم‪.‬‬

‫شکل ‪ 5-3‬قالببندی‪ 16 :‬بيتی دستورالعملها‬

‫بيتهای ‪ 0‬تا ‪ 2‬بايت اول که قسمت باالی آدرس را مشخص میکند يک صفحه از حافظه‬
‫را نشان مي‌دهد‪ .‬بنابراين در کامپيوتر شريف‪ :‬حداکثر به يک حافظه ‪ 8‬صفحه ای ‪ 256‬بايتی‬
‫دسترسی‪ :‬داريم (شکل‪.)6-3‬‬

‫‪26‬‬
‫دو بيت ‪ 3‬و‪ 4‬كه در شكل ‪ 6-3‬با ‪ X‬و ‪ I‬نشان داده شده براي قابليت‌هاي‪ :‬بيشتر استفاده‬
‫از آدرس است و صفر و يك بودن هر بيت مفهوم خاصي را در بر دارد که شرح آنها به قرار‬
‫زير است‪:‬‬
‫‪ : X‬اين بيت اگر صفر باشد به عنوان يک بيت از دستورالعمل‪ :‬تلقي مي شود‪ .‬ولي اگر‬
‫اين بيت ‪ 1‬شود‪ CPU ،‬هشت بيت سمت راست را با ‪( B‬يك رجيستر‪ :‬كمكي مثل ‪ ACC‬است‬
‫كه مي‌توانيم داده را در آن هم بريزيم) جمع ‪........‬‬

‫شکل ‪ 6-3‬نمايش حافظه هشت صفحهای درکامپيوتر‪ :‬شريف‬

‫مي‌كند و عدد بدست آمده را آدرس قرار مي‌دهد و به اين آدرس‌ حافظه مي‌رود و‬
‫محتواي داخلش را در ‪ ACC‬مي‌ريزد‪:.‬‬
‫‪ : I‬براي آدرس دهي غير مستقيم از اين بيت استفاده مي‌شود‪ .‬اگر اين بيت ‪1‬‬
‫باشد‪ 8 ‌،‬بيت قسمت آدرس‪ ،‬به عنوان آدرس روي باس آدرس قرار‪ :‬مي‌گيرد و دو بايت‬
‫دادة موجود در آدرس فوق‪ :‬الذکراز حافظه خوانده مي‌شود‪ ،‬اين اطالعات به عنوان‬
‫آدرس‌ جديد روي‪ :‬باس آدرس قرار مي‌گيرد و داده‌ي موجود در آدرس جديد بر روي‬
‫باس داده قرار‪ :‬مي‌گيرد و بعد عمل خواسته‌شده روي اين داده اعمال مي‌شود‪.‬‬

‫‪ 3-4‬شاخصها‬
‫كامپيوتر‪ :‬شريف داراي ‪ 2‬شاخص(شامل ‪ 2‬فليپ فالپ) است كه نتايج جانبي عمليات‬
‫‪ ALU‬در آنها ذخيره مي‌شوند‪ :.‬اين شاخص‌ها شامل موارد‪ :‬زيراند ‪:‬‬
‫يک بيت دو بر يک(‪ ، )Carry‬بيت صفر((‪ Zero‬و بيت عالمت منفي ((‪. Negative‬‬

‫‪27‬‬
‫‪ : Carry ‬وقتي كه عملي بر روي‪ :‬دو عملوند اجرا شود اگر دو بر يک داشته‬
‫باشد بيت ‪ Carry‬برابر ‪ 1‬مي‌شود و در غير اين صورت‪ :‬صفر مي‌ماند‪ :.‬مثالً اگر‬
‫آکوموالتور محتوی‪ FFH :‬باشد آن را با ‪ 01H‬جمع كنيم ‪100H‬حاصل مي‌شود‪ .‬در‬
‫اين حالت بيت ‪ Carry‬يك مي‌شود‪:.‬‬
‫‪ : Zero ‬اگر نتيجة عملي كه در ‪ ALU‬انجام گرفته برابر صفر شود‪ ،‬اين بيت‬
‫يك و در غير اين صورت‪ ،‬مقدارش صفر مي‌شود‪:.‬‬
‫‪ : Negative ‬اگر حاصل عملي بر روي دو عملوند منفي شود اين بيت‪1 ،‬‬
‫مي‌شود واگر مثبت بشود صفر مي‌شود‪ .‬به عبارت ديگر اگر حاصل عملياتي در‬
‫‪ ALU‬منفي شود‪ ،‬اين نشانه يك و در غير اين صورت مقدارش صفر مي‌شود‪:.‬‬

‫فصل چهارم‬
‫ميکرو پروسسور ‪8085‬‬

‫‪28‬‬
‫در اين فصل ميکرو‪ :‬پروسسور ‪ 8085‬را به طور‪ :‬کامل خواهيم شناخت‪ .‬روال کار به‬
‫اين صورت است که ابتدا پايههای‪ 8085 :‬همچنين شاخصها‪ :‬را بررسی‪ :‬میکنيم‪ ,‬سپس انواع‬
‫آدرسدهیها‪ :‬را معرفی‪ :‬مینماييم و بعد از آن برنامهنويسی ‪ 8085‬را به زبان اسمبلیخواهيم‪:‬‬
‫آموخت و در انتها چندين مثال کاربردی‪ :‬را‪ ,‬از قبيل برنامه کنترل موتور پلهای‪ ,‬برنامه اسکن‬
‫کیبرد‪ ,‬برنامه ارسال ديتا به چاپگروغيره را میبينيم‪ .‬پرواضح است که قبل پرداختن به مثال‬
‫های متعدد بايد ‪ IC‬های پشتيبانی را بشناسيم‪.‬‬

‫‪ 4-1‬پايههای ‪8085‬‬
‫‪ 8085‬از ‪ 40‬پايه تشكيل شده است كه هر يك را در زير به اختصارشرح مي‌دهيم‪.‬‬

‫‪0AD-7AD 4-1-1‬‬

‫اين ‪ 8‬پايه دو استفاده دارند‪ ،‬هم ‪ 8‬بيت كم ارزش باس آدرس هستند و هم ‪ 8‬بيت‌ داده‬
‫مي‌باشند كه بوسيلة يك '‪ 138‬مالتي پلكس مي‌شوند‪ ALE .:‬كه شرح آن ذكر خواهد شد به پايه‌‬
‫فعالکننده '‪ 138‬وصل میشود‪ .:‬اگر ‪ ALE‬صفر باشد‪ ،‬اين ‪ 8‬بيت ديتا هستند در غير اين‬
‫صورت ‪ 8‬بيت پايين آدرس است‪.‬‬

‫‪15A-8A 4-1-2‬‬

‫اين پايه‌ها خروجي مي‌ باشند و ‪ 8‬بيت با ارزش آدرس باس را تشكيل مي‌دهند‪.‬‬

‫‪RW1‬‬ ‫‪4-1-3‬‬
‫يك پاية خروجي‪ :‬است و سيگنال ‪ Low‬روي اين خط باعث مي‌شود كه اطالعات روي‬
‫باس داده در حافظه يا ‪ I/O‬نوشته شود‪.‬‬

‫‪Write‬‬ ‫‪·1‬‬

‫‪29‬‬
‫‪READY 4-1-4‬‬

‫يك پاية ورودي است و در خالل سيكل خواندن يا نوشتن اگر ‪ High‬باشد يعني اينكه‬
‫حافظه يا مدار جانبي آمادة انتقال داده است اگر ‪ Low‬باشد‪ CPU ،‬صبر ميكند تا دوباره‬
‫‪ High‬شود قبل از آنكه خواندن يا نوشتنكامل شود‪.‬‬

‫‪HOLD 4-1-5‬‬

‫يك پاية ورودي است و اگر فعال باشد باعث مي‌شود‪ :‬كه خطوط‪ :‬آدرس و داده در‬
‫اختيار يك مدار جانبي قرار‪ :‬گيرد‪ .‬پس ‪ CPU‬باس را رها خواهد كرد و پس از خارج شدن از‬
‫حالت ‪ HOLD‬دوباره باس را در اختيار خواهد گرفت‪.‬‬

‫‪1‬‬
‫‪HLDA 4-1-6‬‬

‫يك پاية ورودي است و پس از ورود‪ :‬به حالت ‪ Hold‬فعال خواهد شد و به معناي تأييد‬
‫سيگنال ‪ HOLD‬مي‌باشد‪.‬‬

‫‪2‬‬
‫‪INTR 4-1-7‬‬

‫پاية‌ ورودي‪ :‬وقفه محسوب مي‌شود‪ :‬و اگر فعال شود اجراي برنامة‌ در دست اجرا‬
‫متوقف‪ :‬شده و برنامة مربوط به وقفه اجرا مي‌ شود‪ .‬بحث وقفه بعداً بيان خواهد شد‪.‬‬

‫‪3‬‬
‫‪INTA 4-1-8‬‬

‫پاية‌خروجي است و تأييد وقفه مي‌‌باشد‪.:‬‬

‫‪RST5.5 )6.5 ,7.5( 4-1-9‬‬

‫اين پايه‌ها ورودي‪ :‬هستند و مثل ‪ INTR‬ورودي وقفة مي‌باشند و اولويت از ‪ 5.5‬به‬
‫‪ 7.5‬افزايش مي‌يابد‪.‬‬

‫‪HOLD Acknowledge‬‬ ‫‪·1‬‬


‫‪Interrupt · 2‬‬
‫‪Interrupt Acknowledge · 3‬‬

‫‪30‬‬
‫‪TRAP 4-1-10‬‬

‫يک وقفه ورودي است که نمیتوان آن را غير فعال است‪ ,‬به عبارت ديگر "غير فعال‬
‫نشدنی"‪ 1‬است‪ .‬اين ورودي‪ :‬وقفه‪ ,‬باالترين اولويت را دارد‪.‬‬

‫‪RESET IN 4-1-11‬‬

‫ورودي‪ :‬مي‌باشد و سيگنال ‪ Low‬روي‪ :‬اين آدرس باعث ‪ reset‬شدن سيستم مي‌گردد‪:.‬‬

‫‪RESET OUT 4-1-12‬‬

‫خروجي است و نشان‌دهندة آن است كه ‪ CPU‬در حال ‪ reset‬شدن است‪.‬‬

‫‪X1,X2 4-1-13‬‬

‫ورودي‪:‬اند و به يك كريستال ‪ 4MHZ‬وصل هستند كه کالک سيستم را بوجود مي‌آورند‪.‬‬

‫‪CLK OUT 4-1-14‬‬

‫خروجي است‪ .‬اين خروجي‪ :‬کالک ميكروپروسسور‪ ,:‬با فركانس‪ :‬نصف فركانس‬
‫كريستال براي استفاده ديگر اجزاء سيستم ميكرو‪ :‬فراهم شده است‪.‬‬

‫‪2‬‬
‫‪SID 4-1-15‬‬

‫ورودي‪ :‬داده سريال (تك‌بيتي) توسط‪ :‬دستور ‪ 3RIM‬روي‪ :‬پين ‪ SID‬در داخل بيت هفتم‬
‫(‪ )MSB‬آكوموالتور قرار‪ :‬مي‌گيرد‪.‬‬

‫‪Nonmaskable Interrupt‬‬ ‫‪·1‬‬


‫‪Serial Input Data Line · 2‬‬
‫‪Read Interrupt Mask · 3‬‬

‫‪31‬‬
‫‪SOD 4-1-16‬‬
‫‪1‬‬

‫خروجي دادة‌ سريال (تك‌بيتي) توسط دستور‪ ،2SIM :‬بيت هفتم آكوموالتور‪ :‬روي اين‬
‫پين قرار مي‌گيرد‪:.‬‬

‫‪3‬‬
‫‪DR‬‬ ‫‪4-1-17‬‬
‫يك پاية خروجي‪ :‬است و سيگنال ‪ Low‬روي اين خط باعث مي‌شود كه محتوي حافظه‬
‫يا ‪ I/O‬روي باس داده قرار گيرد‪.‬‬

‫‪ 4-2‬شاخصها‬
‫همان طور كه در شكل (‪)1-4‬مشاهده مي‌كنيم ‪ 8‬بيت به عنوان بيت‌هاي شاخص وجود‬
‫دارند كه ‪ 5‬بيت آن تعريف شده و ‪ 3‬بيت آن تعريف‪ :‬نشده است (‪.)X‬‬

‫شکل ‪ 1-4‬شاخصها در ‪8085‬‬


‫‪ :CY‬اگر نتيجه حاصل از دستورالعملي‪ ،‬رقم نقلي داشته باشد (از جمع) يا قرضي‪ :‬از‬
‫باالترين بيت بوقوع‪ :‬بپيوندد (در تفريق يا مقايسه)‪ ،‬اين پرچم ‪ 1‬مي‌شود و در غير اين صورت‪:‬‬
‫صفر خواهد شد‪.‬‬
‫‪ :P‬بيت توازن نام دارد و اگر باقيمانده تقسيم جمع بيت‌هاي نتيجه عملي بر ‪ 2‬صفر‬
‫باشد اين پرچم ‪ 1‬مي‌شود و در غير اين صورت‪ :‬صفر خواهد شد‪.‬‬
‫‪ :AC‬بيت نقلي كمكي نام دارد و اگر دستورالعملي موجب توليد رقم نقلي از بيت ‪ 3‬به‬
‫بيت ‪ 4‬در مقدار نتيجه گردد‪ ،‬اين بيت يك خواهد شد و در غيراين صورت صفر خواهد شد‪،‬‬
‫اصوالً اين بيت براي جمع و تفريق‌هاي اعداد ‪ BCD‬قبل از دستور‪ DAA :‬به كار مي‌رود‪.‬‬
‫‪ :Z‬شاخص صفر است و اگر نتيجة عمل يك دستورالعمل مقدار صفر باشد اين‬
‫شاخص يك مي‌شود و گر نه صفر باقي مي‌ماند‪:.‬‬
‫‪ :S‬شاخص عالمت است و اگر با ارزشترين بيت نتيجه عملي‪ ،‬مقدار يك باشد اين‬
‫بيت ‪ 1‬خواهد شد و اگر صفر باشد‪ ‌،‬صفر خواهد شد‪.‬‬
‫‪Serial Output Data Line‬‬‫‪·1‬‬
‫‪Set Interrupt Mask · 2‬‬
‫‪Read · 3‬‬

‫‪32‬‬
‫يادآوری‪ :‬میشود به مجموع ‪ 16‬بيت آکوموالتور و شاخصها‪ PSW ,‬گفته میشود‪.‬‬

‫‪ 4-3‬انواع آدرسدهی در ‪8085‬‬


‫مجموعه دستورات يك ريزپردازنده انواع دستورات موجود‪ :‬را براي كار‬
‫ريزپردازنده روي داده ارائه مي‌دهد‪ .‬پنج روش آدرس دهي در ‪ 8085‬وجود دارد كه در زير‬
‫شرح داده خواهند شد‪.‬‬

‫‪ 4-3-1‬روش آدرس‌دهي مستقيم‬


‫در اين روش همة‌ ‪ 16‬بيت آدرس به عنوان بخشي از دستور‪ :‬تعريف مي‌گردد‪ :‬مثل ‪:‬‬
‫‪LDA 1000H‬‬
‫و اين دستور‪ :‬به آدرس ‪ H 1000‬رفته و داده‌ اين آدرس از حافظه را در آکوموالتور مي‌ريزد‪.‬‬

‫‪ 4-3-2‬روش آدرس‌دهي ّثباتي‬


‫گفتيم كه ‪ 6‬ثبات عالوه بر آكوموالتور‪ :‬در ‪ 8085‬وجود‪ :‬دارند‪ .‬روش آدرس‌دهي‬
‫مستقيم‪ ،‬روش سرراستي است براي دستيابي‪ :‬به حافظه ولي عيب آن نياز به سه برداشت از‬
‫حافظه در ازاء هر دستورالعمل‪ :‬مي‌باشد‪ .‬براي حل اين مشكل‪ ،‬طراحان ريزپردازنده‌ها معموالً‬
‫تعدادي ثبات همه منظوره كه با يك بايت آدرس دهي مي‌شوند‪ :‬را در پردازنده لحاظ كرده‌اند‪.‬‬
‫مثالً دستورالعمل‪ B :‬و ‪ A MOV‬دادة ذخيره شده در ‪ B‬را در ‪ A‬كپي مي‌‌كند‪.‬‬

‫س‌دهي فوري‬
‫‪ 4-3-3‬روش آدر ‌‬
‫مسلمآ ً بايد زمينه‌هاي باركردن ثبات‌هاي همه منظوره فراهم‪ :‬گردد‪ .‬روش آدرس‌دهي‬
‫فوري‪ :‬براي نوشتن يك بايت در يكي از ثبات‌ها به كار مي‌رود‪ :.‬مثالً ‪ A,00H MVI‬عدد‬
‫‪ 00H‬را در آكوموالتور ذخيره مي‌كند‪.‬‬

‫‪33‬‬
‫‪ 4-3-4‬روش آدرس‌دهي غير مستقيم‬

‫در اين روش جفت ثبات ‪ HL‬قبالً با آدرس‌ يك خانة‌حافظه بار مي‌شود‪ :‬و سپس هر يك‬
‫از دستورات‪ :‬غير مستقيم ثباتي قابل استفاده است‪ .‬مثالً اگر ‪ HL‬با عدد ‪ 1000H‬بار شده باشد‬
‫پس از اجراي دستور‪ MOV A , M :‬دادة‌ موجود‪ :‬در آدرس ‪ 1000H‬در داخل ‪ ACC‬ذخيره‬
‫مي‌شود‪.‬‬

‫‪ 4-3-5‬روش آدرس‌دهي مستتر‬


‫بعضي از دستورات‪ 8085 :‬احتياجي به آدرس‌دهي‪ :‬ندارند و لذا هيچ بيتي به آدرس‬
‫اختصاص داده نشده و به اينها آدرس‌دهي مستتر مي‌گويند‪.‬در کد اين دستورات‪ :‬آدرس وجود‪:‬‬
‫ندارد‪ ,‬مثال ‪. ... HLT, POP, PUSH, CMA‬‬

‫‪ 4-4‬برنامهنويسی در ‪8085‬‬
‫متن برنامه و دستورالعملهاي ‪ 8085‬به زبان اسمبلي انجام مي شود كه زبان‬
‫قراردادي‪ :‬سازندگان قطعه است‪ .‬پس از اينكه ما برنامه مورد نظر ما ن را به زبان اسمبلي‬
‫نوشتيم‪ ،‬اسمبلر(مترجم) برنامة اسمبلي را به ‪ 0‬و‪ 1‬يعني زبان ماشين ترجمه مي‌كند‪ ,‬زيرا برای‬
‫ماشين فقط ‪ 0‬و‪ 1‬مفهوم دارد‪ .‬نكتة مهمی که در برنامه‌نويسي توصيه میشود‪:‬رسم فلوچارت‬
‫است چرا که بوسيلة رسم فلوچارت‪ ,‬برنامه‌نويسي‪ :‬نظم گرفته و ساده مي‌شود‪.‬‬
‫اصوال‘ از نظر ‪ ....‬مجموعة‌ دستورالعمل‌هاي‪ 8085 :‬به ‪ 5‬گروه زير تقسيم مي‌شوند‪:‬‬
‫‪:‬‬
‫‪ ‬انتقال داده ‪.‬‬
‫‪ ‬گروه محاسباتي‪. :‬‬
‫‪ ‬گروه منطقي ‪.‬‬
‫‪ ‬گروه پرش‪.‬‬
‫‪ ‬گروه عمليات روي‪ Stack :‬و ‪ I/O‬و كنترل ماشين‪.‬‬
‫در ادامه به شرح و آوردن چندين مثال از هر مجموعه مي پردازيم‪.‬‬

‫‪34‬‬
‫‪ 4-4-1‬انتقال داده‬
‫اين دستورات انتقال داده بين ثبات‌ها و حافظه را انجام مي‌دهند‬
‫‪MVI :‬‬ ‫‪MVI‬‬
‫‪r,data‬‬
‫اين دستور مستقيما ً ‪ data‬كه شامل يك بايت در حافظه هست را در ثبات ذخيره‬
‫مي‌كند‪.‬منظور از ‪ r‬هر يک از رجيسترهاي‪ A, B, C, D, E, H‬و ‪ L‬مي‌باشند‪ .‬نيز اين دستور‪:‬‬
‫به صورت‪: :‬‬
‫‪MVI‬‬
‫‪M,data‬‬
‫بکار می رود و به مفهوم اين است که دادة مورد نظر‪ ,‬در آدرسی که در ‪ HL‬قرار‬
‫دارد ذخيره شود‪.‬‬
‫‪MOV:‬‬ ‫‪MOV‬‬
‫‪r1, r2‬‬
‫اين دستور محتواي‪ r2 :‬را در ‪ r1‬كپي مي‌كند‪ .‬نيز دستور‪:‬‬
‫‪LXI rp,data‬‬
‫داده ‪ 16‬بيتي را در جفت رجيستر (‪ )rp‬ذخيره مي‌كند‪ .‬منظور‪ :‬از ‪ rp‬هر يک ازجفت‬
‫ثباتهاي‪ BC, DE‬و ‪ HL‬مي‌باشند‪.‬‬
‫‪STA :‬‬ ‫‪STA address‬‬
‫اين دستور محتواي‪ ACC :‬را در خانه‌اي از حافظه كه آدرسش در دستورالمعل‪ :‬آمده‬
‫است قرار مي‌دهد‪.‬‬
‫مثال ‪ : 1-4‬مي‌خواهيم‪ :‬در مكان ‪ 20A0H‬حافظه مقدار ‪ F8H‬را بنويسيم‪.‬‬
‫‪ :‬حل‪LXI H,20A0H‬‬
‫‪MVI M,F8 H‬‬

‫مثال ‪ : 2-4‬مي‌خواهيم محتواي‪ :‬حافظه در مكان ‪ 20B0H‬را به مكان ‪ 20C0H‬كپي‬


‫كنيم ‪:‬‬
‫‪LDA‬‬ ‫حل ‪ :‬راه اول ‪:‬‬
‫‪20B0H‬‬
‫‪STA 20C0H‬‬

‫‪35‬‬
‫راه دوم ‌‪:‬‬
‫‪LXI H,20B0H‬‬
‫‪MOV B, M‬‬
‫‪MOV M, B‬‬

‫مثال‪ : 3-4‬مي‌خواهيم برنامه‌اي بنويسيم كه محتواي مكانهاي‪ :‬حافظه از مكان ‪20C0H‬‬


‫تا ‪ 20CF‬را با اعداد زوج از صفر به باال پركند‪.‬‬
‫حل‪ :‬برنامه را مطابق جدول زير مینويسيم ‪:‬‬

‫‪START‬‬ ‫‪MVI‬‬ ‫‪B,02H‬‬ ‫‪; even Counter‬‬


‫‪:‬‬

‫‪LXI‬‬ ‫‪H,‬‬ ‫‪; Begin of memory‬‬


‫‪20C0H‬‬

‫‪LOOp1:‬‬ ‫‪MOV‬‬ ‫‪M,B‬‬ ‫‪; Copy B to memory‬‬

‫‪INR‬‬ ‫‪B‬‬ ‫‪; increase B‬‬

‫‪INR‬‬ ‫‪B‬‬ ‫‪; increase B‬‬

‫‪INX‬‬ ‫‪H ; increase Address of memory‬‬

‫‪MVI‬‬ ‫‪A, D0H‬‬ ‫‪; Copy D0 to ACC‬‬

‫‪CMP‬‬ ‫‪L‬‬ ‫‪; Subtract L from ACC‬‬

‫‪JNZ‬‬ ‫‪L00P1‬‬ ‫‪; If Z =0 Jump to Loop‬‬

‫‪HLT‬‬

‫شکل ‪ 1-4‬برنامه مربوط‪ :‬به مثال ‪3-4‬‬


‫‪LDAX B‬‬ ‫ادامة‌دستورات انتقال داده ‪:‬‬
‫اين دستور محتواي‪ :‬خانه‌اي از حافظه كه آدرسش در ‪ BC‬قرار دارد را در ‪ACC‬‬
‫مي‌ريزد‪.:‬‬
‫نيز دستور ‪:‬‬
‫‪LDAX D‬‬

‫‪36‬‬
‫اين دستور نيز طرز‪ :‬كاري مثل قبلي بر روی ‪ DE‬انجام میدهد‪.‬‬
‫‪ STAX D‬و‬ ‫همچنين دستورهای ‪:‬‬
‫‪STAX B‬‬
‫محتواي ‪ ACC‬را در خانه‌اي از حافظه كه آدرسش در ‪ BC‬يا ‪ DE‬قرار‪ :‬دارد ذخيره‬
‫مي‌كند‪.‬‬

‫مثال ‪ : 4-4‬برنامة مثال (‪ )2‬را بازنويسي مي‌كنيم‪.:‬س‬


‫‪ :‬حل‪LXI B,20B0H‬‬
‫‪LXI D,20C0H‬‬
‫‪LDAX B‬‬
‫‪STAX D‬‬
‫‪ 4-4-2‬گروه دستورهاي محاسباتي‬
‫اين گروه از دستورات‪ ،‬اعمال محاسباتي مثل جمع‪ ،‬تفريق‪ ،‬كاهش و افزايش و غيره‬
‫را شامل مي شود‪ .‬اين دستورات‪ :‬بر روي‪ :‬شاخص‌ها تأثير مي‌گذارند و مي‌توانيم‪ :‬از اين‬
‫خاصيت در پرش‌هاي شرطي‪ :‬استفاده كنيم‪.‬‬
‫‪ADI :‬‬ ‫‪ADI‬‬
‫‪data‬‬
‫اين دستور دادة ‪ 8‬بيتي را با محتواي‪ ACC :‬جمع مي‌‌كند و پاسخ را در ‪ACC‬‬
‫مي‌ريزد‪:.‬‬
‫‪ADD :‬‬ ‫‪ADD r‬‬
‫اين دستور محتوای‪ :‬رجيستر ‪ r‬را با آکوموالتور جمع کرده و حاصل را در آکوموالتور‬
‫قرار میدهد‪.‬‬
‫‪ADD ------ :‬‬ ‫‪ADD M‬‬
‫اين دستور محتواي‪ :‬مكاني از حافظه را كه آدرسش در ‪ HL‬قرار‪ :‬دارد را با محتواي‬
‫‪ ACC‬جمع مي‌كند و پاسخ را در ‪ ACC‬مي‌ريزد‪.‬‬
‫‪SUB :‬‬ ‫‪SUB r‬‬
‫‪SUI data‬‬
‫‪SUB M‬‬

‫‪37‬‬
‫اين سه دستور نيز شبيه دستوارت‪ ADD :‬است ولي به جاي عمل جمع‪ ،‬عمل تفريق‬
‫انجام مي‌شود‪.‬‬
‫‪Carry :‬‬ ‫‪ -----‬جمع با ‪ADC r‬‬
‫‪ACI data‬‬
‫‪ADC M‬‬
‫اين سه دستور نيز عمل جمع را انجام مي‌‌دهد با اين تفاوت که بيت ‪ Carry‬را نيز با‬
‫داده جمع مي‌كند‪.‬‬
‫عمل تفريق نيز شبيه عمل جمع انجام مي‌شود و بيت قرض‪ 1‬را نيز اثر مي‌دهد‪.‬‬
‫‪INR r‬‬ ‫دستورات کاهشی و افزايشی‪: :‬‬
‫اين دستور محتواي‪ :‬ثبات ‪ r‬را يكي زياد مي‌كند‪ .‬و معادل کاهشدهنده اين دستور‬
‫‪ DCR r‬مي‌باشد‪.:‬‬
‫‪INR M‬‬
‫اين دستور محتواي‪ :‬مكاني از حافظه كه آدرسش در ‪ HL‬قرار دارد را يكي افزايش‬
‫مي‌دهد و معادل كاهش‌دهندة اين دستور‪ M DCR :‬مي‌باشد‪.:‬‬
‫‪INX rp‬‬
‫اين دستور محتواي‪ :‬جفت ثبات ‪ rp‬را يكي زياد مي‌كند‪ .‬معادل کاهش‌كنندة اين دستور‪:‬‬
‫‪ rp DCR‬مي‌باشد‪:.‬‬
‫نكتة مهم اينكه دو دستور‪ :‬اخير هيچ پرچمي را متأثر نمي‌كنند‪.‬‬

‫مثال ‪ : 4-4‬برنامه‌اي بنويسيد كه ‪ 10‬عدد را در ‪ RAM‬از آدرس ‪ 20B0H‬ذخيره كند به‬


‫طوريكه هر عدد نسبت به عدد قبلي به اندازة ‪ 5‬واحد بزرگتر باشد‪( .‬عدد اول ‪ 00H‬است)‬
‫‪LXI‬‬ ‫‪H, 20B0H‬‬ ‫‪ :‬حل‪; began of memory‬‬
‫‪MVI‬‬ ‫‪B, 0AH‬‬ ‫‪; Loop counter‬‬
‫‪Loop: MOV M, A‬‬
‫‪ADI 05H‬‬ ‫‪; increase 5‬‬
‫‪INX H‬‬ ‫‪; increase address of memory‬‬
‫‪DCRB‬‬
‫‪JNZ‬‬ ‫‪Loop‬‬
‫‪HLT‬‬

‫‪Barrow‬‬ ‫‪·1‬‬

‫‪38‬‬
‫دستور ‪:2 DAA‬‬
‫در جمع و يا تفريق اعداد ‪ BCD‬نياز به دستور‪ DAA :‬خواهد‪ .‬اعداد ‪ BCD‬در واقع‪،‬‬
‫اعداد مبناي ‪ 10‬هستند كه هر رقم‪ ،‬بصورت‌باينري‪ :‬كد شده است‪ .‬ميكروپروسسور‪ :‬در جمع دو‬
‫عدد‪ ،‬آنها را باينري در نظر مي‌گيرد‪ .‬لذا براي آنكه نتيجه درست داشته باشيم بايد تصحيح‬
‫گردد‪ .‬مثالً در جمع دو عدد در مبناي ‪ BCD‬مثل ‪ 58‬و ‪ 29‬جواب صحيح ‪ BCD, 87‬است‬
‫ولي در ميكرو‪ :‬جواب را به صورت‪ 81H :‬خواهيم داشت و بايد ‪ 06H‬با آن جمع شود تا جواب‬
‫‪ DAA‬دستورالعملي‪ :‬است كه به منظو ر انجام اين كار اضافه‬ ‫درست به دست آيد‪ .‬دستور‪:‬‬
‫شده است اين كار را انجام مي‌‌دهد و جواب صحيح ‪ BCD‬را مي‌دهد‪ .‬پس هر وقت اعداد‬
‫‪ BCD‬را جمع كرديم پس از جمع از دستور ‪ DAA‬استفاده مي‌‌كنيم تا جواب صحيح بدست آيد‪.‬‬

‫مثال ‪ : 5-4‬پنج عدد سيمال را در حافظه ذخيره كنيد و مجموع آنها را بصورت‬
‫دسيمال در جفت ثبات ‪ BC‬ذخيره كنيد‪ 51 ,77 ,32 ,63(.‬و ‪)42‬‬

‫‪MAIN:‬‬ ‫‪CALL‬‬ ‫‪ :‬حل‪STORE‬‬


‫‪CALL‬‬ ‫‪ADD‬‬
‫‪MOV‬‬ ‫‪C,A‬‬
‫‪HLT‬‬
‫‪STORE:‬‬ ‫‪MVI‬‬ ‫‪A,42H‬‬
‫‪STA‬‬ ‫‪20B0H‬‬
‫‪MVI A,51H‬‬
‫‪STA‬‬ ‫‪20B2H‬‬
‫‪MVI‬‬ ‫‪A,32H‬‬
‫‪STA‬‬ ‫‪20B3H‬‬
‫‪MVI‬‬ ‫‪A,63H‬‬
‫‪STA‬‬ ‫‪20B4H‬‬
‫‪RET‬‬
‫‪ADD:‬‬ ‫‪LXI‬‬ ‫‪H,20B0H‬‬
‫‪MVI‬‬ ‫‪B,00H‬‬
‫‪MVI‬‬ ‫‪D,05H‬‬
‫‪MVI A,00H‬‬
‫‪Loop:‬‬ ‫‪ADD‬‬ ‫‪M‬‬
‫‪DAA‬‬
‫‪CC HNDR‬‬ ‫‪;Call if carry set‬‬
‫‪DCR D‬‬
‫‪RZ‬‬ ‫‪; Return if Z=1‬‬

‫‪Decimal Adjust Accumulator‬‬ ‫‪·2‬‬

‫‪39‬‬
‫‪INX H‬‬
‫‪JMP Loop‬‬
‫‪HNDR:‬‬ ‫‪INR B‬‬
‫‪RET‬‬

‫‪ 4-4-3‬گروه شامل دستورات منطقي‬


‫اين گ‪:::‬روه ش‪:::‬امل دس‪:::‬توراتی‪ :‬از قبيل ‪ AND‬و ‪ OR‬و ‪ XOR‬و ‪ NOT‬و ‪ 1CMP‬و‬
‫‪ Rotate‬مي شود كه بين رجيستر‪ :‬و حافظه انجام مي‌شوند و روي شاخص‌ها تأُثير مي‌گذارند‪:.‬‬
‫‪ANA r‬‬
‫محتواي رجيستر‪ r :‬را با محتواي‪ ACC :‬به صورت‪ :‬بيت به بيت‪ AND ،‬مي‌كند‪.‬‬
‫‪ANA M‬‬
‫محتواي مكان حافظة به آدرس ‪ HL‬را به صورت بيت به بيت با آکوموالتور‪AND :‬‬
‫مي‌كند‪.‬‬
‫‪ANI data‬‬
‫دادة‌ ‪ 8‬بيتي را بيت به بيت با آكوموالتور‪ AND :‬مي‌كند‪.‬‬
‫‪ORA r‬‬
‫‪ORA M‬‬
‫‪ORI data‬‬
‫‪XRA r‬‬
‫‪XRA M‬‬
‫‪XRI data‬‬
‫اين دستورات نيز مثل سه دستور قبل عمل مي‌كند ولي به جاي عمل‪ ،AND‬عمل ‪OR‬‬
‫يا ‪ XOR‬انجام مي‌شود‪.‬‬
‫‪RLC‬‬ ‫دستورات چرخشی‪: :‬‬
‫با اجراي اين دستور‪ :‬باارزشترين بيت آکوموالتور‪ ,‬هم در ‪ Carry‬و هم در‪ LSB‬کپی‬
‫میشود‪ .‬و يك شيفت به چپ در بقيه بيتها داريم‪ RRC .‬مثل ‪ RLC‬است ولي جهتش به سمت‬
‫راست مي‌باشد‪ :‬و ‪ LSB‬را به ‪ C‬و ‪ MSB‬مي‌برد‪ :‬و بقيه بيتها را به راست شيفت مي‌دهد‪.‬‬
‫دومين دستور ‪:‬‬
‫‪RAL‬‬
‫‪2‬‬
‫بيت ‪ C‬به ‪ LSB‬منتقل میشود‪ :‬و همة بيتها يك واحد شيفت به چپ پيدا مي‌كنند‪MSB .:‬‬
‫نيز در‪ C‬کپیمیشود‪.‬‬

‫‪RAR‬‬
‫شبيه ‪ RAL‬عمل مي‌كند و لي به سمت راست‪.‬‬

‫‪Compare‬‬ ‫‪·1‬‬
‫‪Carry · 2‬‬

‫‪40‬‬
‫‪ 4-4-4‬گروه دستورات پرش‬
‫اين گروه دستورات‪ :‬موجب انتقال كنترل برنامه به آدرس جديد مي‌شوند‪ .:‬در اين گروه‬
‫دو نوع دستور وجود‪ :‬دارد‪ .‬عدهای دستور‪ :‬فراخواني‪ :‬زير روال و عدهای ديگر دستور پرش و‬
‫تفاوت اين دو در اين است كه در زير روال که توسط‪ :‬دستور فراخواني زير روال يعنی‬
‫‪ CALL‬فرا خوانده میشود دستور‪ RET :‬قرار‪ :‬میگيرد تا كنترل برنامه به دستور بعد از‬
‫‪ CALL‬در برنامه اصلي برگردد‪ :.‬اين تكنيك اجازه مي‌دهد تا يك زيرروال چندين بار از‬
‫محل‌هاي مختلفي در برنامه مورد‪ :‬استفاده قرار گيرد‪ .‬جزئيات بيشتر‪ :‬در ادامه خواهد آمد‪.‬‬
‫چندين دستورالعمل پرش را در اينجا عنوان مي‌كنيم‪.:‬‬
‫‪JMP address‬‬
‫اين دستور سه بايتي است و به آدرس ‪ 16‬بيتي که نام آن جلوي ‪ JMP‬آمده است‪ ,‬پرش‬
‫مي‌كند‪.‬‬
‫و نيز ‪JMP‬هاي شرطي وجود‪ :‬دارند كه هر كدام با چککردن يك شاخص پرش‬
‫مي‌كنند مانند ‪:‬‬
‫‪JNZ address‬‬
‫اگر شاخص ‪ ،Zero‬صفر باشد به آدرس پرش مي‌كند و اگر شاخص ‪ ،Zero‬يك باشد‬
‫به خط بعد از ‪ JNZ‬مي‌رود و ‪ JMP‬اجرا نمیشود‪ .:‬موارد ديگر عبارتند از‪:‬‬
‫‪JZ‬‬
‫‪JNC‬‬
‫‪JC‬‬
‫‪JPO‬‬
‫‪JPE‬‬
‫‪JP‬‬
‫‪JM‬‬
‫اين دستورات نيز مانند دستور‪ , JNZ :‬با چککردن صفر يا يك بودن شاخص‌ها پ‪::‬رش‬
‫مي‌‌كنند‪.‬‬

‫‪ 4-4-5‬گروه دستورات ‪ O/I‬و كنترل ماشين و ‪Stack‬‬

‫‪ Stack‬فضاي حافظه در انتهاي ‪ RAM‬است‪ .‬از دستورات‪ PUSH :‬و ‪ POP‬براي‬


‫ذخيرة موقت و بازيابی محتوی‪ :‬رجيسترها‪ :‬در اين فضا استفاده مي‌شود‪ .:‬در شروع‪ :‬برنامه‬
‫اصلي ‪ SP‬كه نشانگر به ‪ Stack‬است مقداردهي مي‌شود و معموالً به آخرين آدرس باالي‬
‫‪ RAM‬بعالوه يك‪ ,‬مقداردهي مي‌شود‪ .‬توسط‪ :‬اين دستورات محتوي‪ :‬جفت رجيسترهای‪ BC:‬و‬
‫‪ DE‬و ‪ HL‬را مي‌توان در ‪ Stack‬ذخيره كرد و سپس بازيابي نمود‪.‬عالوه بر اين ثباتها‪،‬‬

‫‪41‬‬
‫‪ PSW‬را نيز مي‌توان ذخيره و بازيابي‪ :‬نمود‪ .‬شکل نمادين زير نشان میدهد که ابتدا جفت‬
‫رجيستر ‪ BC‬و سپس ‪ DE‬به ناحيه ‪ Stack‬پوش شدهاند‪.‬‬

‫شکل ‪ 3-4‬محل قرار‪ :‬گرفتن ‪ Stack‬در حافظه‬


‫‪PUSH B‬‬
‫‪PUSH D‬‬
‫‪POP D‬‬
‫‪POP D‬‬
‫نكتة مهم اين است كه بايد آخرين ثباتي كه ‪ PUSH‬شده را اول ‪ POP‬كرد و گرنه‬
‫محتواي ثباتها جابجا مي‌شود‪ .:‬در ابتداي زير برنامه ثباتها را ‪ PUSH‬میكنيم‪ ,‬در اين صورت‪:‬‬
‫با اطمينان کامل داخل زير برنامه از ثباتها استفادهكنيم و در پايان زير برنامه‪ ,‬آنها را ‪POP‬‬
‫كنيم تا مقدار قبلي خود را بازيابند‪:.‬‬

‫مثال ‪ : 6-4‬يك زير برنامه‌اي براي تبديل ‪ BCD‬به باينري‪ :‬بنويسيد‪.:‬‬


‫حل ‪ :‬فرض ك‪::‬نيم يک ع‪::‬دد چه‪::‬ار ب‪::‬ايتي داريم كه آدرس با ارزش‪::‬ترين ب‪::‬ايت در جفت‬
‫رجيستر ‪ DE‬ق‪::‬رار دارد و سه ب‪::‬ايت ديگر در آدرس‌ه‪::‬اي بع‪::‬دي ق‪::‬رار دارند و میخ‪::‬واهيم نتيجة‬
‫باينري را در جفت رجيستر‪ HL :‬بريزيم‪:.‬‬
‫در تبديل ‪ BCD‬به باينري‪ MSB ,:‬را در ده ضرب كرده و حاصل را با دومين بايت‬
‫با ارزش(از چپ) جمع کرده و بعد حاصل را در ‪ 10‬ضرب مي‌‌كنيم و همين كار را ادامه‬
‫مي‌دهيم‪ ،‬عدد بدست آمده معادل باينري عدد اول مي‌باشد‪.‬‬
‫‪BCDCONV:‬‬ ‫‪LXI‬‬ ‫‪H,0H‬‬ ‫‪; clear HL‬‬
‫‪MVI‬‬ ‫‪C,4H‬‬ ‫‪; C is Counter‬‬
‫‪Loop:‬‬ ‫‪LDAX‬‬ ‫‪D‬‬ ‫‪; Load MSB in Acc‬‬
‫‪ADD‬‬ ‫‪L‬‬ ‫‪; HL is result‬‬
‫‪MOV‬‬ ‫‪L,A‬‬

‫‪42‬‬
‫‪MVI‬‬ ‫‪A,0‬‬
‫‪ADC‬‬ ‫‪H‬‬
‫‪MOV‬‬ ‫‪H,A‬‬
‫‪DCR‬‬ ‫‪C‬‬
‫‪RZ‬‬
‫‪CALL‬‬ ‫‪TEN‬‬ ‫‪;mult HL*10‬‬
‫‪INX‬‬ ‫‪D‬‬
‫‪JMP‬‬ ‫‪Loop‬‬
‫‪TEN:‬‬ ‫‪PUSH‬‬ ‫‪B‬‬
‫‪DAD‬‬ ‫‪H‬‬ ‫‪;HL2‬‬
‫‪PUSH‬‬ ‫‪H‬‬ ‫‪;Saved 2HL‬‬
‫‪DAD‬‬ ‫‪H‬‬ ‫‪;4HL‬‬
‫‪POP‬‬ ‫‪B‬‬ ‫‪; 2 HL Save in BC‬‬
‫‪DAD‬‬ ‫‪B‬‬ ‫‪; (2 HL)+(8HL)= 10HL‬‬
‫‪POP‬‬ ‫‪B‬‬
‫‪RET‬‬
‫در زير برنام‪:‬ة‌ ‪TEN‬مش‪::‬اهده مي‌ك‪::‬نيم كه اول ‪ B، PUSH‬مي‌ش‪::‬ود‪ :‬و در آخر برنامه‬
‫‪ POP‬مي‌شود‪ ،‬در اين زير برنامه دستور‪ DAD H :‬محتواي‪ HL :‬را با خ‪::‬ودش جمع مي‌كند‬
‫يع‪::‬ني محت‪::‬واي‪ HL‬را دو برابر مي‌كن‪::‬د‪ .‬س‪::‬پس اين مق‪::‬دار را ‪ PUSH‬مي‌كنند‪ :‬و بعد دوب‪::‬اره‬
‫محت‪::‬واي ‪ HL‬را با خ‪::‬ودش جمع مي‌كند يع‪::‬ني ‪ 4‬برابر مي‌ش‪::‬ود‪ :‬و بعد هم ‪ 8‬برابر ح‪::‬ال اگر ‪2‬‬
‫برابر يك عدد را با ‪ 8‬برابرش جمع كنيم حاصل ‪ 10‬برابر عدد فوق خواهد بود‪.‬‬

‫مثال ‪ : 7-4‬متمم ‪ 2‬يك عدد ‪ n‬بايتي را پيدا كنيد‪.‬‬


‫‪TWOSC :‬‬ ‫‪ :‬حل‪MVI C, N‬‬
‫‪LXI H, SUBT‬‬
‫‪STC ; Set Carry‬‬
‫‪Loop :‬‬ ‫‪MOV A, M‬‬
‫‪CMA‬‬
‫‪ACI‬‬ ‫‪00H‬‬
‫‪MOV M,A‬‬
‫‪DCR C‬‬
‫‪RZ‬‬
‫‪INX H‬‬
‫‪JMP Loop‬‬

‫مثال ‪ : 8-4‬برنامة‌ تأخير‪.‬‬

‫‪43‬‬
‫حل ‪ :‬بعضي وقتها الزم است در يك برنامه ت‪::‬أخير ايج‪::‬اد ك‪::‬نيم مثالً در روشن ك‪::‬ردن‬
‫‪‌LED‬ها بايد تأخير ايجاد ش‪::‬ود تا چشم بتواند روشن و خ‪::‬اموش ش‪::‬دنها را از هم تش‪::‬خيص ده‪::‬د‪.‬‬
‫برنامة زير را در نظر بگيريد‪::‬‬
‫‪DELAY:‬‬ ‫‪PUSHD‬‬ ‫‪;12TCYCLe‬‬
‫‪MVI D,N‬‬ ‫‪;7 TCYCLe‬‬
‫‪LOOP:‬‬ ‫‪DCR D‬‬ ‫‪;4N TCYCLe‬‬
‫‪JNZ Loop‬‬ ‫‪;10(N-1) +7 TCYCLe‬‬
‫‪PoP D‬‬ ‫‪;10 TCYCLe‬‬
‫‪RET‬‬ ‫‪;10 TCYCLe‬‬

‫‪T= (12+7+4N+10(N-1)+7+10+10)T=(14N+36)T‬‬
‫حال اگر بخواهيم ‪ t=1ms‬باشد با فرض فركانس ‪ 2MHZ‬داريم ‪‌:‬‬
‫=‪T‬‬ ‫‪(1 2 M ) =0.510-6S‬‬
‫‪ N=140.3‬‬
‫پس اگر ‪ N‬را برابر((‪ Des= 8CH 140‬بگيريم برنامة تأخير باال ‪ 1ms‬خواهد بود‪ .‬حال‬
‫اگر به يك تأخير بيشتر‪ :‬احتي‪::‬اج داش‪::‬تيم‪ :‬يا ‪ N‬را تغي‪::‬ير دهيم و يا اين برنامه را در يك حلقه ديگر‬
‫قرار مي‌دهيم‪:.‬‬

‫‪ 4-5‬وقفه ها‬
‫به هنگام اجراي هر برنامه‪ ,‬در يک سيکل مانده به آخرين سيکل اجرای هر‬
‫دستورالعمل‪ :,‬مرتبا ً پين‌هاي وقفه نمونه‌برداري مي‌شوند‪ .‬در ‪ 8085‬پنج منبع وقفه داريم که‬
‫پين‌های مربوطه در بخش معرفي‪ :‬پايه‌هاي ‪ 8085‬معرفي‪ :‬شدند‪ .‬اگر سيگنال روي‪ :‬پين فعال بود‬
‫اجراي برنامه اصلي متوقف مي‌‌شود‪ :‬و زير برنامة وقفه انجام خواهد شد‪ .‬در انتهای زير برنامه‬
‫پس از دستور‪ ,RET :‬به برنامة اصلي باز مي‌گرديم و اجراي آن از سر گرفته مي‌شود‪ .‬زير‬
‫برنامه مربوط‪ :‬به هر وقفه آدرس خاصی دارد كه در زير آمده‌اند ‪:‬‬
‫‪TRAP‬‬ ‫‪0024H‬‬ ‫باالترين اولويت‬
‫‪RST7.5‬‬ ‫‪003CH‬‬
‫‪RST6.5‬‬ ‫‪0034H‬‬
‫‪RST5.5‬‬ ‫‪002CH‬‬
‫‪INTR‬‬ ‫‪NA‬‬ ‫پايين‌ترين اولويت‬

‫برای زير برنامه ‪ INTR‬آدرسی وجود‪ :‬ندارد‪ .‬چون عملی که بايد در ازای رخدادن‬
‫اين وقفه انجام شود توسط‪ :‬ابزار خارجي تعريف‪ :‬مي‌شود‪.‬‬

‫‪44‬‬
‫وقفه هم مشابه زير برنامه باعث مي‌گردد كه كنترلر برنامه به محل ديگري پرش كند‬
‫و آدرس دستور بعدي در ‪ Stack‬ذخيره شود تا هنگام اجراي دستور ‪ RET‬دوباره به برنامه‬
‫برگرديم‪ :.‬براي فعال كردن يك وقفه خاص مي‌توان بقيه وقفه‌ها را بي‌اثر كرده و با بار کردن‬
‫آكوموالتور با يك مقدار مناسب و اجراي دستور ‪ SIM‬اين كار را انجام داد‪.‬‬
‫مقدار دهي براي هر وقفه در شكل (‪ )3-4‬نشان داده شده است ‪ .‬سه بيت اول براي فعال كردن‬
‫وقفه‌هاي ‪ 5.5‬و ‪ 6.5‬و ‪ 7.5‬است طوری که هر كدام از اين بيت‌ها صفر باشد‪ ،‬وقفه مربوطه‬
‫فعال و اگر يك باشد غير فعال است‪.‬‬

‫شکل ‪ 4-4‬محتوی آکوموالتور‪ :‬قبل از اجرای دستور ‪SIM‬‬

‫‪ : MSE (Mask Set Enable) ‬اگر اين بيت صفر باشد عمل ‪mask‬‬
‫كردن بي‌اثر مي‌شود‪:.‬‬
‫‪ : R7.5 ‬اين پايه‪ ،‬مربوط‪ :‬به فعال کردن ‪ Flip Flop‬وقفه ‪ RST7.5‬براي‬
‫وقفة بعدي است‪ ،‬اگر اين بيت ‪ 1‬باشد‪.‬‬
‫‪ : SOE (Serial Output Enable) ‬اين بيت مربوط‪ :‬به ارتباط‪ :‬سريال‬
‫است‪.‬خروجي ‪ Enable‬سريال ميباشد‪:.‬‬
‫‪ : SID (Serial Input Data) ‬اين بيت نيز مربوط‪ :‬به ارتباط‪ :‬سريال‬
‫مي‌باشد‪ .‬ورودي ‪ Enable‬سريال ميباشد‪:.‬‬

‫مثال ‪ : 9-4‬دستور فعال كردن وقفه ‪. RST 6.5‬‬


‫‪ :‬حل‪00001101=0DH‬‬
‫‪MVI A, 0DH‬‬
‫‪SIM‬‬
‫‪EI‬‬

‫‪45‬‬
‫مثال ‪ : 10-4‬برنامه‌اي بنويسيد‪ :‬كه اگر ‪ RST7.5‬فعال شد‪‌LED ،‬هاي متصل به‬
‫پورت ‪ 01H‬را روشن شود‪( .‬در ابتدا خاموشند‪).‬‬
‫‪003CH‬‬ ‫حل‪JMP ISR:‬‬
‫‪0050H‬‬ ‫‪MAIN:‬‬ ‫‪MVI A,00H‬‬
‫‪OUT 01H‬‬ ‫‪; LED’S OFF‬‬
‫‪MVI A,1BH‬‬
‫‪SIM‬‬
‫‪EI‬‬
‫‪HERE : JMP HERE‬‬ ‫‪; Wait Loop‬‬
‫‪ISR :‬‬ ‫‪MVI A,FFH‬‬
‫‪OUT 01H‬‬ ‫‪; lED’S ON‬‬
‫‪RET‬‬

‫‪1‬‬
‫‪ 4-6‬زمانبندی‬
‫توجه به اين موضوع مهمترين مساله در كار ‪ CPU‬است‪ .‬براي روشن شدن قضيه‪,‬‬
‫سيكل‌هاي خواندن و نوشتن را با در نظر گرفتن دياگرام‪ :‬زمانی آنها در اينجا تشريح‬
‫ميکنيم‪.‬‬

‫‪ 4-6-1‬سيكل خواندن‬
‫سيكل خواندن را در شكل (‪ )4-4‬مشاهده مي‌كنيم‪ :.‬وقتي كه سيگنال ‪ ALE‬فعال مي‌شود‬
‫قسمت كم ارزش آدرس روي باس آدرس قرار‪ :‬مي‌گيرد و پس از صفر شدن آن داده در باس‬
‫داده قرار مي‌گيرد‪ :.‬خواندن فقط وقتي ميسر است كه داده آماده شده باشد‪( .‬شكل‪) 4-4‬‬

‫‪Timing‬‬ ‫‪·1‬‬

‫‪46‬‬
‫شکل ‪ 5-4‬دياگرام زمانی‪ :‬سيکل خواندن‬

‫‪ 4-6-2‬سيکل نوشتن‬

‫اين سيكل نيز مانند سيکل خواندن است فقط به جاي اينكه خواندن از باس داده انجام‬
‫گيرد‪ ،‬بر روي باس داده مي‌نويسيم‪ . :‬اين دياگرام را در شكل (‪ )5-4‬مشاهده مي‌كنيد‪.‬‬

‫‪ 4-6-3‬زمانبندی يک دستورالعمل نمونه‬

‫مي‌دانيم كه هر سيكل اجراي دستورالعمل‪ :‬شامل چندين سيكل ماشين ايت و هر سيكل‬
‫‪RW‬‬ ‫يا‬
‫‪DR‬‬ ‫شامل چند سيكل )‪‌، CLOK (TCycle‬سيكل‌هاي‪ :‬ماشين اصوالً سيكل‌هاي‬
‫هستند‪.‬‬
‫سيكل اول ماشين (‪ )M1‬يك سيكل ‪ Read‬است كه در آن ‪ op-code‬دستورالعمل‬
‫خوانده مي‌شود‪ :‬و به ‪ IR‬آورده مي‌شود‪ )Fetch( :‬و سپس ديكود مي‌شود‪ :‬و بعد سيكل‌هاي‬
‫خواندن از حافظه و يا نوشتن در حافظه كه هر كدام به ‪ 3‬پالس ساعت نياز دارند‪.‬‬
‫براي مثال دياگرام‪ :‬زماني ‪ STA 3800H‬را در نظر مي‌گيريم‪‌: :‬‬
‫فرض ‪:‬‬
‫آدرس‬ ‫‪Op-Code & Data‬‬
‫حافظه‬
‫‪32‬‬ ‫‪2000‬‬
‫‪00‬‬ ‫‪2001‬‬
‫‪38‬‬ ‫‪2002‬‬
‫دياگرام زماني‪ :‬اين دستور در شكل (‪ )6-4‬آورده شده است‪.‬‬

‫‪47‬‬
‫‪ IC 4-5‬هاي جانبی ‪8085‬‬

‫از آنجايی که ‪ 8085‬فقط يک ميکروپروسسور است و بر خالف ميکروکنترلرها‪ :,‬به‬


‫تنهايی نياز ما را در انجام يک پروژه بر طرف نمی‌کند‪ :,‬لذا استفاده از ‪ IC‬های جانبی‬
‫اجتناب ناپذير‪ :‬است‪ .‬در اين بخش به معرفی ‪ IC‬های پرکاربردتر‪ :‬می‌پردازيم و مطالعه‬
‫ديگر موارد به خواننده واگذار می‌شود‪:.‬‬

‫‪ IC 4-6-1‬های ‪ 8755‬و ‪8355‬‬

‫دو ‪ IC‬ارتباطي مي‌باشند‪ :‬که عالوه بر عمليات ‪ I/O‬داراي ‪ 2‌k‬حافظه به صورت‪:‬‬


‫‪ EPROM‬يا ‪ ROM‬مي‌باشند‪(.‬تنها‪ :‬تفاوت اين دو در اين است که ‪ 8755‬دارای‬
‫حافظه ‪ EPROM‬است و ‪ 8355‬دارای حافظه ‪ )ROM‬در شكل (‪ )7-4‬نمودار‬
‫بلوكي ‪ 8755‬مشاهده مي‌شود‪ 8755 :.‬دو ‪ PORT‬دارد كه‬

‫شکل ‪ 6-4‬دياگرام زمانی‪STA 3800H :‬‬


‫مي‌توانند‪ :‬به عنوان ورودي يا خروجي تعريف‪ :‬شوند‪ .‬در كنار هر يك از پورت‌ها يك‬
‫رجيستر به نام ‪ DDR‬قرار دارد كه دادة‌ هر ‪ DDR‬به منظور‪ :‬خروجی يا ورودی‪ :‬تعريف‬
‫کردن پورت مربوطه در آن لود مي‌شود‪ :.‬پورت ‪ A‬با آدرس ‪ 00H‬و ‪ DDR A‬با آدرس‬
‫‪ 02H‬عنوان مي‌شود‪ ,‬نيز پورت ‪ B‬با آدرس ‪ 01H‬و ‪ DDR B‬با آدرس ‪ 03H‬عنوان‬

‫‪48‬‬
‫مي‌شود ‪ .‬طريقة ورودي‪ :‬و يا خروجي تعريف‪ :‬كردن پورت‌ها به اين ترتيب است ‪ :‬اگر‬
‫بخواهيم يك پورت خروجي باشد بايد ‪ 00H‬را به ‪ DDR‬مربوطه بفرستيم و اگر بخواهيم‪:‬‬
‫ورودي‪ :‬باشد بايد ‪ FFH‬را به ‪ DDR‬آن بفرستيم‪.‬‬

‫مثال ‪ 11-4‬مي‌خواهيم در ‪ 8755‬پورت ‪ A‬به عنوان خروجي‪ :‬و پورت ‪ B‬به‬


‫عنوان خروجي تعريف‪ :‬شود‪.‬‬
‫حل ‪MVI A,00H :‬‬
‫‪OUT 02H‬‬
‫‪MVI A,FFH‬‬
‫‪OUT 03H‬‬
‫حال مي‌توانيم‪ :‬با دستور‪ 00H IN :‬از پورت ‪ A‬ورودي‪ :‬را بخوانيم‪ :‬و با دستور‬
‫‪ OUT 01H‬داده را به پورت ‪ B‬بفرستيم‪.‬‬

‫‪ IC 4-6-2‬های ‪ 8155‬و ‪8156‬‬

‫‪ 8156‬شبيه ‪ 8755‬است ولي عالوه بر ‪ A‬و ‪ B‬يك پورت‪ C‬دارد كه مي‌توان ‪ 4‬بيت‬
‫آن را به عنوان ورودي و چهار بيت ديگر‌ آن را به عنوان خروجي‪ :‬تعريف كرد‪ .‬همچنين‬
‫حاوي ‪ 2‌k‬حافظه‪ RAM‬و يک شمارنده ‪ 14‬بيتي پايين گذر وقابل برنامه ريزي مي‌باشد‪:.‬‬
‫بلوك دياگرام اين ‪ IC‬در شكل (‪ ) 7-4‬ديده مي‌شود‪ :.‬آدرس رجيسترها به اين ترتيب مي باشد‪:‬‬
‫‪Command register 20‌H‬‬
‫‪PORT A‬‬ ‫‪21‌H‬‬
‫‪PORT B‬‬ ‫‪2‌0‌H‬‬
‫‪PORT C‬‬ ‫‪23‌H‬‬
‫‪Timer low byte‬‬ ‫‪24‌H‬‬
‫‪Timer High byte‬‬ ‫‪25‌H‬‬

‫‪49‬‬
‫‪1‬‬
‫‪)PPI( 8255 4-6-3‬‬

‫‪ 8255‬يك واسط‪ I/O :‬همه منظوره است كه ‪ 24‬خط را به صورت سازماني از سه‬
‫پورت ‪ I/O‬هشت بيتي به نام‌هاي ‪ A‬و ‪ B‬و ‪ C‬در اختيار مي‌گذارد‪ :.‬برخالف ‪ ، 8755‬در‬
‫‪ 8255‬نمي‌توان تك تك بيت‌ها را به عنوان ورودي يا خروجي برنامه‌ريزي كرد‪ .‬در عوض‬
‫تمام بيت‌هاي پورت ‪ A‬يا ‪ B‬به عنوان يك بايت برنامه‌ريزي‪ :‬مي‌شوند‪ :.‬با وجود اين چهار بيت‬
‫پايين رتبه و باال رتبه در پورت ‪ C‬به صورت نيم‌بايت‌‪‌2‬هاي جداگانه قابل برنامه‌ريزي‌اند‪.‬‬
‫‪ 8255‬يك وسيلة بسيار قابل انعطاف‪ :‬است كه مي‌تون آن را به صورت سه پورت ‪ I/O‬ساده‬
‫جدا از هم (مد صفر)‪ ,‬دو پورت ‪ I/O‬دارای خطوط؟‪( 3‬مد ‪ )1‬يا يک دريچه ‪ I/O‬دو جهته يا‬
‫پنج خط دست‌دادن (مد ‪ )2‬برنامه‌ريزي كرد‪ .‬مد‌ها را مخلوط‪ :‬هم می‌توان کرد‪ .‬يک مد‬
‫‪ Set/Reset‬بيت هم وجود‪ :‬دارد که به کمک آن می‌توان بيت‌های پورت‪ C‬را برای استفاده در‬
‫کنترل‪ Set ,‬يا ‪ Reset‬کرد‪.‬‬

‫‪·1‬‬
‫‪Parallel Peripheral Interface‬‬
‫‪Nibble· 2‬‬
‫‪Handshaking · 3‬‬

‫‪50‬‬
‫شکل ‪ 7-4‬بلوک دياگرام‪ IC :‬های ‪ 8755‬و‬
‫‪8355‬‬
‫مثال ‪ 12-4‬مي‌خواهيم برنامه‌اي بنويسيم كه اعداد ‪ 3‬و ‪ 2‬و ‪ 1‬را درسه عدد ‪( 7seg‬به‬
‫ترتيب از چپ به راست) نمايش دهد‪.‬‬
‫حل ‪ :‬چون هر سه ‪ 7seg‬موازي‪ :‬هستند پس ما هر بار مي‌توانيم‪ :‬يكي از ‪ 7seg‬ها را‬
‫روشن كنيم به اين طريق‪ :‬كه داده را در پورت داده همه ‪7seg‬ها قرار‪ :‬ميدهيم‪ ,‬ولي ‪ 7seg‬اي‬

‫‪51‬‬
‫روشن مي‌شود كه پاية ‪ COM‬آن فعال باشد‪ .‬پس اگر دائم اين اعداد را به روي ‪7seg‬ها‬
‫بريزيم چون خيلي سريع اين كار انجام مي‌شود‪ :،‬چشم ما قادر‪ :‬به تشخيص روشن و خاموش‬
‫شدن ‪ 7seg‬نيست و فقط کافيست به ترتيب ‪ 7seg‬ها را فعال (روشن) کنيم‪ .‬توجه کنيم‬
‫‪ segment‬ها فعال پايين هستند‪ .‬سخت‌افزار اين برنامه در شکل (‪ )8-4‬آمده است‪.‬‬

‫شکل ‪ 8-4‬نمايش اتصال سه عدد ‪ 7seg‬به ‪ 8085‬توسط‪8755 :‬‬

‫‪MAIN :‬‬ ‫‪MVI A,FFH‬‬


‫‪OUT 02H‬‬ ‫‪;Port A = OUT PUT‬‬
‫‪OUT 03H‬‬ ‫‪;Port B = OUT PUT‬‬
‫‪LOOP:‬‬ ‫‪MVI B,F9H‬‬ ‫‪; # 1 segments in B‬‬
‫‪MVI C , FBH‬‬ ‫‪; 3th digit in C‬‬
‫‪CALL DISP‬‬ ‫‪; DISPLAY #1‬‬
‫‪MVI B, A4H‬‬
‫‪MVI C, EFH‬‬
‫‪CALL DISP‬‬
‫‪MVI B, B0H‬‬
‫‪MVI C, F7H‬‬
‫‪CALL DISP‬‬
‫‪DISP :‬‬ ‫‪MVI A, FFH‬‬
‫‪OUT 01H‬‬
‫‪MOV A, B‬‬

‫‪52‬‬
‫‪OUT 00H‬‬
‫‪MOV A, C‬‬
‫‪OUT 01H‬‬
‫‪RET‬‬

‫‪1‬‬
‫‪ 4-7‬اسکن صفحه کليد‬

‫همانطور‪ :‬که می‌دانيم‪ :‬صفحه کليد يکی از اساسی‌ترين ابزار‌ها برای وارد کردن داده به‬
‫ميکروپروسسور‌ها‪ :‬و سيستم‌های کامپيوتری‪ :‬است‪ .‬در اينجا برای پی بردن به اساس کار يک‬
‫صفحه کليد‪ ,‬اسکن يک صفحه کليد ‪ 4‬در ‪ 4‬بررسی‪ :‬می‌شود‪ .‬سخت‌افزار اين برنامه در شکل (‬
‫‪ )9-4‬آمده است‪.‬‬
‫به منظور‪ :‬اقتصادی‪ :‬کردن اسکن صفحه کليد‪ ,‬به جای استفاده از ‪ 16‬خط جداگانه‪,‬‬
‫معموال از يک مدل ماتريسی‪ 4 :‬در ‪ 4‬استفاده می‌شود‪ :.‬هنگامی که کليدی فشرده می‌شود‪ ،‬سطر‬
‫و ستون مربوطه از نظر الکتريکی‪ :‬به هم متصل‬

‫شکل ‪ 9-4‬اتصال صفحه کليد به ‪8085‬‬


‫می‌شوند‪ :.‬برای پی‌ بردن به اينکه چه کليدی فشرده شده است بايد مشخص شود که کدام سطر‬
‫صفر شده است هنگامی که مقدار منطقی صفر روی ستون‌ها به ترتيب قرار داده می‌شود‪ :.‬در‬
‫ادامه‪ ,‬برنامه اسکن يک صفحه کليد ‪ 4‬در ‪ 4‬از طريق ‪ 8755‬توسط‪ 8085 :‬آمده است‪.‬‬
‫‪Keyboard‬‬ ‫‪·1‬‬

‫‪53‬‬
INT: MVI A,FFH ;Program Port A
OUT 02H ;DDR A = Output
CMA ;Program Port B
OUT 03H ;DDR B=Input
ROW0: MVI B,00H B = Row weighting = 0
MVI A,FEH ;A = 11111110
OUT 00H ; Drive Row 0 LOW
IN 01H ;Read columns
CPI FFH ;Set Z flag if all columns HIGH
JNZ COL ;Jump to COL if any column LOW
ROW1: MVI B,04H
MVI A,FDH
OUT 00H
IN 01H
CPI FFH
JNZ COL
ROW2; MVI B,08H
MVI A,FBH
OUT 00H
IN 01H
CPI FFH
JNZ COL
ROW3: MVI B,0CH
MVI A,F7H
OUT 00H
IN 01H
CPI FFH
JNZ COL
JMP ROW0

54
‫‪COL:‬‬ ‫‪MVI C,00H‬‬
‫‪RRC‬‬
‫‪JNC DONE‬‬
‫‪INR C‬‬
‫‪RRC‬‬
‫‪JNC DONE‬‬
‫‪INR C‬‬
‫‪RRC‬‬
‫‪JNC DONE‬‬
‫‪INR C‬‬
‫‪DONE:‬‬ ‫‪XRA A‬‬
‫‪ADD B‬‬
‫‪ADD C‬‬
‫‪HLT‬‬

‫‪ 4-8‬کنترل موتور پله‌ای‬


‫موتور‪ :‬پله‌ای مشابه موتورهاي‪ :‬معمولي است با اين تفاوت كه چرخش محور موتور به‬
‫‪‬درجه مي‌چرخد‪ :‬كه‬ ‫صورت ناپيوسته انجام مي گيرد يعني با هر بار تحريك موتور‪ :‬به اندازة‬
‫‪‬از ‪ 0.7 ‬تا ‪ 15‬براي موتورهاي مختلف تغيير مي‌كند‪ .‬تحريک موتور‪ :,‬ديجيتال است‪.‬‬
‫اين موتور‪ :‬هم مانند موتورهای‪ :‬معمولی ديگر داراي استاتور و رتور مي‌باشد‪ :‬که استاتور و‬
‫رتور‪ ,‬هر کدام داراي تعدادي قطب هستند‪ .‬به طور‪ :‬مثال براي چرخش ‪ 15‬درجه‪ ،‬استاتور‬
‫داراي چهار قطب و روتور دارای سه قطب است‪ .‬به اين ترتيب فاصله بين قطب‌های‪ :‬استاتور‪:,‬‬
‫‪ 45‬درجه و فاصله بين قطب‌های‪ :‬روتور‪ 60 :‬درجه است‪ .‬در نتيجه با تحريک متوالی قطب‌های‪:‬‬
‫استاتور‪ :,‬هر بار روتور‪ 15 :‬درجه می‌چرخد‪ . :.‬شماتيک اين موتور پله‌ای در شکل ‪ 10-4‬آمده‬
‫است‪.‬‬

‫‪55‬‬
‫شکل ‪ 10-4‬شماتيک يک موتور پله‌ای نمونه‬

‫مثال ‪ 13-4‬يک موتور‪ :‬پله‌ای را برای چرخش دائم با زاويه ‪ 15‬درجه توسط ‪ 8085‬و‬
‫‪ 8755‬با تاخير مناسب کنترل کنيد‪.‬‬
‫حل ‪ :‬سخت افزار‪ :‬اين برنامه در شکل (‪ )11-4‬آمده است‪.‬‬
‫‪INIT:‬‬ ‫‪LXI SP,20C0H‬‬
‫‪MVI A,FFH‬‬
‫‪OUT 02H‬‬
‫‪MVI A,11H‬‬
‫‪STEP:‬‬ ‫‪OUT 00H‬‬
‫‪PUSH PSW‬‬
‫‪CALL DELAY‬‬
‫‪POP PSW‬‬
‫‪RLC‬‬
‫‪JMP STEP‬‬
‫‪..…… :DELAY‬‬

‫‪56‬‬
‫‪ 4-9‬برنام ‌ة چراغ راهنما‬
‫چراغ راهنما همانطور‪ :‬كه در شكل (‪ )11-4‬نشان داده شده است توسط‪ :‬يك بايت كنترل‬
‫مي‌شود‪ 3 .‬بيت سمت چپ مربوط به قرمز و زرد و سبز در جهت شرق به غرب و سه بيت‬
‫وسط مربوط‪ :‬به قرمز‪ :‬و زرد و سبز در جهت شمال به جنوب مي‌باشد بديهي است كه اگر شمال‬
‫به جنوب قرمز باشد‪ ،‬بايد شرق به غرب سبز باشد‪ .‬در ضمن دو بيت سمت راست نيز براي‬
‫پياده‌ها در نظر گرفته شده است‪.‬‬

‫شکل ‪ 11-4‬وضعيت بيت‌ها در '‪ 373‬در مثال چراغ راهنما‬


‫به عنوان مثال فرض كنيد مي‌خواهيم‪ :‬شرق به غرب قرمز‪ :‬باشد و شمال به جنوب‬
‫سبز‪ ،‬بالطبع بايد پياده‌روها‪ :‬متناسب با اينها روشن و خاموش باشند پس ‪ 8‬بيت اين فرمان به‬
‫ترتيب زير است ‪:‬‬
‫‪10000110= 86H‬‬
‫پس بايد ‪ 86H‬را روی‪ 373' :‬لچ کنيم‪ .‬قسمتی از متن برنامه که چنين فرماني را انجام‬
‫دهد چنين است ‪:‬‬
‫‪PORT : EQU‬‬ ‫‪10H‬‬‫‪; Output Port‬‬
‫‪LDI A,86H‬‬
‫‪OUT‬‬ ‫‪PORT ; send to out put‬‬
‫‪CALL‬‬ ‫‪DELAY‬‬ ‫‪; for delay‬‬

‫براي بقية حالتها نيز مي‌توانيم مقادير را عوض كنيم‪ .‬سخت‌افزار اين مدار در شكل (‬
‫‪ )12-4‬نشان داده شده است‪ .‬داده را از ميكرو‪ :‬به يك '‪ 373‬انتقال مي‌دهيم‪ :‬و '‪ 373‬را به چراغ‬
‫وصل مي‌کنيم‪ .‬پاية ‪ Enable‬در '‪ 373‬را نيز توسط ‪ 8‬خط آدرس (‪ )10H‬تعيين مي‌كنيم‪:.‬‬

‫دقت کنيم اگر به جاي اين ‪ AND‬هشت تايي‪ ،‬فقط ‪ A4‬را به '‪ 373‬وصل كنيم‬
‫سخت‌افزار باز هم درست كار مي‌كند‪ ،‬ولي انعطاف‌پذيري برنامه كم مي‌شود‪:.‬‬

‫‪57‬‬
‫شکل ‪ 12-4‬سخت افزار‪ :‬مثال چراغ راهنما‬

‫‪ 4-9‬ثابت‌ها و آرايه‌ها در زبان اسمبلی‬


‫در زبان‌های سطح باال معموال امکان تعريف‪ :‬متغير‌ها و ثابت‌ها وجود‪ :‬دارد و دليل اين‬
‫عمل آسان کردن کار برنامه نويس است‪ .‬اين امکان در زبان اسمبلی هم قرار داده شده است که‬
‫از قرار‪ :‬زير هستند‪:‬‬

‫‪ : Equate 4-9-1‬شكل‌ كلي اين دستور عبارتست از ‪:‬‬


‫‪NAME EQU Expression‬‬
‫در طول برنامه هر جا به متغير ‪ NAME‬ارجاع شود مقدار ‪ Expression‬جايگزين‬
‫آن می گردد‪ .‬در طول برنامه ‪ NAME‬ثابت است و برای تغيير آن بايد دوباره دستور‪EQU :‬‬
‫را بکار ببريم‪:.‬‬

‫‪ : Define Storage 4-9-2‬اين دستور برای رزرو کردن تعداد معينی خانه خالی‬
‫حافظه بکار می‌رود تا برای ذخيره داده‌ها جای کافی باقی بماند‪ .‬فرم کلی اين دستور به شکل‬
‫زير است‪:‬‬

‫‪58‬‬
‫‪My_Array DS 20H‬‬ ‫مثال ‪:‬‬
‫در اين مثال آرايه ‪ My_Array‬عبارتست از ‪ 32‬خانه (‪ ) 20H‬خالی حافظه که از‬
‫آدرس خاصی (بسته به مقدار اوليه دادن به آدرس شروع‪ :‬اولين خانه آرايه توسط‪ :‬دستور ‪ORG‬‬
‫) شروع‪ :‬می‌شود‪ .‬به عنوان مثال اگر بخواهيم‪ :‬آرايه نامبرده از آدرس ‪ 800H‬شروع شود‪,‬‬
‫کافيست قبل از دستور باال‪ ORG 800H ,‬نوشته شود‪.‬‬

‫‪ : Define Byte 4-9-3‬اين دستور هم شبيه ‪ Define Storage‬است با اين تفاوت‬


‫که خانه‌های آرايه مورد نظر ديگر خالی نيستند و محتوی آنها را برنامه‌نويس‪ :‬صريحا تعيين‬
‫می‌کند‪ ,‬مثال دستور‪:‬‬
‫‪My_Array DB 05H,11H,20H,23H‬‬
‫خانهای در فضای‪ :‬حافظه که به ترتيب شامل ‪ 05H, 11H, 20H‬و‬
‫آرايهای چهار ‌‬
‫‌‬
‫‪ 23H‬است تهيه می‌کند‪ .‬آدرس شروع آرايه همچنان با دستور‪ ORG :‬تعيين می‌شود‪.‬‬

‫‪ 4-9-4‬ماکرو‬
‫ماکرو در زبان اسمبلی در نقش تابع‪ 1‬در زبانهای‪ :‬سطح باالست‪ .‬ماكرو امكانات‬
‫جديدي به ما مي‌دهد‪ .‬در تعريف‪ :‬يك ماكرو‪ :‬مي‌توانيم‪ :‬همانند در زبانهای‪ :‬سطح باال متغيرداشته‬
‫باشيم و هر جاي برنامة‌ اصلي كه خواستيم‪ :‬ماكروی مورد نظر را با پارامترهايش صدا کنيم‪.‬‬
‫حالت کلی تعريف‪ :‬ماکرو از قرار زير است ‪:‬‬
‫‪NAME‬‬ ‫‪Macro‬‬
‫)…‪(par1, par2,‬‬
‫‪.....‬‬
‫‪......‬‬
‫‪.....‬‬
‫‪......‬‬

‫‪ENDM‬‬
‫‪ par1, par2‬و‪ ...‬متغيرهای‪ :‬ورودی‪ :‬ماکرو هستند‪ .‬مثال ماکروی‪ :‬زير دو پارامتر در‬
‫ورودی‪ :‬می‌گيرد و جايی که آن را صدا کنيم برنامه به محل تعريف ماکرو‪ :‬پرش می‌کند‪,‬‬

‫‪Fonction‬‬ ‫‪·1‬‬

‫‪59‬‬
‫عمليات الزم را انجام می‌دهد و حاصل ضرب ‪ 2‬در ‪ 8‬را بر می‌گرداند ‪:‬‬
‫)‪MUL (2,8‬‬

‫برای توضيحات بيشتر‪ :‬درباره ماکروها به بخش ‪ 7-9‬کتاب ميکروکنترلر‪8051 :‬‬


‫نوشته آی‪ .‬اسکات مکنزی مراجعه شود‪.‬‬

‫‪60‬‬
‫فصل‬
‫پنجم‬
‫ميکروکنترلر ‪8051‬‬

‫برای انجام يک پروژه اگر بخواهيم‪ :‬از يک سيستم‪ :‬ميکروپروسسوری استفاده کنيم‬
‫عالوه بر ميکروپروسسور‪ ))CPU :‬به ‪ IC‬های جانبی هم نياز داريم که در اين صورت‪ :‬بعيد‬
‫به نظر می‌آيد ازدحام‪ :‬سيم‌کشی و نصب سخت‌افزار‪ :‬الزم‪ ,‬عاری از اشتباه باشد‪ .‬ميكروكنترلر‬
‫در يك قطعة واحد‪ ،‬يك ‪ CPU‬و بسياري‪ :‬از مدارات الزم براي يك سيستم‪ :‬ميكروكامپيوتري‬
‫خود كفا را داراست‪ .‬عالوه بر ‪ ،CPU‬ميكروكنترلرها‪ :,‬شامل ‪ RAM‬و ‪ ,ROM‬يك رابط‬
‫سريال‪ ,‬چند رابط موازي‪ :,‬تايمر و مدارات زمان‌بندي وقفه ميباشند كه همگي مانند شكل (‪)1-5‬‬
‫در يك مدار مجتمع قرار‪ :‬دارند‪.‬‬

‫شکل ‪ 1-5‬بلوک دياگرام‪ :‬معماری داخلی ميکروکنترلر‪:‬‬


‫‪8051‬‬
‫هر يك از اين موارد‪ :‬در ادامه بررسي‪ :‬خواهند شد‪.‬‬

‫‪61‬‬
‫‪ 5-1‬بررسی اجمالی پايه‌های ‪8051‬‬
‫‪8051‬يك آي سي ‪ 40‬پايه است كه ‪ 32‬تا از اين ‪ 40‬پايه به عنوان خطوط‪ :‬درگاه‪I/O 1‬‬
‫عمل ميكنند‪ 32 .‬پاية نام‌برده‪ ،‬چهار گذرگاه ‪ 8‬بيتي را تشکيل می‌دهند و كاربـرد هر يك را‬
‫بررسي مي‌كنيم‪ .:‬نقشة شماتيک ميکروکنترلر‪ 8051 :‬در شکل (‪ )2-5‬آمده است‪.‬‬

‫‪ 5-1-1‬درگاه شمارة صفر‬


‫اين درگاه شامل پايه‌های ‪ 32‬تا ‪ 39‬مدار مجتمع (آي سي) است‪ .‬اين ‪ 8‬پايه به دو‬
‫منظور به كار مي‌روند‪- 1 :‬در حقيقت همان ‪ AD0‬تا ‪ AD7‬اند كه بوسيلة ‪ ALE‬و يك ذخيره‬
‫ساز مالتي پلكس مي‌شوند و به عنوان آدرس و يا به عنوان داده به كار مي‌روند‪ :.‬در واقع در‬
‫طراحی‌های‪ :‬بزرگتر‪ :‬که از حافظه خارجی استفاده می‌شود‪ :‬اين درگاه يک گذرگاه آدرس و داده‬
‫مالتی پلکس شده است‪.‬‬

‫‪ 5-1-2‬درگاه يک‬

‫اين ‪ 8‬پايه اختصاص يافته براي ‪ I/O‬روی پايه‌های ‪ 1‬تا ‪ 8‬آي سي است و براي‬
‫ارتباط با وسايل خارجي به كار مي‌روند‪ :.‬وظيفه ديگری برای اين درگاه در نظر گرفته نشده‬
‫است‪.‬‬

‫‪ 5-1-3‬درگاه دو‬

‫اين درگاه براي دو منظور‪ :‬به كار مي‌رود؛ يا براي ‪ I/O‬عمومي و يا بايت باالي‬
‫گذرگاه آدرس در طراحی‪ :‬با حافظه کد خارجي‪ . 2‬اين درگاه شامل پايه‌های ‪ 21‬تا ‪ 28‬است‪.‬‬

‫‪Port. 1‬‬
‫)‪External Code Memory (External ROM‬‬ ‫‪·2‬‬

‫‪62‬‬
‫‪ 5-1-4‬درگاه سه‬
‫يك درگاه يک درگاه دو منظوره است و عالوه بر ارتباط ‪ I/O‬ي عمومي‪ ,‬هر يك از‬
‫اين پايه‌ها وظايف ديگري‪ :‬نيز در رابطه با امکانات خاص ‪ 8051‬دارند كه در قسمتهاي‪ :‬بعد‬
‫كاربرد هر يك بيان خواهدشد‪ :.‬اين درگاه شامل پايه‌های ‪ 10‬تا ‪ 17‬آي سي است‪.‬‬

‫‪PSEN 5-1-5‬‬

‫يك سيگنال خروجي‪ :‬روي پايه ‪ 29‬است كه حافظه کد خارجي‪ :‬را فعال مي‌كند‪ .‬اين پايه‬
‫‪ EPROMEO‬خارجی‪ :‬وصل مي‌گردد تا خواندن بايتهاي‪ :‬برنامه از ‪EPROM‬‬
‫يك‬ ‫معموالً به‬
‫ممكن شود‪ .‬اين پايه فعال پايين است‪ .‬هنگام اجرای برنامه از ‪ ROM‬داخلی‪ PSEN ,‬در حالت‬
‫غير فعال (وضعيت باال ) باقی می‌ماند‪:.‬‬

‫‪ALE 5-1-6‬‬

‫اين سيگنال همانطور‪ :‬که قبال بيان شد براي مالتی پلكس كردن آدرس و داده به كار‬
‫مي‌رود‪ .‬اين سيگنال با فركانس يك ششم فركانس نوسان ساز كار مي‌كند ومي‌تواند به عنوان‬
‫يك پالس ساعت همه منظوره با فركانس ‪ 2MHZ‬به كار رود‪ .‬سيگنال خروجی ‪ ALE‬روی‪:‬‬
‫پايه شماره ‪ 30‬تعريف‪ :‬شده است‪.‬‬

‫‪AE‬‬ ‫‪5-1-7‬‬
‫اين سيگنال يک سيگنال ورودي‪ :‬است و روی‪ :‬پايه ‪ 31‬قرار دارد‪ .‬هنگامي كه در‬
‫وضعيت پايين باشد ‪ ROM‬داخلي غير فعال مي‌شود‪ :‬و برنامه‌ها از ‪ EPROM‬خارجي‪ :‬اجرا‬
‫مي‌شوند‪ :‬و اگر در وضعيت باال باشد ‪ 8051‬برنامه را از ‪ ROM‬داخلی يعنی ‪ K4‬يا ‪K8‬‬
‫برای تغذيه‬
‫‪AE‬‬ ‫بايت پايين حافظه اجرا می‌کند‪ .‬همچنين نوع ‪ EPROM‬دار ‪ 8051‬از خط‬
‫‪ 21‬ولت‪ 1‬در برنامه‌ريزی ‪ EPROM‬داخلی استفاده می‌کند‪.‬‬

‫‪V‬‬
‫‪pp‬‬ ‫‪·1‬‬

‫‪63‬‬
‫‪RST 5-1-8‬‬

‫ورودی‪ RST :‬در پاية ‪ ,9‬مربوط‪ :‬به ‪ Reset‬سيستم‪ :‬است و بعد از اين که حداقل به‬
‫مدت دو سيکل ماشين‪ 2‬در وضعيت باال قرار گيرد‪ ,‬به عنوان آغازگراصلي ‪ 8051‬به كار‬
‫مي‌رود‪.‬‬

‫شکل ‪ 1-5‬شمايی از پايه‌های ‪8051‬‬

‫‪ 5-1-9‬ورودي‌هاي نوسان‌ساز‬
‫اين دوپاية ورودي‌ به عنوان ورودي‌های نوسان ساز هستند كه پالس ساعت را از‬
‫كريستال به ‪ 8051‬منتقل مي‌كنند‪ .‬خازنهای‪ :‬پايدارکننده نيز به صورت نشان داده شده‪ ,‬مورد‬
‫‪ MCS-51, 12‬مگا هرتز‬
‫‪MT‬‬
‫نياز اند‪ .‬فرکانس‪ :‬نامی کريستال برای اغلب ‪IC‬های خانواده‬
‫است‪.‬‬

‫‪Machine Cycle‬‬ ‫‪·2‬‬

‫‪64‬‬
‫‪ 5-1-10‬اتصاالت تغذيه‬

‫‪(V ss‬زمين) به‬ ‫‪V cc‬به پايه ‪ 40‬و‬ ‫‪ 8051‬با يک تغذيه ‪ +5‬ولتی کار می‌کند‪ .‬اتصال‬
‫پايه ‪ 20‬وصل می‌شود‪.‬‬

‫‪ 5-2‬سازمان حافظه‬

‫اغلب ريز پردازنده‌ها‪ :‬يك فضاي‪ :‬حافظه مشترک براي برنامه و داده در نظر مي‌گيرند‪:.‬‬
‫در ‪ 8051‬يک فضای‪ :‬حافظه جداگانه برای برنامه (کد) و داده در نظر گرفته شده است‪ .‬حافظه‬
‫کد و داده هر دو ممکن است داخلی باشند‪ .‬با وجود اين هر دو با استفاده از اجزاء خارجی‪ :‬تا‬
‫حد ‪ K 64‬بايت حافظه کد و ‪ K 64‬بايت حافظه داده قابل توسعه هستند‪ .‬توضيحات بيشتر‪ :‬در‬
‫اين باره در ادامه آمده است‪.‬‬

‫‪ RAM 5-2-1‬همه منظوره‬

‫اگر چه شکل (‪ )2-5‬هشتاد بايت را از آدرس ‪ 30H‬تا ‪ 7FH‬برای ‪ RAM‬همه‬


‫منظوره نشان می‌دهد‪ 32 ,‬بايت پايين از آدرس ‪ 00H‬تا ‪ 2FH‬نيز می‌توانند‪ :‬به صورت‪ :‬مشابهی‬
‫استفاده شوند‪ .‬هر مکانی در ‪ RAM‬همه منظوره با استفاده از روش های آدرس‌دهی مستقيم يا‬
‫غير مستقيم قابل دسترسی‪ :‬است‪ .‬مثال دستور‪ :‬زير ‪:‬‬

‫‪MOV A, 5FH‬‬
‫برای خواندن محتويات ‪ RAM‬داخلی در آدرس ‪ 5FH‬به داخل انباره بکار می‌رود‪.‬‬
‫نيز دو دستور ‪:‬‬
‫‪MOV‬‬
‫‪R0,#5FH‬‬
‫‪MOV A,@R0‬‬
‫همان کاری را انجام می‌دهند که دستور قبلی به تنهايی انجام می‌داد‪.‬‬

‫‪65‬‬
‫‪ RAM 5-2-2‬بيت آدرس پذير‬

‫انديشه دستيابی‪ :‬به بيت‌های منف‪::‬رد از طريق‪ :‬نرم‌اف‪::‬زاز‪ ,‬يکی از امکان‪::‬ات قدرتمند‪ :‬اغلب‬
‫ميکروکنترلرها‪ :‬اس‪::‬ت‪ 210 :,8051 .‬مک‪::‬ان بيت آدرس پ‪::‬ذير دارد که ‪ 128‬مک‪::‬ان آن در آدرس‬
‫ب‪::‬ايت ‪ 20H‬تا ‪ 2FH‬ق‪::‬رار داشته و بقيه بيتها يي در ب‪::‬رخي ثبات‌ه‪::‬ای ک‪::‬اربرد خ‪::‬اص هس‪::‬تند‪.‬‬
‫بيت‌ها ن‪::‬يز می‌توانند همانند ب‪::‬ايت ها توسط يک دس‪::‬تورالعمل‪ set, reset, AND ,‬و يا ‪OR‬‬
‫ش‪::::‬وند‪ .‬به عن‪::::‬وان مث‪::::‬ال‪ ،‬ب‪::::‬رای ‪ 1‬ک‪::::‬ردن بيت ‪ 67H‬اين دس‪::::‬تورالعمل بک‪::::‬ار می‌رود‪: :‬‬
‫‪SETB 67H‬‬

‫شکل ‪ 2-5‬تقسيم‌بندی حافظه داده در ‪8051‬‬

‫‪1‬‬
‫‪ 5-2-3‬بانک های ثبات‬

‫بانک‌های ثبات در ‪ 32‬مکان پايين حافظه داخلی قرار دارند‪ .‬مجموعه دستورالمل‌های‪:‬‬
‫‪ 8051‬هشت ثبات را از ‪ R0‬تا ‪ R7‬پشتيبانی می‌کند و به صورت‪ :‬پيش فرض پس از ‪reset‬‬
‫سيستم‪ ,‬اين ثبات‌ها در آدرس ‪ 00H‬تا ‪ 07H‬حا فظه قرار می‌گيرند‪ :.‬مثال دستورالعمل زير‬
‫محتوی آدرس ‪ 05H‬را به داخل انباره منتقل می‌کند ‪:‬‬

‫‪Register Bank‬‬ ‫‪·1‬‬

‫‪66‬‬
‫‪MOV A , R5‬‬
‫بانک ثبات فعال با تغيير بيت‌های انتخاب بانک ثبات در کلمه وضعيت برنامه‪ 1‬قابل‬
‫تغيير است‪ .‬با فرض آن که بانک ثبات شماره ‪ 3‬فعال باشد دستورالعمل‪ :‬زير محتوی انباره را‬
‫در مکان ‪ 18H‬می‌نويسد ‪:‬‬
‫‪MOV‬‬
‫‪R0 , A‬‬

‫‪ 5-2-4‬ثبات‌های کاربرد خاص ‪)SFR(2‬‬

‫‪ 8051‬ثبات‌های زيادی دارد‪ .‬عالوه بر ‪ R0‬تا ‪ R7 , 21‬ثبات کاربرد‪ :‬خاص ر نلحيه‬


‫باالی ‪ RAM‬از آدرس ‪ 80H‬تا ‪ FFH‬وجود‪ :‬دارد‪ .‬البته در اين محدوده‪ ,‬تعداد زيادی خانه‌های‬
‫تعريف نشده وجود دارد‪.‬‬
‫برنامه‌نويسان بايد هنگام کارکردن با بيت‌ها به جای بايت‌ها مراقب باشند‪ .‬برای مثال‬
‫دستورالعمل‪: :‬‬
‫‪SETB 0E0H‬‬
‫بيت شماره صفر در انباره را ‪ 1‬می‌کند ولی ديگر بيت‌ها را تغيير نمی‌دهد‪ .‬شگرد‪ :‬کار‬
‫تشخيص اين نکته است که بدانيم ‪ E0H‬هم آدرس تمام بايت انباره است و هم آدرس‬
‫کم‌ارزش‌ترين بيت در انباره است‪ .‬اما از آنجا که دستورالعمل‪ SETB :‬روی‪ :‬بيت‌ها عمل‬
‫می‌کندو نه بايت‌ها‪ ,‬در نتيجه نگران آن نيستيم که کل بايتی با آدرس ‪ E0H‬يعنی انباره تغيير‬
‫کند‪ .‬بخش‌های مختلف ثبات‌های کاربرد‪ :‬خاص در ادامه شرح داده خواهند شد‪.‬‬

‫‪ 5-2-4-1‬کلمه وضعيت برنامه‬


‫اين بايت در آدرس ‪ D0H‬قرار‪ :‬دارد و هربيت مفهومي را مي‌رساند ‪:‬‬
‫‪ : CY‬بيت نقلي است و با انجام عمليات حسابي تأثير مي‌پذيرد‪ :‬و براي پرشهاي‪:‬‬
‫شرطي قابل استفاده است‪.‬‬
‫‪ : AC‬پرچم نقلي كمكي براي اعمال محاسباتي در ‪ BCD‬به کار می‌رود‪ :.‬اگر يک‬
‫انتقال از بيت ‪ 3‬به بيت ‪ 4‬اتفق بيفتد‪ ,‬يا نتيجه در چهار بيت پايين بين ‪ 0AH‬تا ‪ 0FH‬باشد اين‬
‫پرچم ‪ set‬می‌شود‪:.‬‬

‫‪Program Status Word‬‬ ‫‪·1‬‬


‫‪.Special Function Register (SFR) 2‬‬

‫‪67‬‬
‫‪ : F0‬پرچم صفر است و اين پرچم در صورتي ‪ 1‬مي‌شود‪ :‬كه محتواي‪ ACC :‬صفر‬
‫شود‪.‬‬
‫‪ RS0‬و ‪ :RS1‬اين دو پرچم بانك‌هاي ثباتي را تعيين مي‌كند‪ .‬چون ‪ 4‬بانك ثبات داريم‬
‫پس به وسيلة دو بيت مي‌توانيم‪ :‬آنها را تعيين كنيم اگر اين دو بيت ‪ 00H‬باشند بانك ثبات‬
‫صفراست واگر ‪ 01H‬باشند بانك ‪ 1‬و اگر ‪ 10H‬باشند بانك ‪ 2‬و اگر ‪ 11H‬باشند بانك ‪ 3‬مورد‪:‬‬
‫نظر مي‌باشد‪.‬‬
‫‪ : OV‬پرچم سرريز‪ :‬است و پس از يك عمل جمع يا تفريق اگر يك سرريز‪ :‬حسابي‬
‫اتفاق بيفتد اين بيت‪ 1 ،‬مي‌شود‪.‬‬
‫‪ : P‬بيت توازن است و براي ساختن توازن زوج در آكوموالتور‪ :‬بطور خودكار‪ 1 :‬و‬
‫يا پاك ميشود يعني اگر تعداد بيتهاي «يك» در ‪ ،Acc‬عددي فرد باشد‪ ،‬اين بيت ‪ 1‬و گرنه‬
‫صفرخواهد بود‪.‬‬

‫‪ 5-2-4-2‬ثبات ‪B‬‬
‫ثبات ‪ B‬در آدرس ‪ F0H‬به همراه انباره برای عمليــــات ضرب و تقسيم استفاده‬
‫می‌شود‪ .‬دستورالعمل ‪ MUL AB‬مقادير هشت بيتی بدون عالمت در ‪ A‬و ‪ B‬را ضرب کرده‬
‫و نتيجه ‪ 16‬بيتی را در ‪( A‬بايت پايين) و ‪( B‬بايت باال) قرار‪ :‬می‌دهد‪ .‬نيز دستورالعمل‪DIV :‬‬
‫‪ AB, A‬را بر ‪ B‬تقسيم می‌کند و خارج قسمت را در ‪ A‬و باقيمانده را در ‪ B‬می‌گذارد‪ :.‬اين‬
‫رجيستر همچنين بعنوان يک ثبات چرکنويس همه منظوره عمل می‌کند‪ .‬اين ثبات همچنين از‬
‫آدرس ‪ F0H‬تا ‪ F7H‬نيز هست‪.‬‬

‫‪1‬‬
‫‪ 5-2-4-3‬اشاره‌گر پشته‬
‫يك ثبات ‪ 8‬بيتي است که در آدرس ‪ 81H‬قرار‪ :‬دارد و حاوي آدرس داده‌اي است كه‬
‫در همان هنگام در باالي پشته قرار دارد‪ PUSH .‬كردن به پشته‪ SP ،‬را پيش از انتقال داده‬
‫به پشته‪ ،‬يك واحد افزايش مي‌دهد وعمل ‪ POP‬كردن‪ ،‬داده را از پشته مي‌خواند و سپس ‪ SP‬را‬
‫يك واحد كم مي‌كند‪ .‬هنگام ‪ reset‬شدن‪ ,‬اشاره‌گر پشته بطور‪ :‬پيش فرض حاوي ‪ 07H‬است اما‬
‫ميتوان پشته را در ‪ RAM‬داخلي تعريف‪ :‬كرد‪ .‬مثال برای مقدار اوليه دادن به ‪ SP‬در پشته‌ای‬
‫که از آدرس ‪ 60H‬آغاز می‌شود‪ :‬دستورالعمل‪ :‬زير مورد استفاده قرار‪ :‬می‌گيرد ‪:‬‬
‫‪MOV SP , #5FH‬‬
‫‪Stack Pointer‬‬ ‫‪·1‬‬

‫‪68‬‬
‫‪1‬‬
‫‪ 5-2-4-4‬اشاره‌گر داده‬
‫اشاره‌گر داده (‪ )DPTR‬که برای دستيابی به حافظه کد يا داده خارجی استفاده می‌شود‪:,‬‬
‫يك ثبات ‪ 16‬بيتي است كه در آدرسهاي ‪ 82H‬و ‪ 83H‬قرار دارد‪.‬‬

‫‪ 5-2-4-5‬ثبات‌های درگاه‬
‫درگاه های ‪ I/O‬در ‪ 8051‬عبارتند از درگاه صفر در آدرس ‪ , 80H‬درگاه يك در‬
‫آدرس ‪ , 90H‬درگاه دو در آدرس ‪ A0H‬و درگاه سه در آدرس ‪ .B0H‬همه اين درگاهها بيت‬
‫آدرس پذيرند‪ :.‬بعنوان مثال دو دستور زير معادلند ‪:‬‬
‫‪CLR P1 . 7‬‬
‫‪CLR 97H‬‬
‫‪ 5-2-4-6‬ثبات‌های تايمر‬
‫‪ 8051‬داراي دو تايمر ‪ 16‬بيتي براي شمارش است ودر آدرس‌هاي ‪( 8AH‬بايت‬
‫پايين) تا ‪( 8DH‬بايت باال) قرار دارند‪ .‬ثبات‌هاي ‪ TMOD‬و ‪ TCON‬نيز مربوط به تايمر‌ها‬
‫هستند كه در ادامه بحث خواهند شد‪.‬‬

‫‪ 5-2-4-7‬ثبات‌های درگاه سريال‬


‫‪ 8051‬شامل يك درگاه سريال براي ارتباط‪ :‬با ابزارهاي‪ :‬سريال مانند مودم‌ها و پايانه‌ها‬
‫مي‌باشد‪ .‬ثبات ‪ SBUF‬داده‌هاي ورودي يا خروجي را نگه مي‌دارد و ‪ SCON‬براي بررسي‪:‬‬
‫حالت‌هاي عملكرد است‪ .‬همة اينها در بخش‌هاي بعدي به تفضيل تشريح خواهدشد‪:.‬‬

‫‪ 5-2-4-8‬ثبات‌های وقفه‬
‫پنج منبع وقفه با دو سطح تقدم‪ 2‬در ‪ 8051‬داريم كه اين وقفه‌ها موقع شروع‪ :‬به كار‬
‫ميکرو غير فعال‌اند و پس از شروع‪ :‬به كار سيستم‪‌:‬مي‌توان آنها را با نوشتن در ثبات‬
‫فعال‌سازی‪ :‬وقفه‪ )IE( 3‬در آدرس ‪ A8H‬مقداردهي و فعال کرد‪ .‬نيز سطح تقدم از طريق ثبات‬

‫‪Program Counter‬‬ ‫‪·1‬‬


‫‪Priority Level · 2‬‬
‫‪Interrupt Enable Register · 3‬‬

‫‪69‬‬
‫تقدم وقفه (‪ )IP‬در آدرس ‪ B8H‬تعيين می‌شود‪ .‬وقفه‌ها در بخش‌هاي بعدي بطور‪ :‬مشروح‬
‫بررسی مي‌شوند‪.‬‬

‫‪ 5-3‬دستيابی به حافظه کد و داده خارجی‬

‫فعال‬
‫‪NESP‬‬ ‫حافظه کد خارجی‪ :‬يک حافظه فقط خواندنی‪ :‬است که توسط‪ :‬سيگنال‬
‫می‌شود‪ .‬هنگامی که از يک ‪ EPROM‬خارجی استفاده می کنيم‪ ,‬درگاه‌های ‪ 0‬و ‪ 2‬به عنوان‬
‫درگاههای ‪ I/O‬همه منظوره در دسترس ما نيستند‪ :.‬نيز حافظه داده خارجی‪ :‬يک حافظه‬
‫فعال می‌شود‪ :.‬اين دو سيگنال عملکرد ديگر‬
‫‪RW‬‬ ‫و‬
‫‪DR‬‬ ‫خواندنی‪ -‬نوشتنی‪ :‬است که با‬
‫پايه‌های ‪ P3.6‬و ‪ P3.7‬هستند‪.‬تنها راه دستيابی‪ :‬به حافظه داده خارجی‪ :‬دستورالعمل‪MOVX :‬‬
‫( مثال به فرم‪ ) MOVX A,@DPTR :‬است که از اشاره‌گر داده ‪ 16‬بيتی (‪ R0 ,)DPTR‬و‬
‫يا ‪ R1‬به عنوان ثبات آدرس استفاده می‌کند‪.‬‬

‫‪ 5-4‬روش‌های آدرس دادن‬

‫روش‌های آدرس‌دهی‪ :‬اين اجازه را می‌دهند که مبدا و مقصد داده‌ها به روش‌های‪:‬‬


‫مختلفی که بستگی به وضعيت برنامه‌نويسی دارد‪ ,‬مشخص شود‪ .‬روش‌های آدرس‌دهی‪ :‬بر‬
‫هشت گونه‌‌اند که عبارتند از ‪:‬‬

‫‪1‬‬
‫‪ 5-4-1‬آدرس‌دهی ثبات‬
‫‪ 8‬ثبات ‪ R0‬تا ‪ R7‬در دستورالعمل‌هاي‪ :‬مختلفي به كارگرفته شده‌اند و بنا به مورد‪ :‬نياز‪,‬‬
‫يكي از اين ثباتها استفاده مي‌شود‪ .‬اين آدرس‌دهي‪ :‬همان‌ طور كه از شكل (‪ )3-5‬بر مي‌آيد ‪5‬‬
‫بيت براي نوشتن كد عملياتي است و سه بيت براي مشخص كردن ثبات‌هاي موردنظر‪ :‬به كار‬
‫مي‌روند‪( :.‬چهار "بانک" برای ثباتهای کاری وجود‪ :‬دارد ولی در هر زمان فقط يکی از آنها‬
‫فعال است‪ .‬بانك ثبات نيز چنانچه قبالً اشاره شد توسط‪ RS0 :‬و‪ RS1‬انتخاب مي‌شود) مثال‬
‫برای جمع کردن محتويات ثبات ‪ 7‬با انباره‪ ,‬از دستورالعمل‪ :‬زير استفاده می شود ‪:‬‬
‫‪ADD A,R7‬‬

‫‪Register Addressing‬‬ ‫‪·1‬‬

‫‪70‬‬
‫کد عملياتی اين دستور ‪ 00101111B‬است‪ .‬پنج بيت بااليی يعنی ‪ ,00101‬کد‬
‫دستورالعمل‪ :‬و سه بيت پايينی يعنی ‪ ,111‬ثبات را مشخص میکنند‪.‬‬

‫شکل ‪ 3-5‬روشهای‪ :‬آدرس دهی ‪8051‬‬

‫‪1‬‬
‫‪ 5-4-2‬آدرس دهی مستقيم‬

‫در اين روش هر ثبات داخل ‪ 8051‬را مي‌توان فراخواني كرد و ‪ 8‬بيت براي كد‬
‫عملياتي و ‪ 8‬بيت براي آدرس‌دهي به ‪ RAM‬به كار مي‌رود‪ :.‬بديهي است كه با ‪ 8‬بيت ‪256‬‬
‫مكان ‪ RAM‬قابل دسترسي‪ :‬است‪ .‬در قسمت ‪ 8‬بيت آدرس اگر هفتمين بيت صفر باشد به ‪128‬‬
‫مكان پايين ‪ RAM‬و اگر يك باشد به ‪ SFR‬اشاره دارد‪ .‬به عنوان مثال دستورالعمل‪: :‬‬

‫‪Direct Addressing‬‬ ‫‪·1‬‬

‫‪71‬‬
‫محتوی‪ :‬انباره را به درگاه‬ ‫‪MOV P1,A‬‬
‫‪ 1‬منتقل میکند‪ .‬آدرس مستقيم درگاه ‪ )90H( 1‬توسط اسمبلر تعيين شده است به عنوان بايت‬
‫دوم دستورالعمل‪ :‬اضافه میشود‪:.‬‬

‫‪1‬‬
‫‪ 5-4-3‬آدرس دهی غير مستقيم‬
‫همانطور‪ :‬كه در ‪ 8085‬ديديم بعضي وقتها الزم است يك آدرس در طي اجراي برنامه‬
‫تعيين شود بنابراين آدرس‌دهي‪ :‬غير مستقيم الزم است‪ .‬در اين روش ‪ R0‬و ‪ R1‬به عنوان‬
‫ثبات‌هاي اشاره‌گر عمل مي‌كنند‪ :‬و محتواي‪ :‬آنها به عنوان آدرس در ‪ RAM‬به كار مي‌رود‪:.‬‬
‫آدرس دهی غير مستقيم با يک نشانه "@" در جلو ‪ R0‬يا ‪ R1‬نمايش داده میشود‪ :.‬اين روش‬
‫آدرس‌دهي يك بايتي است و ‪ 7‬بيت با ارزش‌تر كد عملياتي را تعيين مي‌كند و بيت با كمترين‬
‫ارزش براي مشخص كردن ‪ R0‬و ‪ R1‬است و اگر اين بيت صفر باشد‪ R0 ،‬به عنوان آدرس و‬
‫اگر يك باشد‪ R1 ،‬به عنوان آدرس به كار مي‌رود‪ .‬به عنوان مثال اگر ‪ R1‬شامل ‪ 40H‬و آدرس‬
‫‪ 40H‬از حافظه نيز شامل ‪ 55H‬باشد‪ ,‬دستورالعمل ‪:‬‬
‫‪MOV A,@R1‬‬
‫‪ 55H‬را به انباره منتقل میکند‪.‬‬

‫‪2‬‬
‫‪ 5-4-4‬آدرس دهی فوری‬
‫هنگامي كه عملوند مبدأ به جاي محتواي‪ :‬يك آدرس‪ ،‬يك عدد ثابت باشد از اين روش‬
‫استفاده مي‌شود و در اين روش پس از عملوند اول عالمت «‪ »#‬را به معناي فوري قرار‪:‬‬
‫مي‌دهيم‪ .‬همة دستورالعمل‌هايي كه از آدرس‌دهي‪ :‬فوري‪ :‬استفاده‌ مي‌كنند‪ ،‬يك دادة فوري هشت‬
‫بيتی مي‌خواهند به استثناء حالتی که از اشارهگر داده استفاده مي کنيم که در اين حالت يك ثابت‬
‫‪ 16‬بيتي نياز است مثالً ‪:‬‬
‫‪MOV DPTR, # 8000H‬‬
‫و گرنه در بقيه موارد بعد از ‪ #‬فقط ‪ 8‬بيت قرار مي‌گيرد‪ :.‬اين روش آدرس‌دهي دو‬
‫بايتي است‪ ،‬يكي براي عملوند و يكي براي دادة فوري‪:.‬‬

‫‪Indirect Addressing. 1‬‬


‫‪Immediate Addressing‬‬ ‫‪·2‬‬

‫‪72‬‬
‫‪1‬‬
‫‪ 5-4-5‬آدرس دهی نسبی‬
‫اين آدرس دهي فقط بوسيلة چند دستورالعمل پرش مشخص مورد‪ :‬استفاده قرار‬
‫مي‌گيرد‪ .‬آدرس نسبي‪ ,‬يك عدد ‪ 8‬بيتي عالمت‌داراست که با شمارنده برنامه جمع میشود تا‬
‫آدرس دستورالعمل بعدی که بايد اجرا شود را بسازد‪ .‬اين روش آدرس‌دهي نيز دو بايتي است‬
‫كه يك بايت براي كد دستورالعمل‪ :‬و يك بايت براي آدرس نسبي در نظر گرفته شده است‪.‬‬
‫بديهي است كه ما نهايتا ً مي‌توانيم‪ :‬به ‪ 128‬خط پايين‌تر و يا ‪ 128‬خط باالتر پرش كنيم و در‬
‫برنامه‌هاي بسيار بلند اين روش كاربردي‪ :‬ندارد‪ .‬به عنوان مثال اگر بر چسب ‪ THERE‬نشان‬
‫‪SJMP‬‬ ‫دهنده يک دستورالعمل‪ :‬در مکان ‪ 1040H‬باشد و دستورالعمل‪: :‬‬
‫‪THERE‬‬
‫در مکانهای‪ 1000H :‬و ‪ 1001H‬حافظه قرار‪ :‬داشته باشد‪ ,‬اسمبلر يک فاصله نسبی به‬
‫اندازه ‪ 3EH‬به عنوان بايت دوم دستورالعمل‪ :‬منظور میکند‪)1002H + 3EH = 1040H( .‬‬

‫‪2‬‬
‫‪ 5-4-6‬آدرس دهی مطلق‬
‫اين آدرس دهي فقط در دو دستور ‪ ACALL‬و ‪ AJMP‬استفاده مي‌شود‪ :.‬در اين‬
‫روش آدرس‌دهي كه دو بايتي است‪ ،‬بايت دوم به همراه سه بيت با ارزش‌تر‪ :‬بايت اول‬
‫(مجموعا ً ‪ 11‬بيت) به عنوان آدرس در صفحة ‪ 2K‬بايتي تلقي مي‌شود‪ :‬و پنج بيت با ارزش‬
‫كمنتر در بايت اول به عنوان تعيين‌كننده صفحة ‪ 2K‬بايستي‪ :‬به كار مي‌رود‪ :‬پس با اين روش‬
‫مي‌توانيم‪ 32 :‬صفحة ‪ 2k‬بايتي را آدرس دهي كنيم‪ .‬برای مثال اگر بر چسب ‪ THERE‬نشان‬
‫‪AJMP‬‬ ‫دهنده يک دستورالعمل‪ :‬در آدرس ‪ 0F46H‬باشد و دستورالعمل ‪:‬‬
‫در مکانهای‪ :‬حافظه ‪ 0900H‬و ‪ 0901H‬قرار‪ :‬دتشته‬ ‫‪THERE‬‬
‫باشد‪ ,‬اسمبلر دستورالعمل‪ :‬را به اين شکل به رمز درمیآورد ‪:‬‬
‫‪Byte(A10-‬‬
‫)‪A8+opcode‬‬
‫)‪Byte (A7-A0‬‬
‫‪111‬‬
‫‪10000‬‬ ‫‪ 1ts‬‬

‫‪01100001‬‬ ‫‪2‬‬
‫‪dn‬‬

‫بيتهايی که زير آنها خط کشيده شده ‪ 11‬بيت پايين از آدرس مقصد هستند‪.‬‬

‫‪Relative Addressing‬‬ ‫‪·1‬‬


‫‪Absolute Addressing · 2‬‬

‫‪73‬‬
‫‪1011110000‬پنج بيت بااليی شمارنده برنامه هنگامی که اين‬
‫‪0F64 H ‬‬ ‫‪011000‬‬ ‫‪B‬‬

‫دستورالعمل‪ :‬اجرا میشود‪ ,‬تغيير نخواهد کرد‪ .‬توجه داشته باشيد که هم دستورالعمل ‪ AJMP‬و‬
‫هم مقصد در يک صفحه ‪ K2‬بايتی هستند که بين آدرسهای ‪ 0800H‬و ‪ 0FFFH‬قرار‪ :‬دارد‪.‬‬
‫بنابراين ‪ 5‬بيت باال در آنها مشترک است‪.‬‬

‫‪ 5-4-7‬آدرس دهی طوالنی ‪( 1‬مطول ؟)‬


‫اين آدرس دهي سه بايتي است‪ .‬يك بايت براي كد عملياتي و دو بايت ديگر براي‬
‫آدرس دهي به كار مي‌روند ‪ .‬بالطبع مي‌توان ‪ K64‬بايت از حافظه را آدرس‌دهي كرد‪( .‬البته‬
‫منظور آدرس‪ ,‬حافظة كد يا ‪ ROM‬خارجي مي‌باشد) اين روش در دستورالعمل‌هاي ‪LCALL‬‬
‫و ‪ LJMP‬به كار مي‌رود‪:.‬‬

‫‪2‬‬
‫‪ 5-4-8‬آدرس دهی انديس دار‬

‫اين روش از يك ثبات پايه (شمارنده برنامه و يا اشارهگر داده) و يك فاصلة نسبي‬
‫(انباره) براي بدست آوردن آدرس مؤثر‪ :‬در دستورالعمل‌هاي‪ JMP :‬و يا ‪ MOVC‬استفاده‬
‫مي‌كند‪ .‬اين روش آدرس‌دهي نيز يك آدرس ‪ 16‬بيتي توليد مي‌كند‪ .‬در اين روش آدرس دهي‬
‫اشاره‌گر داده با آكوموالتور‪ :‬جمع مي‌شود‪ :‬و حاصل به عنوان يك آدرس‌ ‪ 16‬بيتي تلقي مي‌شود‪:.‬‬
‫مثالً دستور مقابل را در نظر بگيريد‪: :‬‬
‫‪MOVC A, @A+DPTR‬‬
‫‪ DPTR‬با انباره جمع مي‌شود‪ :‬و آدرس الزم بدست میآيد‪ .‬محتواي‪ :‬اين آدرس داخل‬
‫انباره قرار‪ :‬ميگيرد‪ .‬عالمت @ نشان دهندة آدرس‌دهي‪ :‬غير مستقيم است ‪.‬‬

‫‪ 5-5‬انواع دستورالعملها‬

‫پس از بررسي‪ :‬نحوه‌هاي آدرس‌دهي الزم است دستورالعمل‌‌هاي‪ 8051 :‬را بيان كنيم‪.‬‬
‫در ادامه اين دستورالعملها‪ :‬را به پنج گروه تقسيم‌بندي‪ :‬مي‌كنيم و بعد هر يك از توضيح مي‌دهيم‬
‫‪:‬‬

‫‪Long Addressing‬‬ ‫‪·1‬‬


‫‪. Indexed Addressing‬‬ ‫‪2‬‬

‫‪74‬‬
‫‪1‬ـ دستورالعملهاي حسابي (محاسباتي‪ :‬؟)‬
‫‪2‬ـ دستورالعملهاي منطقي‬
‫‪ -3‬دستورالعملهاي انتقال داده‬
‫‪ -4‬دستورالعملهاي‪ :‬متغير بولي‬
‫‪ -5‬دستورالعملهاي‌انشعاب‪:‬‬
‫‪ 5-5-1‬دستورالع‪:‬ملهای حسابی‬
‫نكتة مهم در مورد اين دستورالعملها‪ :‬اين است كه همه به جز اعمال ضرب و تقسيم در‬
‫يك سيكل ماشين انجام مي‌شوند‪ .‬ضرب و تقسيم در چهار سيكل ماشين اجرا مي‌شوند‪ .‬نيز‬
‫دستور ‪ INC DPTR‬در دو سيكل ماشين انجام مي‌شود‪ .‬اين دستورالعملها‪ :,‬اعمال حسابي از‬
‫قبيل جمع و تقريق و ضرب و تقسيم و يكي اضافه كردن و يكي كم كردن را انجام مي‌دهند مثالً‬
‫اجراي دستور ‪:‬‬
‫‪ADD A, #0FH‬‬
‫عدد ‪ 0FH‬را با ‪ ACC‬جمع مي‌كند و حاصل را در ‪ ACC‬مي‌ريزد‪( :.‬دستور‪ :‬باال كامالً با‬
‫دستور ‪:‬‬
‫‪ADD A, #15B‬‬
‫معادل است‪ ).‬برای توضيحات بيشتر‪ :‬راجع به عمل ضرب و تقسيم به بخش ‪ 2-4-2-5‬مراجعه‬
‫شود‪.‬‬

‫‪ 5-5-2‬دستورالعملهای منطقی‬
‫اين دستورالعملها شامل عمليات منطقي هستند‪ ,‬دستوراتی‪ :‬از قبيل‌ ‪AND , OR,‬‬
‫‪ XOR‬و ‪ NOT‬را مي‌توان به صورت‪ :‬بيت به بيت يا بايت به بايت انجام داد‪ .‬مثالً دستور ‪:‬‬
‫‪ANL A, @R1‬‬
‫به آدرسي كه ‪ R1‬اشاره مي‌كند مي‌رود و محتوايش را به صورت بيت به بيت با انباره‬
‫‪ AND‬مي‌كند و حاصل را در انباره قرار‪ :‬مي‌دهد ولي اگرعالمت @ را نگذاريم‪ ،‬محتواي‬
‫خود ‪ R1‬را با محتواي انباره ‪ AND‬منطقي خواهد نمود‪ .‬در اين دستوارت نيز مثل دستورات‬
‫حسابي‌پرچمها تأثير مي‌پذيرند‪ .‬همچنين ‪ ،‬دستورالعمل‪:‬های چرخش(‪ )RL A,RR A‬انباره را‬
‫يک بيت به چپ يا راست جا به جا میکنند‪ .‬به همين طريق ‪ ،‬دستورالعمل‪ SWAP A :‬چهار‬
‫بيت باال و پايين را در انباره جا به جا میکند‪.‬‬

‫‪75‬‬
‫‪ 5-5-3‬دستورالعمل‪:‬هاي انتقال داده‬
‫اين دستورالعملها در دو محيط كار مي‌كنند ‪:‬‬

‫‪ RAM 5-5-3-1‬داخلی‬

‫اين دستورات داده‪ ,‬را در ‪ RAM‬داخلي جابجا مي‌كنند‪ :‬و در يك يا دو سيكل ماشين‬
‫اجرا مي‌شوند‪ .‬با اين دستورات‪ :‬مي‌توان هر دو مكان از ‪ RAM‬داخلی يا ‪ SFR‬ها را بدون‬
‫دخالت ‪ ACC‬جابجا كرد‪ .‬فرم کلی اين دستورالعملها عبارتست از ‪:‬‬
‫‪>MOV <destination> , <source‬‬
‫توجه داشته باشيد كه ‪SFR‬ها با آدرس دهي مستقيم قابل دسترسي‪ :‬هستند‪ .‬اجراي‬
‫دستورالعملی با اين ترکيب ‪:‬‬
‫‪XCH A,‬‬
‫‪><source‬‬
‫باعث میشود داده درون انباره ومحتو ای بايت آدرس داده شده تعويض‪ 1‬شوند‪ .‬نيز‬
‫يک دستورالعمل‪ :‬تعويض "رقم" به شکل ‪:‬‬
‫‪XCHD A,@R1‬‬
‫همانند دستورالعمل‪ :‬قبلی است‪ ,‬اما تنها بيتهای پايينی (‪ 4‬بيت پايين) تعويض)‬
‫مبادله( میشوند‪.‬‬

‫‪ RAM 5-5-3-2‬خارجی‬

‫اين دستورالعمل‌ها‪ :‬داده‌هاي ‪ RAM‬خارجي‪ :‬را با حافظة داخلي جابجا مي‌كنند و‬


‫آدرس‌دهي غير مستقيم را به كار مي‌برند‪ :‬يعني با آدرس موجود در ‪ R0‬يا ‪ R1‬و يا ‪ DPTR‬كار‬
‫مي‌كنند‪ .‬همة اين دستورات در دو سيكل ماشين اجرا ميشوند‪ :‬و همگی از انباره به عنوان‬
‫عملوند مبدا يا مقصد استفاده میکنند‪ .‬سيگنالهای خواندن و نوشتن که به ‪ RAM‬خارجی‪ :‬اعمال‬
‫تنها در طی اجرای يک دستورالعمل‪ MOVX :‬فعال میشوند‪:.‬‬
‫‪RW‬‬ ‫)‪,‬‬ ‫‪DR‬‬
‫‪,‬‬ ‫میشوند‪( :‬‬

‫‪Exchange‬‬ ‫‪·1‬‬

‫‪76‬‬
‫‪ -5-5-3‬جستجودر جدولها‬
‫دو دستورالعمل‪ :‬انتقال داده برای خواندن جداول جستجوی‪ :‬واقع در حافظه برنامه‬
‫وجود دارد‪ .‬نماد مورد استفاده برای "انتقال ثابت"‪ MOVC ,‬است که از شمارنده برنامه يا‬
‫اشارهگر داده به عنوان ثبات پايه و از انباره به عنوان فاصله نسبی استفاده میکند‪ .‬دستورالعمل‪:‬‬
‫‪:‬‬
‫‪MOVC A,‬‬
‫‪@A+DPTR‬‬
‫میتواند يک جدول با ‪ 256‬ورودی‪ :‬را از شمارنده صفر تا ‪ 255‬پشتيبانی کند‪ .‬نيز‬
‫دستورالعمل ‪:‬‬
‫‪MOVC A,‬‬
‫‪@A+PC‬‬
‫همان کار را میکند‪ ,‬با اين تفاوت که در اين مورد‪ :‬از شمارنده برنامه به عنوان آدرس‬
‫پايه استفاده شده و جدول از طريق يک زيرروال قابل دسترسی است‪.‬‬

‫‪ 5-5-4‬دستورالعملهاي بولي‬
‫يك پردازندة بولي كامل براي عمليات تك‌بيتي در ‪ 8051‬وجود‪ :‬دارد‪ RAM .‬داخلي‬
‫شامل ‪ 128‬امكان بيت آدرس پذير و فضاي‪ SFR :‬نيز ‪ 128‬امكان بيت قابل آدرس دهي ديگر‬
‫را پشتيباني‪ :‬مي‌كند‪ .‬دستوراتي مثل صفر كردن ‪ ،‬يك كردن ‪ ،‬آزما يش كردن‪ ،‬متمم كردن ‪،‬‬
‫‪ OR‬و ‪ AND‬كردن يك بيت مي‌توانند بيان شوند‪ .‬مثالً دستورالعمل ‪:‬‬

‫‪SETB P1.7‬‬
‫بيت ‪ 7‬درگاه ‪ 1‬را يك ميكند‪ .‬دقت کنيد يک پرچم داخلی به آسانی میتواند به يک پايه‬
‫درگاه منتقل شود ‪:‬‬
‫‪MOV C, FLAG‬‬
‫‪MOV P1.0, C‬‬
‫در اين مثال ‪ FLAG‬میتواند نام هر بيت قابل آدرس دهی در ‪ 128‬مکان پايين ‪RAM‬‬
‫داخلی و يا فضای ‪ SFR‬باشد‪ .‬نيز يک سری دستورالعملهايی وجود‪ :‬دارد که به دستورهای‪:‬‬

‫‪77‬‬
‫تست بيت معروفند‪ ,‬دستورالعملهايی از قبيل ‪ JB‬و ‪ JC‬که ابتدا بيت مورد‪ :‬نظر را تست كرده و‬
‫در صورت‪ 1 :‬بودن پرش میکنند و دستورالعملهايی از قبيل ‪ JNB‬و ‪ JNC‬در صورت ‪1‬‬
‫نبودن پرش میکنند‪.‬‬

‫‪ 5-5-5‬دستورالعملهای انشعاب برنامه(زير نويس ؟)‬


‫دستورالعملهاي فراخواني و بازگشت زير روالها يا انشعابهاي شرطي‪ :‬و غير شرطي‪:‬‬
‫جزء اين دسته قرار مي‌گيرند‪ :.‬سه نوع دستورالعم‪:‬ل پرش( ‪) JMP‬وجود‪ :‬دارد ‪ LJMP :‬و‬
‫‪ SJMP‬و ‪ AJMP‬كه به ترتيب در آدرس‌دهي‪ :‬طوالني ونسبي‪ :‬و مطلق استفاده مي‌شوند‪ .‬اگر‬
‫نوع دستورالعمل‪ :‬پرش که به رمز درمیآيد برای برنامه نويس اهميتی نداشته باشد‪ ,‬اسمبلر اينتل‬
‫(‪ )ASM51‬اجازه استفاده از نماد عمومی پرش معمولی را به برنامه نويس میدهد‪ .‬مثالً‬
‫دستور ‪:‬‬
‫‪JNB P1.2 , LOOP‬‬
‫بيت ‪ P1.2‬راچك مي‌كند و اگر بيت دوم درگاه شمارة يك برابر ‪ 1‬نباشد به ‪LOOP‬‬
‫پرش ميكند‪ .‬و اگر صفر باشد به خط بعد مي‌رود‪ :.‬يادآوری‪ :‬میشود دستورهای مراجعه به‬
‫زيرروالها و وقفهها نيز جزء دستورالعملهای انشعاب برنامه به حساب میآيند که در جای خود‬
‫شرح داده خواهند شد‪.‬‬

‫‪ 5-6‬تايمرها‬
‫يک تايمر از يک سری فليپ فالپ "تقسيم کننده بر دو" تشکيل شده است که يک‬
‫سيگنال ورودی‪ :‬را به عنوان منبع ساعت دريافت‪ :‬میکنند‪ .‬برای مثال يک تايمر ‪ 16‬بيتی از‬
‫‪ 0000H‬تا ‪ FFFFH‬میشمارد و پرچم سريز هنگام سريزکردن از ‪ FFFFH‬به ‪ ,0000H‬يک‬
‫میشود‪ .‬تايمرها تقريبا در همه کاربردهای کنترگرا‪ :‬بکار میروند‪ .‬در ‪ 8051‬دو تايمر ‪ 16‬بيتی‬
‫هر يک با چهار نوع عملکرد وجود‪ :‬دارد‪ .‬کاربردهای‪ :‬تايمرها عبارتند از ‪:‬‬
‫‪ -1‬زمانبندی فاصله‪:‬های زمانی‪ -2 :‬شمارش اتفاقات ‪ -3‬توليد نرخ ارسال بيت برای‬
‫درگاه سريال داخلی‪.‬‬
‫تايمرهای ‪ 8051‬با استفاده از شش ثبات کاربرد‪ :‬خاص قابل دستيابی هستند که در ادامه توضيح‬
‫داده میشوند‪ .‬البته دو ثبات ‪ TCON‬و ‪ TMOD‬به ترتيب مربوط به کنترل و حالت تايمر است‬

‫‪78‬‬
‫و چهار ثبات ديگر مربوط به بايتهای باال و پايين تايمرها (‪ TL0, TL1, TH0‬و ‪)TH1‬‬
‫هستند‪.‬‬

‫‪1‬‬
‫‪ 5-6-1‬ثبات حالت تايمر‬

‫ثبات ‪ TMOD‬شامل دو گروه چهار بيتی است که حالت کار تايمر ‪ 0‬و تايمر ‪ 1‬را‬
‫تعيين ميکنند‪ .‬شرح کامل وظايف‪ :‬بيتهای اين ثبات در جدول (‪ )1-5‬آمده است‪ .‬دو بيت‬
‫‪M‬مجموعا ً ‪ 4‬حالت را پشتيباني مي‌كند ‪:‬‬ ‫‪M‬‬
‫‪1‬‬ ‫‪0‬‬

‫حالت صفر ‪00 :‬‬


‫تايمر ‪ 13‬بيتي است و تايمرهاي‪ 0 :‬يا ‪ 1‬به صورت يك شمارندة ‪ 13‬بيتي كار مي‌كنند‬
‫به اين صورت‪ :‬كه بايت باالي تايمر (‪ )TH‬با پنج بيت پاييني از بايت پايين تايمر (‪ )TL‬به هم‬
‫پيوسته‌اند تا يك تايمر ‪ 13‬بيتي را بوجود آورند‪( :.‬شكل‪)4-3‬‬

‫حالت يك ‪01 :‬‬


‫اين حالت يك تايمر ‪ 16‬بيتي بوسيلة بايت‌هاي پايين و باال در تايمرهاي ‪ 0‬يا ‪ 1‬ايجاد‬
‫مي‌كند‪ .‬وقتي كه تايمر از ‪ FFFFH‬به ‪ 0000H‬مي‌رود‪ :‬يك سرزير اتفاق مي‌افتد و پرچم سر‬
‫ريز تايمر ‪ 1‬در ‪ TCON‬را يك مي‌كند‪( .‬شكل ‪4‬ـ‪)3‬‬
‫جدول ‪ 1-5‬خالصه ثبات ‪TMOD‬‬
‫ب‬ ‫نام‬ ‫شمارة‬ ‫شرح عملكرد‬
‫يت‬ ‫تايمر‬
‫‪7‬‬ ‫‪GAT‬‬ ‫‪1‬‬ ‫هنگام يك بودن‪ ،‬تايمر وقتي‪ :‬به راه مي‌افتد‪:‬‬
‫‪E‬‬ ‫‪ TNI‬باشد‪.‬‬
‫يك‬ ‫كه ‪1‬‬
‫‪6‬‬ ‫‪/‬‬
‫‪T‬‬ ‫‪1‬‬ ‫بيت انتخاب تايمر يا شمارنده‬
‫‪C‬‬
‫‪5‬‬ ‫‪M1‬‬ ‫‪1‬‬ ‫بيت حالت ‪1‬‬
‫‪4‬‬ ‫‪Mo‬‬ ‫‪1‬‬ ‫بيت حالت ‪2‬‬
‫‪3‬‬ ‫‪GAT‬‬ ‫‪0‬‬ ‫همان اعمال باال را در مورد‪ :‬تايمر‬
‫‪E‬‬ ‫صفرانجام ميدهند‪.‬‬
‫‪2‬‬ ‫‪T‬‬ ‫‪0‬‬ ‫همان اعمال باال را در مورد‪:‬‬
‫‪/C‬‬ ‫تايمر صفرانجام ميدهند‬
‫‪1‬‬ ‫‪M‬‬ ‫‪0‬‬
‫‪1‬‬

‫‪TMOD‬‬ ‫‪·1‬‬

‫‪79‬‬
‫‪0‬‬ ‫‪M‬‬ ‫‪0‬‬
‫‪O‬‬

‫حالت دو ‪10 :‬‬


‫حالت دو يك حالت بار شدن خودكاراست كه بايت پايين تايمر‪ ،‬به عنوان يك تايمر ‪8‬‬
‫بيتي عمل مي‌كند و بايت باالي تايمر‪ ،‬يك مقدار براي بارگيري مجدد در خود نگاه مي‌دارد‪ .‬و‬
‫‪ H‬مي‌رود سرريز مي‌كند و شمارش ادامه مي‌يابد‪.‬‬ ‫هنگامي كه شمارنده از ‪ FFH‬به ‪00‬‬
‫(شكل ‪4‬ـ‪)3‬‬
‫حالت سه ‪11 :‬‬
‫در اين حالت‪ ،‬تايمر ‪ 0‬به دو تايمر مجزاي ‪ 8‬بيتي تقسيم مي‌شود‪.‬‬
‫تايمرهاي ‪ TL0‬و ‪ TH0‬به عنوان دو تايمر مجزا عمل مي‌كنند‪ :‬و سرريز آنها به‬
‫ترتيب در ‪ TF0‬و ‪ TF1‬ريخته مي‌شوند‪.‬‬
‫تايمر ‪ 1‬در اين حالت متوقف است‪ .‬اما با سوئيچ كردن آن به يكي از حالتهاي ديگر‬
‫مي‌تواند شروع‪ :‬به كار كند‪ .‬تنها محدوديت تايمر ‪ 1‬در اين حالت اين است كه پرچم سرريز را‬
‫نمي‌تواند‪ :‬تأثير دهد‪ .‬يعني به نظر مي‌رسد ‪ 8051‬داراي يك تايمر سوم شده است‪( .‬شكل ‪4‬ـ‪)3‬‬

‫ساعت تايمر‬ ‫‪TLX‬‬ ‫‪THX‬‬


‫(‪ 5‬بيت)‬ ‫(‪ 8‬بيت)‬ ‫‪TFX‬‬
‫پرچم سرريز‬
‫الف) حالت ‪0‬‬

‫ساعت تايمر‬ ‫‪TLX‬‬ ‫‪TFX‬‬


‫‪THX‬‬
‫پرچم سرريز‬
‫ب) حالت ‪1‬‬

‫ساعت تايمر‬ ‫‪TLX‬‬ ‫‪TFX‬‬


‫پرچم سرريز‬

‫بار گيري مجدد‬


‫‪THX‬‬

‫پ) حالت ‪2‬‬

‫‪80‬‬
‫ساعت تايمر‬ ‫‪TL1‬‬ ‫‪TH1‬‬

‫پرچم‬
‫سرريز‬
‫ساعت تايمر‬ ‫‪TL0‬‬ ‫‪TF0‬‬

‫‪12‬‬ ‫‪TF1‬‬
‫‪TH0‬‬
‫‪Fosc‬‬

‫ت) حالت ‪3‬‬

‫شکل ‪ 3-5‬حالتهای تايمر(الف) حالت ‪( 0‬ب) حالت ‪( 1‬پ) حالت‪( 2‬ت) حالت ‪3‬‬

‫‪1‬‬
‫‪ 5-6-2‬ثبات كنترل تايمر‬

‫اين ثبات شامل بيت‌هاي كنترل و وضعيت تايمر ‪ 0‬و ‪ 1‬مي‌باشد‪ :‬هر يك از بيتها براي‬
‫مواردي قابل استفاده مي‌باشد‪ :.‬كاربرد هر بيت را در زير بيان ميكنيم‪.‬‬
‫‪ :TCON.1‬پرچم لبه وقفه خارجي ‪ 0‬و با نام ‪ TI0‬خوانده مي‌شود‪:.‬‬
‫‪ :TCON.2‬پرچم نوع وقفه خارجي‪ 1 :‬و با نام ‪ IT1‬خوانده مي‌شود‪.‬‬
‫‪ :TCON.3‬پرچم لبه وقفه خارجي ‪ ، 1‬اين بيت بعداً در قسمت وقفه‌ها بيان خواهد شد‬
‫و با نام ‪ IE1‬خوانده مي‌شود‪.‬‬
‫‪ :TCON.4‬با نام ‪ TR0‬خوانده مي‌شود‪ :‬و بيت كنترل روند‪ :‬شمارش در تايمر ‪ 0‬است‪.‬‬
‫‪ :TCON.5‬اين بيت با نام ‪ TF0‬خوانده مي‌شود‪ :‬و پرچم سر ريز تايمر ‪ 0‬مي‌باشد‪:‬‬
‫‪ :TCON.6‬اين بيت با نام ‪ TR1‬خوانده مي‌شود و بيت كنترل روند شمارش تايمر ‪1‬‬
‫است و به صورت نرم‌افزاري‪ :‬براي روشن يا خاموش كردن تايمر ‪ 1‬به كار مي‌رود‪:.‬‬
‫‪ :TCON.7‬اين بيت كه با نام‪ TF1‬خوانده مي‌شود پرچم سرريز تايمر يك است و اگر‬
‫در تايمر يك ‪ ،‬سرريز اتفاق بيفتد‪ ،‬اين بيت يك مي‌شود‪:.‬‬
‫با تعيين هر يك از اين بيتها مي‌توانيم تايمرهاي‪ :‬صفر يا يك را بنا به كار بردي كه مي‌خوانيم به‬
‫خدمت بگيريم‪:.‬‬

‫‪TCON‬‬ ‫‪·1‬‬

‫‪81‬‬
‫‪ 5-7‬شروع به كار‪ ،‬توقف و كنترل تايمرها‬
‫همانطور‪ :‬كه در شكل (‪ )4-5‬مشاهده مي‌شود‪ :‬دو امكان مختلف براي منابع ساعت‬
‫تايمرها وجود‪ :‬دارد‪ .‬راحت‌ترين راه براي شروع‪ :‬به كار و متوقف‪ :‬كردن تايمرها‪ :‬استفاده از‬
‫بيت كنترل روند شمارش (‪ )TRX‬در ‪ TCON‬مي‌باشد كه پس از ‪ reset‬شدن پاك مي‌شود‪:.‬‬
‫پس مشاهده مي‌كنيم‪ :‬كه تايمرها‪ :‬به صورت‪ :‬پيش‌فرض متوقف‪ :‬هستند مگر اينكه ما آنها را‬
‫راه‌اندازي كنيم‪.‬‬
‫روش ديگر مطابق شكل (‪ )4-5‬استفاده از بيت ‪ GATE‬در ‪ TMOD‬و ورودي‬
‫‪ INTX‬مي‌باشد‪ :‬و اگر ‪ ، GATE‬يك باشد به تايمر اجازه مي‌دهد كه با ‪ INTX‬كنترل شود‪.‬‬

‫شکل ‪ 4-5‬عملکرد حالت ‪ 1‬در‬


‫تايمر ‪1‬‬

‫در ادامه دو مثال بيان مي‌كنيم تا استفاده از تايمر بهتر بيان شود‪.‬‬

‫مثال ‪ 1-5‬مي‌خواهيم يك برنامه بنويسيم تا يك موج مربعي پيوستة ‪ KHZ 10‬در پاية‬
‫‪ P1.0‬توليد کند‪.‬‬
‫حل ‪ :‬چون مي‌خواهيم فركانس‪ KHZ 10 :‬باشد پس با ‪ usec 50‬مقدار صفر و ‪usec5‬‬
‫‪ 0‬مقدار يك در پاية ‪ P1.0‬توليد کند و با تكرار اين كار شكل موج مطلوب بدست آيد‪ .‬چون فقط‬
‫باال شمار است پس ‪ "50des‬ـ" را به تايمر مي‌دهيم و وقتي صفر شد دوباره از ‪ "50d‬ـ"‬
‫مي‌شماريم‪ :‬تاصفر پس از حالت دو تايمر صفر استفاده مي‌كنيم ‪:‬‬
‫‪ORG‬‬ ‫‪0100H‬‬
‫‪MOV‬‬ ‫‪TMOD, # 02H‬‬ ‫‪; mode 2‬‬
‫‪MOV‬‬ ‫)‪THO, #-50 (decimal‬‬ ‫‪; TH0 = 50‬‬

‫‪82‬‬
‫‪SETB TRO‬‬ ‫‪; timer0 is on‬‬
‫‪LOOP: JNB TFO, LOOP‬‬ ‫‪; waif while C=0‬‬
‫‪CLR‬‬ ‫‪TF0‬‬ ‫‪; Clear C of timer0‬‬
‫‪CPL‬‬ ‫‪Pl.0‬‬ ‫‪; Send to P1.0‬‬
‫‪SJMP‬‬ ‫‪LOOP‬‬ ‫‪; Go to Loop‬‬
‫‪END‬‬
‫در اين برنامه نكتة مهم دقت باالي برنامه است كه تا وقتي‪ :‬كه برنامه در حال چك‬
‫كردن ‪ TF0‬و يا فرستادن پالس به خروجي‪ :‬است‪ ،‬چون تايمر خودكار‪ :‬است شمارش مي‌‌كند‪.‬‬

‫مثال ‪ 2-5‬مي‌خواهيم يك موج مربعي‪ :‬پيوسته ‪ KHZ 10‬در ‪ P1.0‬توليد كنيم ‪:‬‬
‫حل ‪ :‬در اينجا چون فركانس‪ :‬زياد شده پس بايد از ‪ - 500d‬تا صفر بشماريم‪ :‬و چون‬
‫محدودة شمارش بيشتر از ‪ 256‬است پس از مد تايمر ‪ 16‬بيتي استفاده مي‌كنيم ‪:‬‬
‫‪ORG 0100H‬‬
‫‪MOV‬‬ ‫‪TMOD, # 01H‬‬
‫‪LOOP:‬‬ ‫‪MOV‬‬ ‫‪TH0, #0FEH‬‬ ‫‪; FE  TH0‬‬
‫‪MOV TL0,# 0CH‬‬ ‫‪; 0C  TL0‬‬
‫‪SETBTR0‬‬ ‫‪; Start counter‬‬
‫‪WAIT:‬‬ ‫‪JNB TF0, WAIT‬‬
‫‪CLR TF0‬‬
‫‪CPL P1.0‬‬ ‫‪; out to P1.0‬‬
‫‪SJMPloop‬‬
‫‪END‬‬
‫در اين برنامه چون مد يك تايمر صفر به كار رفته پس بايد مدام تايمر را مقدار دهي‬
‫كنيم و هر بار كه سر ريز اتفاق افتاد خروجي را برعكس كنيم‪ .‬اين برنامه دقت كمتري نسبت‬
‫به برنامة قبل دارد چون در زماني‪ :‬كه برنامه مشغول راه‌اندازي دوبارة تايمر است تايمر‬
‫‪1‬‬
‫نمي‌شمارد‪ :‬و بايد با تنظيم كردن زمان اين خطا را از بين برد‪.‬‬

‫‪ 5-8‬عمليات درگاه سريال‬


‫‪ 8051‬شامل يك درگاه سريال شامل یک ورودی و یک خروجی است كه در‬
‫حالت‌هاي مختلف و در محدودة وسيعي‪ :‬از فركانس‌ها‪ :‬كار مي‌كند‪ .‬وظيفه اصلي درگاه سريال‪،‬‬
‫انجام عمل تبديل موازي به سريال براي دادة خروجي وتبديل سريال به موازي براي دادة‬
‫ورودي‪ :‬است‪ .‬در اين قسمت به توصيف درگاه سريال مي‌پردازيم‪.‬‬

‫‪ · 1‬براي مطالعات بيشتر‪ :‬به مرجع [ ]رجوع نما یید ‪.‬‬

‫‪83‬‬
‫دستيابي سخت‌افزاري به درگاه سريال از طريق پايه‌هاي ‪ ‌TXD‬و ‪ RXD‬است كه‬
‫قبالً بيان شدند‪ TXD .‬براي ارسال دادة‌ سري و ‪ RXD‬براي دريافت دادة‌ سريال به كار‬
‫مي‌روند‪ :.‬دو ثبات كاربرد خاص ‪ SBUF‬و ‪ SCON‬امكان دستيابي‪ :‬نرم‌افزاري را به درگاه‬
‫سريال فراهم مي‌سازند‪ SBUF .‬يك بافر ‪ 8‬بيتي است و درآدرس ‪ 99H‬قرار‪ :‬دارد‪ .‬نوشتن در‬
‫‪ SBUF‬داده‌اي را كه بايد ارسال شود‪ ،‬بار مي‌كند و خواندن ‪ SBUF‬دادة دريافتي را در‬
‫دسترس قرار مي‌دهد‪.‬‬

‫‪ 5-8-1‬حالت ‪1‬‬
‫در اين حالت ‪ SM0=1‬و ‪ SM1=0‬است و به اين حالت ‪ UART‬هشت بيتي‬
‫مي‌گويند‪ :.‬داده به صورت‪ :‬آسنكرون (غير همزمان) بر روي‪ :‬خروجي قرار‪ :‬مي‌گيرد و نرخ‬
‫ارسال نيز متغير است‪.‬‬
‫ارسال آسنكرون به اين ترتيب است كه ابتدا يك بيت آغاز (هميشه ‪ ,) 0‬هشت بيت داده‬
‫(اول ‪ ) LSB‬و يك بيت پايان (هميشه ‪ )1‬با م ّدت زمان یک‪ ,‬یک و نیم یا دو بیت فرستاده‬
‫‌مي‌شود‪ .‬لذا مجموعا ً ‪ 10‬بيت سريال فرستاده مي‌شود‪ :‬و دريافت‪ :‬نيز به همين طريق‪ :‬صورت‬
‫مي‌‌گيرد‪ .‬يادآوری می شود برای عمليات دريافت‪ ,‬بيت پايان به داخل ‪ RB8‬در ‪ SCON‬منتقل‬
‫می شود‪ .‬بيت آغاز در اين حالت هميشه صفر و بيت پايان هميشه يك است‪ .‬اعمال پالس‌هاي‬
‫ساعت با تقسيم فركانس‪ :‬تايمر ‪ 16‬و يا ‪ 32‬بدست مي‌آيد و فركانس تايمر متغير است‪.‬‬
‫منابع ساعت حالت‌هاي مختلف درشكل (‪ )5-5‬آمده است‪.‬‬

‫‪84‬‬
‫شکل ‪ 5-5‬منابع ساعت درگاه سريال (الف) حالت ‪( 0‬ب)حالت‪( 2‬پ) حالت‬
‫‪1‬و‪3‬‬

‫‪ 5-8-2‬حالت ‪2‬‬
‫در اين حالت ‪ SM1=1‬و ‪ SM0=0‬است و با نام ‪ UART 9‬بيتي با نرخ ارسال ثابت‬
‫‪1‬‬ ‫‪1‬‬
‫‪46‬ي‌باشد‪ .‬در اين نوع ارسال‪ ،‬يك بيت به عنوان بيت‬
‫م‬ ‫يا‬
‫‪23‬‬
‫خوانده مي‌شود‪ :.‬نرخ ارسال‬

‫آغاز و دو بيت آخر به عنوان بيت پايان تلقي مي‌شوند‪ .‬البته بيت دهم قابل برنامه‌ريزي است كه‬
‫توازن فرد در آن گذاشته‌شود تا براي تست كردن خطا در ‪ 8‬بيت داده به كار رود‪ .‬مجموعا ً‬
‫يازده بيت سريال فرستاده يا دريافت‪ :‬مي‌شود‪.‬‬

‫‪ 5-8-3‬حالت ‪3‬‬
‫در اين حالت ‪ SM1=1‬و ‪ SM0=1‬و به اين حالت ‪ UART 9‬بيتي با نرخ ارسال‬
‫متغير مي‌گويند‪ :‬و مانند حالت قبل است با اين تفاوت كه نرخ ارسال‪ ،‬قابل برنامه‌ريزي است و‬
‫توسط تايمر فراهم‪ :‬مي‌شود ‪ .‬اين حالت نيز در شكل (‪ )5-5‬آمده است‪ .‬با استفاده از تايمرها‬

‫‪85‬‬
‫مي‌‌توانيم‪ :‬در حالت‌هاي ‪ 1‬و ‪ 3‬فركانس‪ :‬متغيير ايجاد كنيم‪ .‬در صورتي‪ :‬كه در حالتهاي ‪ 0‬و ‪، 2‬‬
‫فركانس ورودي ثابت است‪.‬‬
‫مثال ‪ 3-5‬مقدار دهی اوليه درگاه سريال برای بادريت ‪ 2400‬در مد يک‪.‬‬
‫حل ‪:‬‬
‫‪ORG‬‬ ‫‪8100H‬‬
‫‪INIT: MOV SCON,#52H‬‬
‫‪MOV TMOD,#20H‬‬
‫‪MOV TH1,#-13‬‬
‫‪SETB‬‬
‫‪END‬‬
‫دو مثال بعد‪ ,‬از متداولترين زيرروال‪ :‬ها در سيستمهای ميکروکامپيوتری‪ :‬شامل پايانه‬
‫‪ , RS232‬يعنی خروج کاراکتر‪ :‬و ورود‪ :‬کاراکتر می باشند‪.‬‬

‫مثال ‪ 4-5‬زيرروال‪ :‬خروج کاراکتربرای ارسال کد‪ ASCII‬هفت بيتی واقع در انباره‬
‫از طريق‪ :‬درگاه سريال ‪ 8051‬با توازن فرد به عنوان هشتمين بيت‪ .‬هنگام بازگشت از‬
‫زيرروال‪ :,‬انباره بايد حاوی مقدار قبل از فراخوانی‪ :‬زيرروال‪ :‬باشد‪.‬‬
‫حل‪ORG 8100H :‬‬
‫‪OUTCHR: MOV C,P‬‬
‫‪CPL C‬‬
‫‪MOV ACC.7,C‬‬
‫‪AGAIN: JNB TI,AGAIN‬‬
‫‪CLR TI‬‬
‫‪MOV SBUF,A‬‬
‫‪CLR ACC.7‬‬
‫‪RET‬‬
‫‪END‬‬
‫مثال ‪ 5-5‬زيرروال‪ :‬ورودکاراکتر‪ :‬که کد‪ ASCII‬هفت بيتی را به انباره از طريق‬
‫درگاه سريال ‪ 8051‬با توازن فرد( به عنوان هشتمين بيت) برگرداند‪ :.‬هنگام بازگشت از‬
‫زيرروال‪ :,‬انباره بايد حاوی مقدار قبل از فراخوانی‪ :‬زيرروال‪ :‬باشد‪.‬‬
‫حل ‪:‬‬
‫‪ORG 8100H‬‬
‫‪$,INCHR: JNB RI‬‬
‫‪CLR RI‬‬
‫‪MOV A,SBUF‬‬
‫‪MOV C,P‬‬
‫‪CLR ACC.7‬‬
‫‪RET‬‬

‫‪86‬‬
‫‪END‬‬
‫‪ 5-8‬وقفه ها‬
‫وقفه حالتی است که باعث متوقف‪ :‬شدن يک برنامه می شود‪ ,‬که خود توسط يک‬
‫برنامه ديگر فعال می شود‪ .‬وقتي ‪ CPU‬در حال انجام كاري است و يك وقفه وارد مي‌شود‪:‬‬
‫دستور مورد‪ :‬اجرا متوقف‌مي‌شود‪ :‬و ‪ CPU‬به انجام وقفه مي‌پردازد‪ :‬و پس از پايان وقفه به‬
‫اجراي برنامه قبلي بر مي‌گردد‪.‬‬
‫برنامه‌اي كه مربوط‪ :‬به اجرای وقفه مي‌‌شود يك روال سرويس وقفه (‪ )ISR‬ناميده‬
‫مي‌شود‪ .‬مثالی از وقفه‪ ,‬ورود‪ :‬اطالعات توسط صفحه کليد کامپيوتر‪ :‬است‪ .‬نکته مهم در اين‬
‫مثال آن است که ورودی توسط‪ :‬شخص بطور‪ :‬غير همزمان وارد می شود‪ ,‬يعنی زمان وقوع‪ :‬آن‬
‫توسط نرم افزار‪ :‬از قبل قابل پيش بينی و کنترل نيست و در واقع وقفه يعنی همين‪.‬‬

‫‪ 5-8-1‬سازمان وقفه‬
‫در ‪ 8051‬پنج منبع وقفه وجود‪ :‬دارد‪ ،‬دو وقفه تايمر‪ ,‬دو وقفه خارجي‪ :‬و يك وقفه درگاه‬
‫سريال‪ .‬وقفه‌ها توالي اجراي ثابت دارند ولي تقدم آنها قابل برنامه‌ريزي‪ :‬مي‌باشد‪.‬‬

‫‪ 5-8-2‬فعال و غير فعال کردن وقفه ها‬


‫هر يک از منابع وقفه ها بطور مجزا‪ ,‬از طريق‪ :‬بيت آدرس پذير مخصوصی‪ ,‬توسط‪:‬‬
‫ثبات ‪( IE‬فعال کننده وقفه) و آدرس ‪ 0A8H‬فعال يا غير فعال می شوند‪ :.‬ثبات ‪ IE‬در آدرس‬
‫‪ 0A8H‬قراردارد و فعال يا غير فعال كننده وقفه‌ها مي‌باشد‪ :.‬شرح بيتهای اين ثبات به قرار‪:‬‬
‫زيراست‪:‬‬
‫‪ : IE.0‬با نام ‪ EX0‬خوانده مي‌‌شود‪ .‬فعال كردن وقفه صفر خارجي با اين بيت انجام‬
‫ميشود‪.‬‬
‫‪ : IE.1‬با نام ‪ ET0‬خوانده مي‌شود‪ :‬و براي فعال كردن وقفه تايمر ‪ 0‬به كار مي‌رود‪.‬‬
‫‪ : IE.2‬با نام ‪ EX1‬و فعال‌كننده وقفه ‪ 1‬خارجي‪ :‬است‪.‬‬
‫‪ : IE.3‬با نام ‪ ET1‬و فعال‌‌كننده وقفه تايمر ‪ 1‬است‪.‬‬
‫‪ : IE.4‬با نام ‪ ES‬و فعال‌كنندة وقفه درگاه سريال است‪.‬‬
‫‪ IE.5‬و ‪ :IE.6‬در ‪ 8051‬اين بيت‌ها نامعين‌اند‪.‬‬

‫‪87‬‬
‫‪ :IE.7‬که با نام ‪ EA‬خوانده مي‌شود‪ :‬فعال يا غير فعال‌كنندة كلي وقفه‌ها است‪ .‬شمايی‬
‫از اين عملکرد در شکل (‪ )6-5‬نشان داده شده است‪.‬‬

‫‪ 5-8-3‬تقدم وقفه ها‬


‫هر منبع وقفه در يكي از دو سطح وقفه از طريق‪ :‬بيت آدرس‌پذير مخصوصي در ثبات‬
‫‪ IP‬در آدرس ‪ 0B8H‬برنامه‌ريزي‪ :‬مي‌شود‪ .‬سطح منطقی تقدم هر وقفه‌اي كه يك شود تقدم‬
‫باالتری پيدا می کند مي‌شود و اگر دو وقفه همزمان با يك تقدم قرار بگيرند‪ ،‬يك ترتيب اجراي‬
‫ثابت مطابق‪ :‬ترتيب زير وجود دارد‪ .‬وقفه‌هاي با تقدم برابر در ‪ IP‬به اين ترتيب اجرا خواهند‬
‫شد ‪:‬‬

‫شکل (‪ )6-5‬نمايی از ساختار‪ :‬وقفه در ‪8051‬‬

‫‪ : I.P.0‬تقدم وقفه ‪ 0‬خارجي‪ :‬و هنگامي كه سيستم ‪ reset‬شده باشد اين وقفه بيشترين‬
‫تقدم را دارد ‪)PX0( .‬‬
‫‪ : IP.1‬تقدم وقفه تايمر صفر (‪. )PT0‬‬
‫‪ : IP.2‬تقدم وقفه ‪ 1‬خارجي‪. )PX1(:‬‬
‫‪ : IP.3‬تقدم وقفه تايمر ‪. )PT1( 1‬‬

‫‪88‬‬
‫‪ : IP.4‬تقدم وقفه درگاه سريال (‪. )PS‬‬
‫بقية بيتها در ‪ IP‬تعريف‪ :‬نشده‌اند‪.‬‬

‫‪ 5-8-4‬اجراي وقفه‌ها‬
‫هنگام وقوع يك وقفه‪ ,‬عملیا ّ ت زير اجرا مي‌شود‪: :‬‬
‫دستورالعمل‪ :‬فعلي برنامه‌ کامل مي‌شود‪.‬‬ ‫‪‬‬
‫‪ PC‬دربا ال ی پشته قرارداده مي‌شود‪:.‬‬ ‫‪‬‬
‫وقفه جاري اجرا مي‌شود‪.‬‬ ‫‪‬‬
‫وقفه‌هاي همسطح با اين وقفه متوقف مي‌شوند‪.‬‬ ‫‪‬‬
‫‪ PC‬با آدرس شروع‪ ، ISR :‬بار مي‌شود‪:.‬‬ ‫‪‬‬
‫‪ ISR‬اجرا مي‌شود‪:.‬‬ ‫‪‬‬
‫و سرانجام‪ :‬با دستوراعمل‪( RETI :‬برگشت از وقفه) اجرای وقفه پايان‬ ‫‪‬‬
‫می پذيرد‪:.‬‬

‫‪ 5-8-5‬بيتهاي پرچم وقفه‌ها‬


‫اين بيتها كه در بخش‌هاي قبلي بيان شدند در ‪ TCON‬و ‪ SCON‬قرار‪ :‬دارند و بوسيلة‬
‫مقدار دادن به اين بيتها مي‌توان عملکرد وقفه‌ها را تنظيم‪ :‬كرد‪ ,‬مثالً اگر بخواهيم‪ :‬وقفه تايمر‬
‫صفر را فعال كنيم‪ ،‬بايد ‪( TF1‬بيت هشتم در ‪ )TCON‬را ‪ Set‬كنيم‪.‬‬

‫‪ 5-8-6‬بردارهاي وقفه‬
‫هنگامي كه يك وقفه مورد‪ :‬پذيرش قرار مي‌گيرد‪ ،‬عدد بار شده در ‪ PC‬بردار‪ :‬وقفه‬
‫ناميده مي‌شود‪ :‬كه در واقع آدرس شروع‪ ISR :‬براي منبع وقفه است‪ .‬هر وقفه يك آدرس‬
‫اختصاصي‪ :‬دارد و موقعي‪ :‬كه فعال شود ‪ CPU‬به آدرس مربوط به آن وقفه مي‌رود و وقفه را‬
‫اجرا مي‌كند ‪ .‬اين آدرس‌ها به اين ترتيب هستند ‪:‬‬
‫‪0000H‬‬ ‫‪ Reset‬سيستم‬
‫در حقيقت ‪ reset‬به عنوان با اولويت ترين وقفه مي‌باشد‪. :‬‬
‫‪0003H‬‬ ‫وقفه صفر خارجي ‪:‬‬

‫‪89‬‬
‫‪0003H‬‬ ‫وقفه تايمر صفر ‪:‬‬
‫‪0013H‬‬ ‫وقفه يك خارجي ‪:‬‬
‫‪0013H‬‬ ‫وقفه تايمر يك ‪:‬‬
‫‪0023H‬‬ ‫وقفه درگاه سريال ‪:‬‬

‫براي هر وقفه ‪ 8‬بايت در نظر گرفته شده است و چنانچه برنامة ‪ ISR‬از ‪ 8‬بايت‬
‫بيشتر باشد در اين آدرسها به يك آدرس ديگر در حافظه کد ‪JMP‬مي‌كنيم تا هم جا به اندازة‌‬
‫كافي براي ‪ ISR‬باشد و هم اينکه نقطه ورود آن برای وقفه بعدی تغيير کند‪ .‬مثالً پس از ‪reset‬‬
‫كردن سيستم‪ :‬بايد برنامة اصلي اجرا شود و ممكن است برنامة‌ اصلي بيشتر از ‪ 2‬بايت باشد‪ ,‬لذا‬
‫در آدرس ‪ 0000H‬به آدرس ديگر پرش مي‌كنيم‪.:‬‬

‫مثال ‪ 6-5‬مي‌خواهيم با استفاده از وقفه‌ها به طور‪ :‬همزمان دو موج مربعي ‪ KHZ7‬و‬


‫‪ HZ500‬توليد كنيم‪.‬‬
‫حل ‪ :‬موج مربعي‪ 7KHZ :‬را در پاية ‪ P1.7‬و موج ‪ 500KHZ‬را در ‪ P1.6‬توليد‬
‫مي‌كنيم‪ .‬براي پالس ‪ 7KHZ‬خروجي‪ :‬بايد ‪ 71ms‬صفر و ‪ 71ms‬يك باشد و به همين ترتيب‬
‫براي پالس ‪ 500KHZ‬خروجي بايد ‪ 1ms‬صفرو ‪ 1ms‬يك باشد‪ .‬توليد موج ‪ 7KHZ‬با‬
‫وقفه تايمر صفر در حالت ‪ 2‬و توليد موج ‪ 500KHZ‬را با وقفه تايمر ‪ 1‬و در حالت يك توليد‬
‫مي‌كنيم‪ .‬اين برنامه به صورت زير مي‌باشد‪: :‬‬
‫‪ORG 0000H‬‬
‫‪LJMP MAIN‬‬

‫‪ORG 0003H‬‬ ‫‪; Timer0 Vector address‬‬


‫‪LJMP T0ISR‬‬

‫‪ORG 001BH‬‬ ‫‪; Timer1Vector address‬‬


‫‪LJMP T1ISR‬‬

‫‪ORG 0030H‬‬
‫‪MAIN :‬‬ ‫‪MOV IMOD, #12H‬‬ ‫‪; timer 1 = mode 1‬‬
‫‪MOV TH0 , #-71d‬‬ ‫‪; timer 0 =mode2‬‬
‫‪SETB TR0‬‬ ‫‪; -71desimal  TH0‬‬
‫‪SETB TF1‬‬
‫‪MOV IE , #8AH‬‬ ‫‪; Wait to interrupt‬‬
‫‪SJMP $‬‬

‫‪T0ISR:‬‬ ‫‪CPL‬‬ ‫‪P1.7‬‬

‫‪90‬‬
‫‪RET1‬‬
‫‪T1ISR :‬‬ ‫‪CLR‬‬ ‫‪TR1‬‬
‫‪MOV‬‬ ‫‪TH1, # 0FCH‬‬ ‫‪‬‬
‫‪; -1000d TH1, TLL‬‬
‫‪MOV TL1, # 18h‬‬
‫‪SETB TR1‬‬
‫‪CPL P1.6‬‬
‫‪RETI‬‬

‫مثال ‪ 7-5‬با استفاده از وقفه ها برنامه ای بنويسيد که بطور پيوسته مجموعه کدهای‬
‫‪ ASCII‬را (بدون کدهای کنترلی) به پايانه درگاه سريال ارسال کند‪(.‬وقفه درگاه سريال)‬

‫حل‪:‬‬
‫‪ORG‬‬ ‫‪0‬‬
‫‪LJMP‬‬ ‫‪MAIN‬‬
‫‪ORG‬‬ ‫‪0023H‬‬
‫‪LJMP‬‬ ‫‪SPISR‬‬
‫‪ORG‬‬ ‫‪0030H‬‬
‫‪MAIN: MOV TMOD,#20H‬‬
‫‪MOV TH1,#-26‬‬
‫‪SETB TR1‬‬
‫‪MOV SCON,#42H‬‬
‫‪MOV A,#20H‬‬
‫‪MOV IE,#90H‬‬
‫‪SJMP $‬‬
‫‪SPISR:‬‬ ‫‪CJNE A,#7FH,SKIP‬‬
‫‪MOV A,#20H‬‬
‫‪SKIP:‬‬ ‫‪MOV SBUF,A‬‬
‫‪INC‬‬ ‫‪A‬‬
‫‪CLR‬‬ ‫‪TI‬‬
‫‪RETI‬‬
‫‪END‬‬

‫مثال ‪ : 8-5‬با استفاده از وقفه ها‪ ،‬يک کنترل کننده کوره با ‪ 8051‬طراحی کنيد که دما‬
‫را در ‪ 20±1‬درجه سانتی گراد نگه دارد‪( .‬وقفه خارجی)‬
‫حل‪ :‬در حاليکه سيم پيچ درگير‪ :‬است(کوره روشن است) ‪p1.7 = 1‬‬
‫در حاليکه سيم پيچ آزاد است (کوره خاموش است) ‪p1.7 = 0‬‬

‫‪91‬‬
‫و‬
TOH :‫متصل شده و بترتيب سيگنالهای‬
TNI ‫و‬
1TNI 0 ‫حس کننده ها به‬
،‫ باشد‬T>21°C ‫اگر‬ :‫ مقابل ايجاد می کنند‬:‫صورت‬DLOC
‫را به‬
TOH 0

DLOC 0 ،‫ باشد‬T<19°C ‫اگر‬


:‫ زير است‬:‫متن برنامه بصورت‬
ORG 0
LJMP MAIN
EX0ISR: CLR P1.7
RETI
ORG 0013H
EX1ISR: SETB P1.7
RETI
ORG 30H
MAIN: MOV IE,#85H
SETB IT0
SETB IT1
SETB P1.7
JB P3.2,SKIP
CLR P1.7
SKIP: SJMP $

92
‫فصل ششم‬

‫ميکروکنترلر‬
‫های ‪AVR‬‬

‫‪ 6-1‬مقدمه‬

‫با اعالم ساخت ميكروكنترلر‪ 8051 :‬در سال ‪ 1981‬توسط شركت اينتل‪ ،‬يعني اولين‬
‫عضو خانواده ميكروكنترلرهاي‪ ، MCS-48 TM :‬اين قطعات پيشرفت چشمگيري‪ :‬كردند‪ .‬اما‬
‫ميكروكنترلهايي‪ :‬نظير خانواده ‪ 8051‬كه بيشترين استفاده را در دنيا داشته اند‪ ،‬داراي‬
‫كمبودهايي‪ :‬بودند كه از آن جمله مي توان به عدم وجود‪ ,Watchdog Timer :‬نداشتن رابط‬
‫هايي نظري‪( TWI :‬زیر نویس )و عدم تنوع زياد امكانات اين خانواده از ميكروكنترلرهاي‬
‫اشاره نمود‪.‬‬
‫ميكروكنترلرهاي ‪ AVR‬عالوه بر اينكه تمامي اين امكانات ميكروكنترلرهاي‪ :‬قبلي را‬
‫دارا هستند‪ ،‬مشكالت آنها را رفع كرده و امكانات جانبي را نيز فراهم‪ :‬نموده اند‪ .‬اين‬
‫ميكروكنترلرهاي ‪ 8‬بيتي كه محصول شركت ‪ ATMEL‬مي باشند به علت وجود كامپايلرها‪:‬‬
‫قوي به زبان (‪ HLL )High Level Languages‬مورد استقبال و استفاده زيادي‪ :‬قرار گرفته‬
‫اند‪.‬‬
‫‪ ATMEL‬ميكروكنترلرهاي ‪ AVR‬خود را به سه دسته تقسيم كرد‪:‬‬
‫‪Classis AVR .1‬‬
‫‪Tiny AVR .2‬‬
‫‪Mega AVR .3‬‬
‫هر سه دسته از اين ميكروكنترلرها داراي دستورالعمل ها و شكل حافظه يكساني‪:‬‬
‫هستند‪ .‬تنها فرق‪ :‬آنها در امكانات موجود‪ :‬در آنهاست‪ .‬دسته ‪ Tiny AVR‬داراي كمترين‬
‫امكانات و داراي كمترين تعداد پايه‪ 1‬اند‪ .‬در حالي كه ‪ Mega AVR‬دقيقا برعكس آنهاست و‬

‫‪Pin‬‬ ‫‪·1‬‬

‫‪93‬‬
‫دسته ‪ Classis AVR‬نيز حالت مابين اين دو دسته يعني ‪ Tiny AVR‬و ‪Mega AVR‬‬
‫است‪.‬‬
‫يكي ديگر از محاسن ‪ AVR‬اين است كه دستور‪ :‬العمل هاي آن به صورت خوبي‬
‫سازگار با كامپايلر ‪ C‬است‪.‬‬

‫‪ 6-2‬پايه ها و سيگنال ها‬

‫در ميكروكنترلرهاي‪ :‬خانواده ‪ ،AVR‬برخي از سيگنال هاي داراي پايه اختصاصي‪:‬‬


‫مي باشند و برخي نيز از پايه مختص به سيگنال هاي ديگر‪ ،‬به طور مشترك‪ :‬استفاده مي‌كنند‬
‫که عبارتند از‪:‬‬
‫‪ VCC‬و ‪ :GND‬پايه هاي مثبت و منفي تغذيه بخش هاي ديجيتال‪.‬‬
‫‪ AVCC‬و ‪ :AGND‬پايه هاي مثبت و منفي تغذيه بخش آنالوگ‪.‬‬
‫‪( RESET‬ورودي)‪ :‬سيگنال ريست خارجي‪ ،‬يك پالس با طول حداقل ‪ 50‬نانو ثانيه در‬
‫اين ورودي‪ ،‬حتي در صورت‪ :‬برقرار‪ :‬نبودن كالك سيستم باعث ريست شدن ميكروكنترلر‬
‫خواهد شد‪.‬‬
‫‪( XTAL 1‬ورودي) و ‪( XTAL 2‬خروجي)‪ :‬اين دو سيگنال كه ورودي و خروجي‬
‫نوسان ساز داخلي (نوسان ساز اصلي) مي باشند‪ ،‬جهت اتصال قطعات مربوطه به كار مي‬
‫روند‪.‬‬
‫‪( CLKO‬خروجي)‪ :‬اين سيگنال جهت تغذيه كالك مدارهاي‪ :‬خارجي استفاده مي‌شود‪:.‬‬
‫‪( TOSCI‬ورودي) و ‪( TOSC 2‬خروجي)‪ :‬اين دو سيگنال كه ورودي‪ :‬و خروجي‪:‬‬
‫يك نوسان ساز داخلي (مربوط‪ :‬به يكي از شمارنده ‪ /‬تايمرها) مي باشند‪ ،‬جهت اتصال كريستال‬
‫فركانس پايين به كار مي روند‪.‬‬
‫‪( AD7…AD0‬ورودي‪ / :‬خروجي) و ‪( A15….A8‬خروجي)‪ :‬اين سيگنال ها جهت‬
‫آدرس دهي (‪ )A15…A0‬حافظه خارجي و انتقال داده (‪ )D7…D0‬بين ميكروكنترلر‪ :‬و‬
‫حافظه خارجي به كار مي روند‪ :.‬البته اكثر قطعات خانواده ‪ AVR‬فاقد امكان آدرس دهي‬
‫حافظه خارجي ميباشند‪:.‬‬
‫‪( ALE‬خروجي)‪ :‬اين پايه جهت كنترل رجيستر‪ :‬نگه دارنده بيت هاي پايين آدرس به‬
‫كار مي رود‪.‬‬
‫(خروجي)‪ :‬اين سيگنال ها جهت كنترل حافظه خارجي در هنگام‬
‫‪WR‬‬ ‫‪RD‬و‬
‫خواندن و نوشتن به كار مي روند‪.‬‬

‫‪94‬‬
‫‪( AREF‬معموالً ورودي)‪ :‬ولتاژ مرجع خارجي‪ :‬بخش مبدل آنالوگ به ديجيتال‪.‬‬
‫‪( ADCn‬ورودي)‪ :‬اين سيگنال ها‪ ،‬كانال هاي ورودي‪ :‬مدار مبدل آنالوگ به ديجيتال‬
‫مي باشند‪.‬‬
‫‪( ADN0‬ورودي‪ :‬مثبت) و ‪( AIN 1‬ورودي‪ :‬منفي)‪ :‬اين دو سيگنال‪ ،‬ورودي‪ :‬مدار‬
‫مقايسه‪ -‬كننده آنالوگ مي باشند‪.‬‬
‫‪ PC0…PC7, PB0…PB7, PA0…PA7‬و ‪( ..‬پايه ورودي‪ :‬و خروجي)‪ :‬هر يك‬
‫از اين پايه ها مربوط‪ :‬به يك بيت از يك پورت مي باشد‪ .‬حرف اول (‪ )P‬نشانه پورت‪ ،‬حرف‬
‫دوم نشان دهنده نام پورت و حرف (عدد) سوم نشان دهنده شماره بيت در پورت مي باشد‪.‬‬
‫‪( INTn‬ورودي)‪ :‬سيگنال هاي كالك خارجي مدار شمارنده ‪ /‬تايمر شماره ‪.n‬‬
‫‪( Tn‬ورودي)‪ :‬سيگنال هاي كالك خارجي‪ :‬مدار شمارنده ‪ /‬تايمر شماره ‪.n‬‬
‫‪ OCnB, OCnA‬و ‪( OCnC‬خروجي)‪ :‬اين سيگنال ها جهت ارايه شكل موج توليد‬
‫شده در شمارنده‪ /‬تايمر ‪ n‬به كار مي روند‪:.‬‬
‫‪( ICPn‬ورودي)‪ :‬اين سيگنال جهت نمونه برداري‪ :‬از محتواي‪ :‬شمارنده موجود در‬
‫شمارنده تايمر شماره ‪ n‬به كار مي رود‪.‬‬
‫‪( RXD‬ورودي) و ‪( TXD‬خروجي)‪ :‬سيگنال دريافت و ارسال در مدارهاي‪UART :‬‬
‫و ‪.USART‬‬
‫‪( XCK‬ورودي‪ :/‬خروجي)‪ :‬سيگنال كالك هم زماني در مدار ‪ . USART‬اين سيگنال‬
‫تنها در حالت انتقال سنكرون داراي كاربرد مي باشد‪.‬‬
‫‪ MOSi, SCK‬و ‪( MISO‬ورودي‪ /‬خروجي)‪ :‬اين سيگنال ها جهت ارسال‪ ،‬دريافت‬
‫و هم زماني در ‪ SPI‬به كار مي روند‪:.‬‬
‫‪(SS‬ورودي)‪ :‬اين سيگنال كه تنها در حالت ‪ Slave SPI‬تعريف مي شود‪ ،‬جهت‬
‫انتخاب ‪ Slave‬مورد‪ :‬نظر به كار مي رود‪.‬‬
‫‪( TCK‬ورودي)‪( TMS ،‬ورودي)‪( TDI ،‬ورودي) و ‪( TDO‬خروجي)‪ :‬اين‬
‫سيگنال‌ها جهت همزماني‪ ،‬انتخاب حالت‪ ،‬ورود‪ :‬و خروج داده در ‪ JTAG‬به كار مي روند‪.‬‬
‫‪( PCINTn‬ورودي)‪ :‬اين سيگنال ها براي ايجاد وقفه (بر اثر تغيير حالت سيگنال) در‬
‫ميكروكنترلر‪ :‬به كار مي روند‪.‬‬
‫‪( SDA, SCL‬ورودي‪ /‬خروجي)‪ :‬سيگنال هاي كالك و داده در ‪ I2C‬يا ‪.TWI‬‬

‫‪95‬‬
‫‪( dw‬ورودي ‪ /‬خروجي)‪ :‬اين سيگنال پل ارتباطي‪ :‬نرم افزارهاي‪ :‬ديباگ با سيستم‬
‫‪ debug WIRE‬مي باشد‪ .‬اين ارتباط با شكل سريال دو طرفه (و از طريق يك سيگنال‬
‫مشترك) مي باشد‪.‬‬

‫‪ 6-3‬امكانات موجود در ‪AVR‬‬

‫بر اساس تعريف كلي يك سيستم‪ :‬پردازشي‪ ،‬امكانات موجود در ‪ AVR‬را مي‌توان به‬
‫چهار گروه زير تقسيم كرد‪:‬‬
‫‪CPU ‬‬
‫‪ ‬حافظه ها‬
‫‪ ‬مدارات راه اندازي و كنترل‬
‫‪ ‬واحدهاي ‪( I/O‬ورودي ‪ /‬خروجي)‬

‫‪CPU 6-3-1‬‬

‫هدف اصلي در هنگام طراحي ‪ CPU‬موجود در ‪ ،AVR‬پشتيباني مناسب از زبان‌هاي‬


‫سطح باال در كنار حفظ سادگي و قدرت بوده است‪ .‬براي به دست آوردن حداكثر توان‬
‫پردازشي‪ ،‬در ‪ AVR‬از يك ‪ CPU‬اختصاصي‪ :‬نوع ‪ RISC‬با ساختار‪ Harvard‬استفاده شده‬
‫است‪.‬‬

‫‪ 6-3-1-1‬فضاهاي آدرس‬
‫در ساختار‪ Harvard :‬براي سرعت بخشيدن به اجراي برنامه‪ ،‬كد برنامه و داده‌هاي‬
‫مورد پردازش‪ :‬در دو حافظه فيزيكي مجزا ذخيره مي گردند‪ :‬و ‪ CPU‬براي دسترسي‪ :‬به هر يك‬
‫از اين حافظه ها از گذرگاه متفاوتي‪ :‬استفاده مي كند كه به هر يك از اين بخشها «فضا» اطالق‬
‫مي شود‪.‬‬

‫‪ 6-3-1-2‬فضاي برنامه‬

‫‪96‬‬
‫كد برنامه كه در حافظه برنامه ذخيره شده است‪ ،‬از طريق‪ :‬فضايي به نام «فضاي‪:‬‬
‫برنامه» در اختيار ‪ CPU‬قرار مي گيرد‪ .‬دستورات موجود‪ :‬در حافظه برنامه از طريق‪ :‬يك‬
‫سيستم ‪ Pipeline‬يك طبقه اجرا مي گردند‪ ،‬در مدتي كه يك دستور‪ :‬در حال اجرا مي‌باشد‪،‬‬
‫دستور بعدي از حافظه برنامه خوانده شده و در مكاني موقت (رجيستر دستور)‪ :‬دخيره مي‬
‫شود‪ .‬حداكثر فضاي‪ :‬برنامه قابل آدرس دهي در ‪ AVR‬چهار مگا كلمه (‪ 8‬مگابايت) مي باشد‪.‬‬

‫‪ 6-3-1-3‬فضاي داده‬
‫‪ CPU‬براي دريافت‪ :‬داده هاي مورد‪ :‬پردازش و ذخيره نتايج حاصله‪ ،‬از فضايي‪ :‬به نام‬
‫«فضاي داده» استفاده مي كند‪ .‬ارتباط‪ CPU :‬با واحدهاي جانبي نيز كه از طريق‪ :‬رد و بدل‬
‫كردن داده با اين واحدها صورت مي گيرد‪ ،‬از طريق بخش ويژه اي در همين فضاي‪ :‬داده انجام‬
‫مي پذيرد‪ :.‬حداكثر فضاي داده قابل آدرس دهي در ‪ AVR ، 16‬مگابايت مي‌باشد‪ .‬براي‬
‫افزايش كارايي‪ ،‬فضاي داده به بخش كوچكتري تقسيم گرديده است كه به اختصار‪ :‬در زير‬
‫مورد بررسي‪ :‬قرار گرفته اند‪:‬‬
‫الف‪ -‬فضاي رجيستر‪:‬‬
‫دسترسي‪ :‬كامل به رجيسترهاي‪ :‬عمومي از طريق‪ :‬فضاي رجيستر‪ :‬انجام مي گيرد‪.‬‬
‫فضاي رجيستر‪ :‬در ‪ AVR‬شامل ‪ 32‬بايت (‪ 32‬رجيستر)‪ :‬مي باشد‪ .‬رجيسترهاي عمومي در‬
‫فضاي رجيستر‪ :‬بر اساس نام رجيستر‪ :‬و در فضاي داده بر اساس آدرس معادل قابل دسترسي‬
‫مي باشد‪.‬‬
‫ب‪ -‬فضاي‪I/O :‬‬
‫فضاي ‪ I/O‬در ‪ AVR‬شامل ‪ 64‬بايت (‪ 64‬رجيستر)‪ :‬مي باشد‪ .‬رجيسترهاي ‪ I/O‬در‬
‫فضاي ‪ I/O‬بر اساس آدرس ‪ I/O‬و در فضاي داده بر اساس آدرس معادل قابل دسترسي مي‬
‫باشند‪.‬‬
‫پ‪ -‬فضاي‪RAM :‬‬
‫پس از فضاي‪ :‬رجيستر‪ I/O ،‬و ‪ Extended I/O‬در ابتداي فضاي‪ :‬بزرگ داده در‬
‫‪ AVR‬حافظه داده قرار‪ :‬دارد‪ .‬بخشي از اين حافظه داده را ‪ SRAM‬داخلي به خود اختصاص‬
‫مي دهد‪ .‬مابقي حافظه داده به صورت حافظه خارجي‪ :‬و با نام ‪ XRAM‬در دسترس خواهد‬
‫بود‪.‬‬
‫ت‪ -‬رجيسترهاي عمومي‬

‫‪97‬‬
‫داده ها (اعداد) مواد اوليه و محصول‪ :‬نهايي در هر سيستم پردازشي مي باشد‪ .‬اين داده‬
‫ها بايد در هنگام پردازش‪ :‬در مكاني مناسب در دسترس (‪ CPU)ALU‬قرار‪ :‬گيرند‪.‬‬
‫در ‪ AVR‬تعداد ‪ 32‬رجيستر عمومي ‪ 8‬بيتي به نام هاي ‪ R0‬تا ‪ R31‬تعبيه شده است‪.‬‬
‫ث‪ -‬رجيسترهاي ايندكس‬
‫براي دسترسي‪ :‬به مكان هاي غيرثابت در حافظه مي توان از روش هاي مختلف آدرس‬
‫دهي غيرمستقيم استفاده كرد‪ .‬در اين روشها به جاي مشخص كردن مستقيم داده و يا استفاده از‬
‫يك آدرس مشخص‪ ،‬از محتواي‪ :‬يك رجيستر‪ :‬براي تعيين آدرس داده مورد نظر استفاده مي‬
‫شود‪ .‬در ‪ AVR‬رجيسترهاي خاصي براي اين روش در نظر گرفته شده است كه رجيستر‪:‬‬
‫«ايندكس» ناميده مي شود‪.‬‬
‫دسترسي‪ :‬به محتواي‪ :‬رجيسترهاي‪ :‬ايندكس از طريق‪ :‬رجيسترهاي‪ :‬عمومي به كار رفته‬
‫مي گيرد‪ .‬رجيسترهاي ايندكس كه از نام هاي ‪ Y,X‬و ‪ Z‬استفاده مي كنند‪ 16 ،‬بيتي‬ ‫انجام‬
‫بوده و هر يك از تركيب دو رجيستر‪ :‬متوالي در رجيستر‪ :‬عمومي تشكيل مي گردد‪.‬‬
‫ج‪ -‬رجيسترهاي صفحه‬
‫با افزايش اندازه فضاهاي آدرس دهي در نمونه بزرگتر‪ ،‬آدرس ‪ 16‬بيتي (رجيسترهاي‬
‫ايندكس و آدرس دهي مستقيم) قادر به آدرس دهي تمامي اين فضا نخواهد بود‪ .‬در اين حالت‬
‫رجيستر ديگري‪ :‬موسوم‪ :‬به «رجيستر‪ :‬صفحه» با آدرس موجود تركيب شده و عرض آن را به‬
‫‪ 24‬بيت افزايش مي دهد كه براي آدرس دهي تمام فضاهاي‪ :‬آدرس در نظر گرفته شده در‬
‫‪ AVR‬قابل استفاده مي باشد‪.‬‬
‫چ‪ -‬رجيستر‪ :‬وضعيت‬
‫اطالعاتي كه هر يك از آنان از يك بيت داده تشكيل شده و «فلگ» ناميده مي شود‬
‫وضعيت جاري ‪( CPU‬و ‪ )ALU‬را منعكس مي سازند‪ .‬اين فلگ ها در كنار يكديگر‪ :‬و در‬
‫رجيستري‪ :‬به نام ‪( SREG‬رجيستر وضعيت) ذخيره مي گردند‪:.‬‬
‫هر فلگ در رجيستر ‪ SREG‬داراي نام و كاربرد‪ :‬مختص به خود بوده كه در زير به‬
‫تفكيك عنوان مي گردد‪:‬‬
‫‪ ‬فلگ ‪( C‬بيت شماره صفر)‪ :‬اين فلگ براي ثبت سرريز‪ :‬در آخرين عمليات‬
‫محاسباتي در نظر گرفته شده است‪.‬‬
‫‪ ‬فلگ ‪( Z‬بيت يك)‪ :‬اين فلگ نشانه صفر شدن عدد حاصل در آخرين عمليات‬
‫محاسباتي مي باشد‪.‬‬

‫‪98‬‬
‫‪ ‬فلگ ‪( N‬بيت دو)‪ :‬اين فلگ نشانه منفي بودن عدد حاصل (با فرض محاسبه به‬
‫روش مكمل دو) در آخرين عمليات محاسباتي مي باشد يك بودن آخرين (پر‬
‫ارزش ترين) بيت در يك عدد نشانه منفي بودن آن مي باشد‪.‬‬
‫‪ ‬فلگ ‪( V‬بيت سه) اين فلگ براي ثبت سرريز‪( :‬با فرض محاسبه به روش‬
‫مكمل دو) در آخرين عمليات محاسباتي در نظر گرفته شده است‪ .‬متفاوت بودن‬
‫بيت عالمت در عدد حاصل با عدد يا اعداد پيش از محاسبه نشانه سرريز‪ :‬در‬
‫يك عدد عالمت دار مي باشد‪.‬‬
‫‪V  V‬مي باشد‪ ،‬براي استفاده‬ ‫‪ ‬فلگ ‪( S‬بيت چهار)‪ :‬اين فلگ كه معادل با‬
‫در دستورات‪ :‬شرطي در نظر گرفته شده است‪.‬‬
‫‪ ‬فلگ ‪( H‬بيت پنج)‪ :‬اين فلگ براي ثبت سرريز‪ :‬از بيت ‪ 3‬به بيت ‪ 4‬در آخرين‬
‫عمليات محاسباتي در نظر گرفته شده است‪.‬‬
‫‪ ‬فلگ ‪( T‬بيت شش)‪ :‬اين فلگ به منظور‪ :‬استفاده در دستورات‪ BLD :‬و ‪BST‬‬
‫براي انتقال بيتي در نظر گرفته شده است‪.‬‬
‫‪ ‬فلگ ‪( I‬بيت هفت) اين فلگ براي ثبت وضعيت عمومي پذيرش وقفه در‬
‫‪ CPU‬در نظر گرفته شده است‪.‬‬

‫ح‪ -‬شمارنده برنامه‬


‫رجيستر ‪( PC‬شمارنده برنامه) وظيفه ثبت آدرس كلمه دستور‪ :‬در حال اجرا را بر‬
‫عهده دارد‪ .‬رجيستر‪ PC :‬در نمونه هاي مختلف داراي تعداد بيت هاي متفاوتي‪ :‬مي باشد‪ ،‬ولي با‬
‫توجه به محدوديت ‪ 22‬بيتي در نظر گرفته شده در مجموعه دستورالعمل ها‪ ،‬حداكثر تعداد بيت‬
‫هاي رجيستر‪ PC, 22 :‬بيت خواهد بود‪ .‬در هنگام ذخيره و بازيابي در پشته‪ ،‬رجيستر ‪ PC‬در‬
‫نمونه هاي داراي حداكثر ‪ 128‬كيلوبايت حافظه برنامه‪ 16 ،‬بيتي و در نمونه هاي داراي بيش‬
‫از ‪ 128‬كيلو بايت حافظه برنامه‪ 24 ،‬بيتي در نظر گرفته مي‌شود‪.‬‬
‫خ‪ -‬اشاره گر پشته‬
‫در هنگام نياز به فراخواني‪ :‬يك زيربرنامه‪ ،‬مهم ترين مسئله ايجاد امكان بازگشت و‬
‫ادامه سير اجرا مي باشد‪ .‬به اين منظور‪ :‬مكانيزمي‪ :‬براي ذخيره محتواي‪ :‬رجيستر ‪( PC‬آدرس‬
‫بازگشت) در هنگام فراخواني‪ ،‬و بازيابي آن پس پايان زير برنامه در نظر گرفته شده است‪.‬‬
‫اين مكانيزم كه يك حافظه ‪ FIFO‬مي باشد‪ ،‬پشته (‪ )Stack‬نام دارد‪.‬‬

‫‪99‬‬
‫پشته معموال در فضاي‪ :‬داده (در ‪ )SRAM‬داخلي و به صورت وارونه تشكيل گشته و‬
‫يك رجيستر‪( :‬اشاره گر پشته يا ‪ )Stack Pointer‬كه هميشه به اولين بايت آزاد در پشته اشاره‬
‫مي كند‪ ،‬وظيفه ثبت ‪ TOP‬را به عهده مي گيرد‪.‬‬

‫‪ 6-3-2‬حافظه ها‬

‫در ‪ AVR‬سه گونه از حافظه وجود دارد‪ .‬هر يك از اين حافظه ها داراي كاربرد‬
‫مختص به خود مي باشد كه در ادامه به تفكيك بيان مي گردد‪.‬‬

‫‪ 6-3-2-1‬حافظه برنامه‬

‫در ‪ AVR‬از يك حافظه ‪ Flash‬براي ذخيره كد برنامه استفاده شده است‪ .‬اين حافظه‬
‫در ‪ AVR‬به دو بخش ‪( Application‬بخش ابتدايي حافظه برنامه) و ‪( Boot Leader‬بخش‬
‫انتهايي حافظه برنامه) تفسيم مي شود‪.‬‬
‫الف‪ -‬بخش ‪Application‬‬
‫بخش ‪ Application‬كه در بخش ابتدايي حافظه برنامه قرار‪ :‬دارد‪ ،‬براي ذخيره كد‬
‫برنامه مورد‪ :‬نظر به كار مي رود‪ .‬هنگام اجراي دستورات از داخل اين بخش‪ ،‬دستور‪SPM :‬‬
‫غيرفعال خواهد بود‪ .‬در نتيجه اين بخش به هيچ وجه نمي تواند حاوي كد ‪ Boot Leader‬باشد‪.‬‬
‫ب‪ -‬بخش ‪Boot Leader‬‬
‫بخش ‪ Boot Leader‬كه در بخش انتهايي حافظه برنامه قرار‪ :‬دارد‪ ،‬براي ذخيره كد‬
‫‪ Boot Leader‬به كار مي رود‪ .‬تنها در هنگام اجراي دستورات‪ :‬از داخل اين بخش‪ ،‬دستور‬
‫‪ SPM‬فعال خواهد بود‪ .‬در نتيجه فقط اين بخش مي تواند حاوي كد ‪ Boot Leader‬باشد‪.‬‬
‫دستور ‪ SPM‬مي تواند كل فضاي حافظه برنامه از جمله خود بخش ‪ Boot leader‬را پوشش‬
‫دهد‪.‬‬

‫‪ 6-3-2-2‬حافظه ‪ SRAM‬و ‪XMEM‬‬


‫باقي مانده فضاي‪ :‬داده (پس از رجيستر‪ :‬فايل‪ I/O ،‬و ‪ Extended I/O‬براي ذخيره‬
‫داده ها در حين اجراي نرم افزار‪ :‬به كار مي رود‪ .‬بخش كوچكي‪ :‬از اين فضا به يك حافظه‬

‫‪100‬‬
‫داخلي كه با نام ‪ SRAM‬شناخته مي شود‪ ،‬اختصاص مي يابد‪ .‬در صورت‪ :‬نياز به حافظه داده‬
‫بزرگتر‪ :,‬مي توان از حافظه خارجي‪ :‬استفاده كرد‪ .‬اين حافظه با نام ‪ XMEM‬شناخته مي شود‪.‬‬

‫‪ 6-3-2-3‬حافظه ‪E2PROM‬‬
‫گاهي در مدارات كنترلي‪ :‬پارامترها و داده هايي وجود‪ :‬دارند كه حتي در صورت‪ :‬قطع‬
‫جريان تغذيه نيز بايد حفظ گردند‪ :.‬داده هايي نظير تنظيمات سيستم‪ ،‬پارامترهاي ورودي‪،‬‬
‫وضعيت جاري و گاهي داده هاي جمع آوري شده در حين كار‪ .‬يكي از بهتيرن راه كارها براي‬
‫اين مورد استفاده از حافظه هاي ‪ E2PROM‬مي باشد‪ AVR .‬با دارا بودن مقدار معقولي از‬
‫حافظه ‪ E2PROM‬در روي‪ :‬چيپ اصلي‪ ،‬پاسخ مناسبي براي اين مسئله ارائه كرده است‪.‬‬
‫حافظه ‪ E2PROM‬موجود در ‪ AVR‬قابليت پذيرش ‪ 000/100‬سيكل نوشتن در هر صفحه و‬
‫نگهداري اطالعات به مدت بيش از ‪ 10‬سال را دارا مي‌باشد‪.‬‬

‫‪ 6-3-3‬مدارات راه اندازي و كنترل‬

‫مدارات كنترل و راه اندازي به بخش هاي متفاوتي‪ :‬تقسيم مي گردند‪ :.‬وجود مدارهايي‬
‫مانند مولد كالك يا آشكارساز‪ Power on :‬براي عملكرد ميكروكنترلر‪ :‬الزامي مي باشد‪ .‬ولي‬
‫مدارهاي ديگر ريست يا سيستم كنترل توان تنها براي بهبود‪ :‬كاركرد آن به كار مي روند‪.‬‬

‫‪ 6-3-3-1‬مولد كالك‬
‫منابع مختلفي مي توانند‪ :‬اقدام به ايجاد كالك مورد نياز سيستم‪ :‬كنند‪ .‬براي انتخاب منبع‬
‫كالك مورد‪ :‬نظر و روش كاركرد‪ :‬مولد كالك از فيوز بيت هاي ‪ CKOPT, CKSEL‬و‬
‫‪ CKDIV8‬استفاده مي شود‪ .‬فركانس خروجي‪ :‬مدار نوسان ساز ‪ RC‬داخلي را مي‌توان به‬
‫كمك عدد ‪ OSCCAL‬تنظيم كرد‪ .‬يك تقسيم كننده ‪ Prescale‬براي كاهش فركانس كار‬
‫ميكروكنترلر‪ :‬در نظر گرفته شده است‪ .‬نسبت مستقيم در اين تقسيم كننده از طريق‪ :‬عدد چهار‬
‫بيتي ‪ CLKPS‬انتخاب مي گردد‪ .‬يك مدار ‪ PLL‬براي ايجاد مضربي از فركانس كالك اصلي‬
‫در نظر گرفته شده است‪.‬‬
‫در هنگام استفاده از نوسان ساز داخلي (نوسان ساز اصلي)‪ ،‬مي بايست از پايه‌هاي‬
‫‪( XTAL‬ورودي) و ‪( XTAL 2‬خروجي) جهت اتصال كريستال‪ :‬يا رزوناتور سراميكي‪ :‬و‬
‫قطعات مربوطه استفاده كرد‪.‬‬

‫‪101‬‬
‫‪Reset 6-3-3-2‬‬
‫منابع مختلفي مي توانند‪ :‬اقدام به ايجاد پالس ريست كنند‪ .‬طول اين پالس توسط بخش‬
‫ويژه اي افزايش مي يابد‪ .‬با برنامه ريزي فيوز‪ :‬بيت هاي ‪ CKSEL, FSTRT‬و ‪ SUT‬مي‬
‫توان ميزان اين افزايش را تعيين كرد‪ .‬منابع ممكن براي ايجاد سيگنال ريست به شرح زير مي‬
‫باشند‪.‬‬
‫الف – ‪External Reset‬‬
‫صفر كردن پايه ريست خارجي به مدت حداقل ‪ ، 50nS‬باعث فعال شدن سيگنال‬
‫مي گردد‪ .‬تضميني‪ :‬براي ايجاد پالس ريست يا پالس هاي ورودي‪ :‬كوتاه تر از اين حد‬ ‫ريست‬
‫وجود ندارد‪.‬‬
‫ب‪ -‬آشكار ساز ‪Power-On‬‬
‫با افت ولتاژ تغذيه به زير حد پايين كه براي اين منظور در نظر گرفته شده‪ ،‬سيگنال‬
‫ريست فعال شده و تا زمان افزايش ولتاژ‪ :‬تغذيه به حد باال در همين حالت باقي مي ماند‪.‬‬
‫پ‪ -‬آشكارساز ‪Brown-Out‬‬
‫اين مدار در صورت‪ :‬فعال بودن با مراقبت دائم ولتاژ تغذيه‪ ،‬در صورت افت ولتاژ‬
‫تغذيه به زير حد تعيين شده اقدام به ايجاد سيگنال ريست مي كند‪ .‬اين سيگنال تا زمان بازگشت‬
‫ولتاژ تغذيه به حد تعيين شده ادامه مي يابد‪.‬‬
‫ت‪JTAG Reset -‬‬
‫در مدت يك بودن بيت ‪ Reset‬در ‪ JTAG‬ميكروكنترلر در حالت ريست باقي مي‌ماند‪.‬‬
‫براي آشنايي با ‪ JTAG‬به مكانيزم هاي ديباگ و برنامه ريزي‪ :‬در همين فصل مراجعه شود‪.‬‬
‫‪1‬‬
‫ث‪ -‬تايمرنگهبان‬
‫يكي از مسائلي كه گريبان گير يك سيستم‪ :‬پردازشي‪ :‬مي باشد‪ ،‬مسئله هنگ شدن يا‬
‫خروج كنترل از دست نرم افزار مي باشد‪ .‬داليل مختلفي مي تواند باعث بروز‪ :‬اين مشكل‬
‫گردد‪.‬‬
‫بدترين دليل‪ ،‬بروز حالتي معروف‪ :‬به ‪ Latch-Up‬مي باشد كه مربوط به ساختار نيمه‬
‫هادي ها مي گردد‪ .‬در اين حالت كه مشكلي كامالً سخت افزاري است ‪ ،‬چيپ به كلي فلج مي‬
‫گردد‪.‬‬

‫‪Watchdog Timer· 1‬‬

‫‪102‬‬
‫دليل شايع ديگر که باز وجود‪ :‬مشكل سخت افزاری است مربوط‪ :‬به بخش تثبيت كننده‬
‫ها و فيلترهاي منبع تغذيه مي باشد‪.‬‬
‫ساده ترين دليل نيز وجود‪ :‬مشكل در خود نرم افزار مي باشد‪ .‬طراحي ضعيف‪ ،‬ساختار‪:‬‬
‫ناقص برنامه‪ ،‬عدم رعايت استاندارد‪ :‬و عدم استفاده از زبان مناسب‪ ،‬امكان بروز مشكالت نرم‬
‫افزاري را بيشتر مي كند‪.‬‬
‫وجود مشكل در نرم افزار‪ :‬در شرايط‪ :‬تست و طراحي امريست معمول‪ .‬ولي وجود‪:‬‬
‫مشكل در نرم افزار نهايي مربوط‪ :‬به ضعف طراح مي باشد‪ .‬كه با بررسي‪ :‬و خطايابي‪ :‬درست‬
‫برنامه قابل رفع خواهد بود‪ .‬با اين همه گاهي امكان پيش بيني تمام موارد‪ :‬وجود ندارد يا ممكن‬
‫است به دليل پيچيدگي طرح نكات ريزي‪ :‬از چشم طراح مخفي بماند‪ .‬وجود‪ :‬مشكل در بخش‬
‫سخت افزار‪ :‬نيز با طراحي‪ :‬درست سخت افزار‪ :‬رفع خواهد شد‪.‬‬
‫پاسخ ‪ AVR‬به اين نياز تايمرنگهبان مي باشد‪ ،‬مكانيزمي‪ :‬فوق العاده ساده و موثر‪ :.‬در‬
‫اين مكانيزم نرم افزار‪ :‬موظف است كه در سيكل زماني مشخصي‪ :‬سالمت خود را به‬
‫تايمرنگهبان اعالم كند‪ .‬اگر نرم افزار‪ :‬پس از گذشت اين زمان‪ ،‬به هر دليل موفق‪ :‬به اعالم‬
‫سالمت خود نگردد‪ ،‬تايمر نگهبان (با فرض بروز‪ :‬مشكلي بحراني در سيستم)‪ ،‬با ارسال‬
‫درخواست وقفه و با ايجاد سيگنال ريست كنترل را به نرم افزار باز مي گرداند‪.‬‬

‫‪ 6-3-3-3‬كنترل توان‬
‫روشهاي‪ :‬مختلفي براي كاهش توان مصرفي چيپ در دسترس مي باشد‪ .‬اين روشها بر‬
‫پايه قطع كالك بخشي از‪ ،‬يا تمام مدارات موجود‪ :‬در ميكروكنترلر استوار‪ :‬مي‌باشند‪ .‬با قطع‬
‫كالك ورودي به هر يك از مدارات جانبي توان مصرفي چيپ كاهش مي‌يابد‪.‬‬
‫با يك كردن هر يك از بيت هاي ‪ PRUSART, PRTWI, PRSPI, PRTM‬و‬
‫‪ PRADC‬مي توان كالك بخش مربوطه را قطع كرده و جريان مصرفي‪ :‬آن به حداقل ممكن‬
‫كاهش داد‪ .‬مدارات ارتباطي‪ :‬پس از برقراري‪ :‬مجدد كالك نيازمند‪ :‬پيكره بندي مجدد خواهند بود‪.‬‬
‫مدارات غيروابسته به كالك ‪ I/O‬در هر يك از اين حالت ها به كار خود ادامه خواهند‬
‫داد‪.‬‬

‫‪103‬‬
‫‪ 6-3-4‬واحدهاي جانبي (‪)I/O‬‬

‫مدارات جانبي در ‪ AVR‬از تنوع نسبتا زيادي برخورداراند‪ .‬اين واحدها در مجموع‬
‫به چهار گروه عمده قابل تقسيم مي باشند‪:‬‬
‫درگاهها(پورت) ها‬ ‫‪‬‬
‫‪ ‬شمارنده ‪ /‬تايمرها‬
‫‪ ‬واحدهاي ارتباطي‪( :‬سريال)‬
‫‪ ‬واحدهاي آنالوگ‬
‫در ادامه به توضيح و تشريح هر يك از اين گروهها‪ :‬پرداخته مي شود‪.‬‬

‫‪ 6-3-4-1‬پورت ها‬
‫پورت ها ساده ترين و ابتدايي ترين نوع دسترسي‪ :‬نرم افزار به دنياي خاج مي‌باشند‪.‬‬
‫پورت ها را مي توان به شكل بيت هايي مجزا و با گروهي بهم پيوسته از بيت‌ها مورد استفاده‬
‫قرار داد‪ .‬در ‪ AVR‬نام پورت با حروف مشخص مي گردند‪ :‬و براي نامگذاري‪ :‬آنها به ترتيب‬
‫از نام هاي پورت ‪ ، A‬پورت ‪ ، B‬پورت ‪ C‬و ‪ ..‬استفاده مي گردد‪.‬‬

‫‪ 6-3-4-2‬شمارنده ‪ /‬تايمر‬
‫اين مدار در ساده ترين شكل‪ ،‬شمارنده اي است كه پالس ورودي‪ :‬از منبع كالك را‬
‫شمرده و پس از پايان عمل شمارش نرم افزار‪ :‬مربوطه را مطلع مي سازد‪ .‬در خانواده ‪،AVR‬‬
‫امكانات ديگري‪ :‬مثل شمارش وقايع‪ ،‬ثبت زمان يك رويداد‪ :،‬توليد فركانس قابل برنامه ريزي و‬
‫توليد موج ‪ PWM‬قابل برنامه ريزي‪ :‬نيز براي شمارنده ‪ /‬تايمرها در نظر گرفته شده است‪.‬‬
‫شمارنده ‪ /‬تايمرها در ‪ AVR‬به دو گروه ‪ 8‬و ‪ 16‬بيتي تقسيم مي گردند‪ .‬انواع ‪ 8‬بيتي براي‬
‫استفاده در كاربردهاي ساده و پر سرعت و انواع ‪ 16‬بيتي براي استفاده در كاربردهاي‪ :‬كم‬
‫سرعت و نيازمند‪ :‬به بازه وسيع تر شمارشي مناسب مي‌باشند‪.‬‬

‫‪ 6-3-4-3‬واحدهاي ارتباطي‪( :‬سريال)‬


‫يكي از پركاربردترين روش ارتباطي‪ :‬براي ارتباط سريال مي باشد‪ .‬در روش سريال‬
‫در هر زمان‪ ،‬يك بيت از داده ارسال مي گردد‪ .‬به دليل تعداد كم سيگنال هاي مورد نياز در يك‬
‫ارتباط سريال استفاده از اين روش بيشتر از روش موازي مورد‪ :‬توجه قرار‪ :‬مي گيرد‪ .‬در‬

‫‪104‬‬
‫توجه اي بين دو طرف‪ :‬ارتباط باشد‪ ،‬معموالً ارتباط سريال تنها‬ ‫مواقعي كه فاصله قابل‬
‫روش قابل انتخاب خواهد بود‪ .‬ارتباط‪ :‬سريال اين ميكرو كنترلر‪ :‬بسيار شبيه ميكروكنترلرهاي‪:‬‬
‫‪ 8051‬مي باشد‪.‬‬

‫آنچه در اين فصل ديديم آشنايی کلی با ميکروکنترلر‪ AVR :‬بود‪ .‬عالقه مندان می‬
‫توانند برای آشنايی بيشتر‪ :‬و مفصل تر به کتابهای مرجع مراجعه کنند‪.‬‬

‫فصل هفتم‬

‫‪DMA‬‬

‫در اين قسمت مي خواهيم به طور‪ :‬خيلي مختصري با اهميت و نحوه عملكرد ‪DMA‬‬
‫آشنا شويم‪ :.‬يادآوري مي شود مقوله ‪ DMA‬و بررسي كامل آن معموال به درس‬
‫ميكروپروسسور‪ :‬واگذار ميشود‪ ،‬اما در اينجا قصد ما آشنايي مختصر دانشجويان با فلسفه و‬
‫كاركرد اين تراشه است‪.‬‬

‫‪ 7-1‬مفهوم ‪DMA‬‬

‫در كامپيوترها‪ ،‬اغلب به انتقال حجم زيادي از بايت هاي داده بين حافظه و وسايل‬
‫جانبي نياز است‪ .‬در چنين مواردي استفاده از ريزپردازنده ها براي انتقال داده بسيار كند مي‬
‫باشد زيرا داده ها بايد به ‪ CPU‬برده شده و سپس به مقصد ارسال گردند‪ :.‬بعالوه روند برداشت‬
‫و ديكد خود دستورالعمل ها نيز به آن اضافه مي شود‪ .‬به اين دليل‪ ،‬اينتل تراشه ‪DMA 8237‬‬
‫را طراحي‪ :‬كرد كه كارش كنار گذاشتن ‪ CPU‬و ايجاد ارتباط مستقيم بين وسايل جانبي و‬
‫حافظه است‪ .‬مشكلي كه به در ابتدا بنظر مي رسد اين است كه هيچ گذرگاهي قادر‪ :‬به‬
‫پاسخگويي‪ :‬به دو حاكم بطور‪ :‬همزمان نيست‪ ،‬يعني گذرگاه ها در آن واحد ميتوانند بوسيله‬
‫‪ CPU‬و يا ‪ DMA 8238‬مورد استفاده قرار‪ :‬گيرند‪ .‬پاسخ اين است كه هرگاه ‪ DMA‬نياز به‬
‫استفاده از گذرگاه براي انتقال داده داشته باشدسيگنالي به نام ‪ HOLD‬را به ‪ CPU‬ارسال‬

‫‪105‬‬
‫ميدارد و در مقابل‪ CPU ،‬هم با ارسال سيگنال ‪ HLDA‬به آن پاسخ مي دهد تا به اين ترتيب‬
‫به آن بفهماندكه مي تواند از گذرگاه استفاده كند‪.‬‬
‫بحث فوق مشخص مي كند كه ‪ DMA‬فقط انتقال اطالعات انجام ميدهد و مثل ‪CPU‬‬
‫قادر به برداشت و اجراي دستورالعمل ها نيست‪.‬‬
‫مي توان به ‪ DMA‬به چشم يك ‪ CPU‬نگاه كرد كه در آن مدار منطقي ديكدر ‪/‬اجراگر‬
‫وجود ندارد‪ .‬براي اينكه ‪ DMA‬قادر به انتقال داده باشد‪ ،‬با سيگنال هاي گذرگاه كنترل ‪IOR،‬‬
‫‪ IOW، MEMR‬و ‪ MEMW‬تجهيز شده است‪.‬‬

‫‪ 7-2‬برنامه ريزي تراشه ‪DMA 8237‬‬

‫كنترل كننده ‪ DMA 8237‬يك تراشه ‪ 40‬پايه است‪ .‬اين تراشه داراي چهار كانال‬
‫براي انتقال داده مي باشد و هر كدام بايد براي يك وسيله بكار رود‪ .‬مثال يكي براي فالپي‬
‫ديسك‪ ،‬يكي براي ديسك سخت و غيره‪ .‬البته در هر زمان فقط يك وسيله قادر‪ :‬به استفاده از‬
‫‪ DMA‬براي انتقال داده است‪ .‬در هر كانال دو سيگنال وجود‪ :‬دارد‪ ،‬سيگنال ورودي ‪DREQ‬‬
‫(تقاضاي ‪ )DMA‬و سيگنال خروجي ‪( DACK‬تصديق ‪ .)DMA‬از ‪ DMA 8237‬فقط يك‬
‫‪ HOLD‬و يك ‪ HLDA‬وجود دارند كه به ‪ HOLD‬و ‪ HLDA‬ميكروپروسسور‪ :‬وصلند‪ .‬به‬
‫اين معني كه چهار كانال از چهار وسيله مختلف مي توانند‪ :‬تقاضاي استفاده از گذرگاه سيستم را‬
‫بنمايند‪ ،‬ولي اين ‪ DMA‬است كه تصميم مي گيرد كه چه كسي كنترل را به دست بگيرد‪.‬‬
‫قبل از استفاده از هر كانال‪ ،‬بايد بطور‪ :‬جداگانه هر كانال ‪ DMA 8237‬مقدار دهي‬
‫اوليه شده و ضمن آن آدرس بلوك داده (اندازه بلوك) و تعداد آن مشخص شود‪.‬‬
‫مقداردهي اوليه عبارت است از نوشتن موارد‪ :‬زير در هر كانال‪:‬‬
‫‪ -1‬آدرس اولين بايت بلوك داده اي كه بايد منتقل شود(آدرس‪ :‬مبنا)‬
‫‪ -2‬تعداد بايت هاي مورد‪ :‬انتقال(تعداد كلمه)‬
‫يادآوري‪ :‬مي شود انواع متعددي‪ :‬از مدهاي عملكردوجود دارند كه (اين مدها و انتخاب‬
‫ها) بايد در ثباتهاي داخلي ‪ 8237‬برنامه ريزي شوند‪ :.‬براي دستيابي‪ :‬به اين ثبات ها‪8237 ،‬‬
‫‪ SC‬اختيار مي گذارد و چون هر كانال نياز‬
‫در‬ ‫چهار پايه با آدرس ‪ A0-A3‬را به همراه پايه‬
‫به آدرس پايه و تعداد كلمه جداگانه اي دارد‪ ،‬جمعا براي آنها هشت پورت كنار گذاشته شده‬
‫است‪.‬‬

‫‪106‬‬
‫‪ 7-3‬ثبات هاي كنترل داخلي ‪8237‬‬
‫از آنجا كه در اين مجموعه درصدد پرداختن به جزييات ‪ DMA‬و بررسي دقيق‪ :‬آن‬
‫نيستيم‪ ،‬لذا با معرفي (فقط معرفي) ثبات هاي موجود در اين تراشه مبحث ‪ DMA‬را به پايان‬
‫مي بريم‪:‬‬

‫‪ 7-3-1‬ثبات فرمان‬
‫اين ثبات ‪ 8‬بيتي براي كنترل كار ‪ 8237‬استفاده مي شود‪.‬اين ثبات بوسيله ‪CPU‬‬
‫برنامه ريزي‪ :‬مي شود‪.‬سيگنال ‪ RESET‬از ‪ CPU‬يا دستور پاك كردن اصلي مربوط‪ :‬به‬
‫‪ DMA‬آن را پاك مي كند‪.‬‬

‫‪ 7-3-2‬ثبات وضعيت‬
‫اين ثبات ‪ 8‬بيتي فقط بوسيله ‪ CPU‬از طريق‪ :‬همان آدرس پورت ثبات‪ ،‬همانند فرمان‬
‫‪ SC‬باشد‪ .‬اين ثبات‬
‫مي‬ ‫خوانده مي شود‪ .‬آدرس پورت ‪ X8H‬است كه ‪ X‬براي فعال كردن‬
‫حاوي اطالعات متعددي درباره حاالت عملياتي چهار كانال مي باشد‪.‬‬

‫‪ 7-3-3‬ثبات مد‬
‫اين ثبات فقط قابل نوشتن بوسيله ‪ CPU‬از طريق‪ :‬آدرس پورت ‪ XBH‬است‪ ،‬كه در آن‬
‫‪ SC‬فعال مي نمايد‪ .‬مدهاي انتخابي توسط اين ثبات عبارتند از‪:‬‬
‫را‬ ‫‪ X‬تركيب آدرسي است كه‬
‫‪ -1‬مد درخواست‬
‫‪ -2‬مد بلوك‬
‫‪ -3‬مد تك‬
‫‪ -4‬مد متوالي‬

‫‪107‬‬
‫‪ 7-3-4‬ثبات تك پوشش‬
‫محتوي اين ثبات تنها بوسيله ‪ CPU‬از طريق آدرس پورت ‪ XAH‬نوشته مي شود‪ ،‬كه‬
‫است‪ .‬از طريق‪ :‬اين ثبات است كه ورودي‪ DREQ :‬از يك كانال بخصوص قابل‬
‫‪SC‬‬ ‫‪ X‬براي‬
‫پوشش (غير فعال) يا غير قابل پوشش (فعال) است‪.‬‬

‫‪ 7-3-5‬ثبات تمام پوشش‬


‫در عمل اين ثبات شبيه ثبات تك پوشش است با اين تفاوت كه هر چهار كانال با يك‬
‫عمل نوشتن قابل پوشش يا غير قابل پوشش مي باشند‪ .‬اين ثبات هم فقط توسط ‪ CPU‬از طريق‪:‬‬
‫است‪.‬‬
‫‪SC‬‬ ‫آدرس پورت ‪ XFH‬قابل نوشتن است كه ‪ X‬در آن براي فعال سازي‬

‫‪ 7-3-6‬ثبات موقت‪/‬پاك كردن اصلي‬


‫اين ثبات فقط توسط ‪ CPU‬در آدرس پورت ‪ XDH‬نوشته مي شود‪ ،‬كه در آن ‪ X‬براي‬
‫است‪ .‬بايت ارسالي‪ :‬به آن ثبات به خودي خود اهميتي ندارد زيرا در واقع‪ ،‬ثبات هاي‬
‫‪SC‬‬

‫وضعيت‪ ،‬فرمان‪ ،‬درخواست‪ :‬پوشش را پاك مي كند و ‪ DMA‬را به سيكل بيكاري‪ :‬مي برد‪.‬‬

‫‪ 7-3-7‬پاك كردن ثبات پوشش‬


‫اين ثبات فقط توسط ‪ CPU‬از طريق‪ :‬آدرس پورت ‪ XEH‬قابل نوشتن است كه در آن‬
‫مي باشد‪.‬الگوي بيتي نوشته شده در آن اهميتي ندارد‪ .‬كار آن پاك كردن‬ ‫‪SC‬‬ ‫‪ X‬براي‬
‫بيت هاي پوشش هر چهار كانال است‪ ،‬و بدينوسيله آنها را براي پذيرش ‪ DMA‬از طريق‪:‬‬
‫‪ DREQ‬فعال مي سازد‪.‬‬

‫در پايان‪ ،‬براي آشنايي كامل با ‪ ،DMA‬مراجع درسي‪ :‬كامل تر‪ ،‬از جمله كتاب‬
‫"ميكروپروسسورهاي‪( "80X86 :‬نوشته‪ :‬دكتر مزيدي) جهت مطالعه پيشنهاد ميشود‪:.‬‬

‫‪108‬‬
‫منابع‬
‫جزوه درسی دکتر تابنده ‪1-‬‬
‫‪Digital and Microprocessor Fundamentals- William Kleit‬‬ ‫‪2-‬‬
‫کتاب ميکروکنترلر‪, 8051 :‬آی اسکات مکنزی‪ ,‬ترجمه مهندس حميد رضا رضايي‪ :‬نيا و ‪3-‬‬
‫مهندس پيمان‬
‫کتاب ميکروپروسسور‪ ,‬جان افن‌بک‪ ,‬ترجمه دکتر قدرت سپيدنام‪ ,‬ويرايش‪ :‬سوم ‪4-‬‬

‫‪109‬‬

You might also like