برنامه مدار شبیه ساز آسانسور
برنامه موجود شامل چند بخش ميباشد:
• مقداردهي اوليه متغيرها و پيكربندي پورتها و سخت افزار.
• اسكن صفحه كليد و ذخيره شماره طبقات درخواست شده. همچنين نمايش شماره طبقه درخواست شده.
• زير برنامه اصلي يا Main.
• زير برنامه باز و بسته شدن دربها.
• زير برنامه نمايش شماره طبقه جاري.
• زير برنامه تعيين جهت حركت آسانسور.
• زير برنامه كنترل كننده استپ موتور.
• برنامه حذف شماره طبقات توقف شده.
بخشهاي از برنامههاي بالا در يك زير برنامه بوده، ولي ممكن است كارهاي متفاوتي را انجام دهند.
مانند برنامه اسكن صفحه كليد كه در اكثر زير برنامهها وجود دارد.
در قسمت Main يا اصلي برنامه، ابتدا برنامه به اسكن صفحه كليد ميپردازد. برنامه اسكن صفحه كليد به اين صورت است كه ابتدا تمامي كليدها را به طور يك جا خوانده و اگر ارزش عدد خوانده شده از كليدها از يك مقدار معيين كمتر باشد معلوم ميشود كه كليدي فشرده شده و برنامه براي پيدا كردن كليد فشرده شده به زير برنامه Key_scan ميرود. در اين زير برنامه پس از تشخيص كليد فشرده شده ابتدا شماره طبقه مورد نظر را در حافظه ذخيره كرده و سپس چراغ زير كليد را روشن ميكند.
بنابراين روشن بودن يك LED نمايانگر درخواست طبقه مورد نظر آن است.
پس از ثبت كليد فشرده شده برنامه به بعد از برنامه اسكن صفحه كليد ميرود. سپس برنامه به زير برنامه Motion براي به حركت در آوردن آسانسور ميرود. در آنجا برنامه به زير برنامه Direction پرش كرده و جهت حركت را با توجه به موقعيت و كليد فشرده شده تعيين ميكند. رجيستر Direction حاوي جهت حركت آسانسور است.
در صورتي كه آن 0 باشد جهت حركت رو به پائين و در صورتي كه 1 باشد جهت حركت رو به بالا است.
پس از بازگشت برنامه به Motion ، موتور روشن شده و شروع به حركت در جهت تعئين شده مينمايد. در اين زير برنامه موتور 10 استپ معادل 9 درجه را طي ميكند.
ضمنا قبل از انجام مراحل فوق پس از پرش برنامه به اين بخش، به منظور از دست ندادن كليدها، صفحه كليد به روش گفته شده اسكن ميگردد.
برنامه پس از حركت دادن موتور، به زير برنامه اصلي بازگشت پيدا ميكند.
پس از بازگشت برنامه به زير برنامه Position پرش كرده و سنسورها را اسكن ميكند.
در صورتي كه يك سنسور تحريك شده باشد، شماره طبقه مورد نظر را در متغير E ذخيره كرده همچنين مقدار 7-SEG را نيز اصلاح ميكند.
برنامه به سپس به اول برنامه Main باز ميگردد و مرال فوق مجددا تكرار ميگردد.
نكتهاي كه در آسانسورها مطرح است اين است كه هر كليد تنها يك بار بايد در حافظه ثبت شود (دو عدد مساوي در حافظه قرار نگيرد). در اينصورت ما به تعداد طبقات آسانسور رجيستر لازم خواهيم داشت. اين كار با چك كردن حافظه هنگام ورود شماره طبقات صورت ميگيرد.
همچنين برنامه بايد قادر باشد در مسير اگر طبقهاي در خواست شده بود توقف نمايد. مثلا فرض كنيد كه آسانسور در طبقه 1 قرار داشته باشد. حال دكمه طبقه 3 و سپس دكمه طبقه 2 را فشار ميدهيم.
آسانسور مقصد را طبقهاي كه اول درخواست شده قرار ميدهد كه در اين مثال همان طبقه 3 است. سپس شروع به حركت به طرف آن ميكند. در حين مسير هنگامي كه به يك طبقه رسيد عدد آن طبقه را با مقادير موجود در حافظه چك ميكند و اگر طبقهاي در مسير و جود داشته باشد كه درخواست شده، جلو آن توقف خواهد كرد. بعنوان مثال در مورد بالا آسانسور در حين حركت به سمت طبقه 3، در بين مسير سنسور طبقه 2 را تحريك ميكند. برنامه شماره سنسور را را مقادير موجود در حافظه مقايسه كرده و در صورتي كه مساوي بود توقف خواهد كرد. در اين مورد حافظه شماره 2 با شماره سنسور برابر است. پس آسانسور جلو درب آن توقف كرده و سپس شماره طبقه مورد نظر را از حافظه خذف خواهد كرد. پس از انجام اين مراحل به راه خود ادامه خواهد داد.
با كمي دقت در برنامه ميتوانيد محل انجام اعمال زير را بيابيد.
مورد ديگر روشن كردن 7-SEG است كه در اينجا از جدول Look up استفاده شده.
به اينصورت كه مقادير متناظر با عدد 1 روي نمايشگر در محل 1 جدول قرار دارد.
نكته ديگر اين برنامه استفاده از اسكن كردن صفحه كليد به مقدار زياد به جاي استفاده از دستور تاخير است. در بعضي مواقع ما نياز به تاخير داريم. ولي برنامه ساختاري دارد كه اگر از تاخير در آن استفاد شود برخي رويدادها مانند دكمه هاي صفحه كليد را از دست ميدهد. نمونه آن در اين برنامه استفاده از اسكن صفحه كليد به جاي تاخير در زير برنامه Door است.
با توجه به اينكه برنامه نكته خاص ديگري ندارد از توضيح آن به همين مقدار اكتفا ميشود. بقيه موارد را ميتوان از روي برنامه و با كمك الگوريتم به راحتي درك كرد.