با عرض سلام خدمت تمامی دوستان
یکی از دوستان یه برنامه ماشین حساب خواسته بود به این صورت که فقط عملیات جمع و تفریق رو انجام بده و حداکثر تا دو رقم عدد از ورودی بخونه دو تا اول و بعد از جمع یا تفریق هم دو عدد و نهایتا حاصل جمع یا تفریق روی دو تا سون سگمنت نمایش داده شود.
يكي از دوستان گفته بود كه يه كمي درباره متغييرها و پايه RST توضيح بدم! كه منم يه توضيح مختصر دادم
توضيح برنامه:
در ابتداي برنامه من اومدم چند تا متغيير تعريف كردم يعني مثلا من گفتم مي خوام كه A1 همون خونه 40H باشه به جاي اينكه تو برنامه بيام و بنويسم 40H فقط نام متغيير يعني A1 رو مي نويسم.
حال اين متغير هاي براي چي هستند؟
متغير هاي A1,A2, براي براي نگهداري اولين، دو عدد وردي ما هستند و B1,B2 هم براي نگهداري دومين، دو عدد ورودي ما هستند. از همه مهم تر متغير POL هست كه خونه 20H مي باشد و همتنطور كه مي دانيم از رنج 20 تا 2F محدود بيتي و باتي هستند يعني اينكه ما هم مي تونيم به عنوان بيت و هم بايت ازش استفاده كنيم كه من از بيت دوم آن POL.1=20H.1 استفاده كرده ام. حال وظيفه اين بيت چيست؟ اين برنامه مي تونه تا حداكثر دو عدد از ورودي بخونه براي عمليات قبل از جمع يا تفريق و دو عدد هم بعد از جمع يا تفريق. حالا شايد شما بخواهيد 1 رو بعلاوه 23 كنيد مي بينيم كه عدد 1 يك عدد تك رقمي ميباشد كه نه دو رقمي وظيفه اين بيت POL1 در اينجا اينكه اگه ما يك عدد 1 راوارد كردم و بعد كليد + يا – را زديم اين بيت 1 مي شود و ديگه اجازه نميده كه عدد بعدي در A2 قرار بگيره يعني عدد 2 ميره تو B1 و عدد 3 هم ميره تو B2 . اين از وظيفه POL
متغير هاي TEMP1 , TEMP2 هم متغيير هاي موقت ما هستند كه اعداد ورودي به صورت موقت درونشون نگداري ميشه يعني اينكه شما همون جمع بالا رو در نظر بگيريد مگه اولين دو عدد ما همون 01 نميشه خوب دومين عد ما يعني 23 هست كه 2 با ارزش تر از 3 هست و اولين رقمي هم هست كه ميكرو دريافت ميكنه حالا من اومدم و اين دو عدد كه هر كدوم تو يه ثبات 8 بيتي بود رو تركيب كردم يعني عدد 23 رو تو يه ثبات جاي دادم كه اين كار رو شما مي تونيد به كمك دستور SWAP و دستور ORL انجام دهيد. به اين صورت كه اواين رقم ما 2 هست پس به كمك SWAP اون به سمت چپ يعني نيبل با ارزش انتقال ميديم حالا عدد 3 رو با اون OR مي كنيم و نيجيه اون يك عدد BCD فشرده خواهد شد. كه از TEMP1 ,TEMP2 براي اين كار استفاده كرديم.
يه نكته مهم:
وقتي ما دو عدد BCD فشرده رو با هم جمع مي كنيم ممكنه كه ديگه حاصل جمع ما BCD نباشه كه براي اينكار از دستور DA A استفاده مي كنيم اين دستور به طور اتوماتيك عدد 6 رو به نيبل پايين يا بالا اضافه ميكنه تا عدد به BCD تبديل بشه.
براي تفريق هم همين مشكل ممكنه پيش بياد كه بايد 6 واحد از نيبل پايين يا بالا كم كنيم كه من با گذاشتن يه شرط براي اون اگه BCDنبود به كمك دستور DEC يعني 6 تا از اين دستور مي تونيم اين كار ور انجام بديم.
در ضمن اگر نتيجه حاصل تفريق ما يك عد منفي بود 8051 اين حاصل تفريق رو به صورت متمم 2 رها مي كنه كه ما مي تونيم به كمك پرچم CY=1 به منفي بودن حاصل تفريق پي ببريم. يعني اينكه اگه CY=1 شد CPU اين عدد رو به صورت ممتم 2 رها مي كنه و ما به كمك اين پرچم خودمون بايد درستش كنيم يعني ابتدا ما اين عدد رو متمم مي كنيم كه دستور CPL اين كار رو انجام ميده و بعد از اون هم بايد يك واحد بهش اضافه كنيم كه با دستور INCاين كا رو انجام ميديم ويك LED رو هم روشن مي كنيم كه نشان دهند منفي بودن نتيجه عمليات بوده.
در مورد پايه RST : اين پايه با مدار ريستي كه دورش براي ريست كردن دستي ميكرو هست. مثل همون دكمه ريست كامپيوتر هست.!

براي وضوح بيشتر روي عكس يا اينجا كليك كنيد
دانلود فايلها (حجم ۷۲ كيلو بايت)
پسورد: mc8051.blogfa.com